Annotation API used by Mybatis persistence layer

** Project background: using the springboot+mybatis technical framework, the persistence layer configures the data table relationship through [annotation] to realize business condition query.

1. Physical table attributes @Table

/**
 * 指定实体的物理表属性 
 */
public @interface Table {

	/**
	 * 物理表名
	 */
	String name() default "";
	
	/**
	 * 当前表别名
	 */
	String alias() default "a";
	
	/**
	 * 表列定义
	 */
	Column[] columns();
	
	/**
	 * 查询,关联表
	 */
	JoinTable[] joinTable() default {};
	
	/**
	 * 指定排序
	 */
	String orderBy() default "";
	
	/**
	 * 表说明
	 */
	String comment() default "";
	
	/**
	 * 扩展ColumnSQL,在这里指定sqlMap的key。<br>
	 * 例如:\@Table(extColumnKeys="dataScopeColumn");<br>
	 * Service里设置:sqlMap.put("extColumn", "column_name AS \"columnName\"");<br>
	 * 在执行查询的时候,该语句放到自动会加到Where最后并执行。<br>
	 * <b>注意:</b>如果设置,必须后台代码中设置,否则可能造成sql注入漏洞<br>
	 */
	String extColumnKeys() default "";
	
	/**
	 * 扩展FromSQL,在这里指定sqlMap的key。<br>
	 * 例如:\@Table(extFromKeys="dataScopeFrom");<br>
	 * Service里设置:sqlMap.put("dataScopeFrom", "JOIN table_name t on t.pk=a.pk");<br>
	 * 在执行查询的时候,该语句放到自动会加到Where最后并执行。<br>
	 * <b>注意:</b>如果设置,必须后台代码中设置,否则可能造成sql注入漏洞<br>
	 */
	String extFromKeys() default "";
	
	/**
	 * 扩展WhereSQL,在这里指定sqlMap的key。<br>
	 * 例如:\@Table(extWhereKeys="dataScopeWhere");<br>
	 * Service里设置:sqlMap.put("dataScopeWhere", "AND column_name='value'");<br>
	 * 在执行查询的时候,该语句放到自动会加到Where最后并执行。<br>
	 * <b>注意:</b>如果设置,必须后台代码中设置,否则可能造成sql注入漏洞<br>
	 */
	String extWhereKeys() default "";
	
}

2. Physical table column attributes @Column

/**
 * 定义物理表列属性(不继承父类注解)
 * @author ThinkGem
 */
public @interface Column {
 
	/**
	 * 字段名(例如:config_key)
	 */
	String name() default "";
 
	/**
	 * 属性名,若不指定,则根据name()字段名进行驼峰命名法转换(例如:config_key 转换为   configKey)
	 */
	String attrName() default "";
 
	/**
	 * 属性名,定义的类型
	 */
	Class<?> type() default Class.class;
	
	/**
	 * 标签名
	 */
	String label() default "";
	
	/**
	 * 字段备注
	 */
	String comment() default "";
 
	/**
	 * 是否主键(update、delete时的条件)
	 */
	boolean isPK() default false;
	
	/**
	 * 是否插入字段
	 */
	boolean isInsert() default true;
	
	/**
	 * 是否更新字段
	 */
	boolean isUpdate() default true;
	
	/**
	 * 是否是查询字段
	 */
	boolean isQuery() default true;
	
	/**
	 * 查询类型
	 */
	QueryType queryType() default QueryType.EQ;
	
	/**
	 * 包含嵌入一个实体
	 */
	Class<?> includeEntity() default Class.class;
}

3. Related table attributes @JoinTable

/**
 * 指定实体的物理表的关联表属性 
 */
public @interface JoinTable {
	
	/**
	 * 连接类型
	 */
	Type type() default Type.JOIN;
	public enum Type{
		JOIN("JOIN"), // INNER JOIN
		LEFT_JOIN("LEFT JOIN"),
		RIGHT_JOIN("RIGHT JOIN");
		private final String value;
		Type(String value) { this.value = value; }
		public String value() { return this.value; }
	}
	
	/**
	 * 连接的表,指定实体Class
	 */
	Class<?> entity();
	
	/**
	 * 当前表别名
	 */
	String alias();
	
	/**
	 * 连接表条件
	 */
	String on();
	
	/**
	 * 对应主表中对应的属性名,若不指定,则根据entity()进行首字母小写得到属性名(例如:Config 转换为   config)
	 */
	String attrName() default "";
	
	/**
	 * 连接表,返回的列,若不指定,则读取entity()的所有列。
	 */
	Column[] columns() default {};
	
}

Four. Query Type @QueryType

public enum QueryType{

	EQ("="),
	NE("!="),
	GT(">"),
	GTE(">="),
	LT("<"),
	LTE("<="),
	IN("IN"),
	NOT_IN("NOT IN"),
	LIKE("LIKE", "%", "%"),
	LEFT_LIKE("LIKE", "%", ""),
	RIGHT_LIKE("LIKE", "", "%"),
	IS_NULL("IS NULL"),
	IS_NOT_NULL("IS NOT NULL"),
	
	// 强制条件,不管值是不是空字符串都加载这个查询条件
	EQ_FORCE("=", true),
	NE_FORCE("!=", true),
;
}

Guess you like

Origin blog.csdn.net/weixin_43945983/article/details/111152279