Mybatis 持久層使用的註解API
阿新 • • 發佈:2020-12-15
技術標籤:mybatisJeesitemybatis註解mybatis持久層SqlMap
**專案背景:使用的springboot+mybatis技術框架,持久層通過【註解】配置資料表關係,實現業務條件查詢。
一. 物理表屬性 @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 ""; }
二.物理表列屬性 @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; }
三.關聯表屬性 @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 {}; }
四.查詢型別 @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),
;
}