原文鏈接:橙子&栗子&世界——Mybatis-Plus的使用(三)——註解與配置文件
Mybatis-Plus的有些註解和配置文件是相輔相成的,比如:@TableField的insertStrategy、updateStrategy等屬性,如果沒有單獨設置,則就會跟隨全局配置,具體的常用配置(.yml)在文章的後半部分有寫。
常用註解
對於我來說最常用的註解有三個@TableName、@TableId、@TableField
@TableName
使用在實體類上,是表名的註解,最常用的屬性就是value:
屬性 | 默認值 | 描述 |
---|---|---|
value | 否 | 表名(默認是實體類名對應的表名(駝峯轉下劃線),若表名與實體類名不能對應,則需要指定表名) |
其他屬性:摘自官網@TableName
屬性 | 默認值 | 描述 |
---|---|---|
schema | “” | schema |
keepGlobalPrefix | false | 是否保持使用全局的 tablePrefix 的值(如果設置了全局 tablePrefix 且自行設置了 value 的值) |
resultMap | “” | xml 中 resultMap 的 id |
autoResultMap | false | 是否自動構建 resultMap 並使用(如果設置 resultMap 則不會進行 resultMap 的自動構建並注入) |
@TableId
主鍵註解,用在對應的表的主鍵字段上
屬性 | 默認值 | 描述 |
---|---|---|
value | “” | 主鍵字段名(默認是和屬性對應的字段(駝峯轉下劃線),若字段名與屬性名不能對應,則需要指定字段) |
type | IdType.NONE | 主鍵類型 |
兩個屬性都是比較常用的屬性,特別的,type有個枚舉值:摘自官網@TableId
值 | 描述 |
---|---|
AUTO | 數據庫自增(依賴數據庫) |
INPUT | 自行輸入 |
ID_WORKER | 分佈式全局唯一ID(基於sequence) 長整型類型 |
UUID | 32位UUID字符串 |
NONE | 無狀態 |
ID_WORKER_STR | 分佈式全局唯一ID(基於sequence) 字符串類型 |
@TableField
除主鍵外其他字段的註解,常用屬性
屬性 | 默認值 | 描述 |
---|---|---|
value | “” | 字段名(默認是和屬性對應的字段(駝峯轉下劃線),若字段名與屬性名不能對應,則需要指定字段) |
exist | true | 是否爲數據庫表字段(若不需要與數據庫的字段對應,則必須設置爲false) |
其他屬性:摘自官網@TableField
屬性 | 描述 |
---|---|
el | 映射爲原生 #{ … } 邏輯,相當於寫在 xml 裏的 #{ … } 部分 |
condition | 是否爲數據庫表字段(若不需要與數據庫的字段對應,則必須設置爲false) |
update | 字段 update set 部分注入, 例如:update="%s+1":表示更新時會set version=version+1(該屬性優先級高於 el 屬性) |
insertStrategy | 插入策略… |
updateStrategy | 更新策略… |
whereStrategy | 條件策略… |
fill | 字段自動填充策略 |
select | 是否進行 select 查詢 |
keepGlobalFormat | 是否保持使用全局的 format 進行處理 |
對於以上的插入、更新等策略都可以從官網上找到描述,這裏就不繼續了,以免顯得有些亂。
其他註解
@Version
樂觀鎖註解、標記 @Verison 在字段上
@EnumValue
通枚舉類註解(註解在枚舉字段上)
@TableLogic
表字段邏輯處理註解(邏輯刪除)
@SqlParser
租戶註解
@KeySequence
序列主鍵策略
想要了解更詳細的,可以移步官網查看其他註解
配置文件
這裏主要介紹的是springboot的.yml配置文件的方式,這部分的配置主體結構大概如下:
mybatis-plus:
......
configuration:
......
global-config:
......
db-config:
......
那我們也把分爲4個部分來介紹
mybatis-plus:
# MyBatis Mapper 所對應的 XML 文件位置,如果您在 Mapper 中有自定義方法(XML 中有自定義實現),需要進行該配置,告訴 Mapper 所對應的 XML 文件位置
config-location: classpath:mybatis-config.xml
# 指定外部化 MyBatis Properties 配置,通過該配置可以抽離配置,實現不同環境的配置部署
configuration-properties: classpath:mybatis-config.properties
# Mapper對應的xml文件掃描,多個目錄用逗號或者分號分隔
mapper-locations: classpath*:/mapper/**/*Mapper.xml
# MyBaits 別名包掃描路徑,通過該屬性可以給包中的類註冊別名,註冊後在 Mapper 對應的 XML 文件中可以直接使用類名,而不用使用全限定的類名(即 XML 中調用的時候不用包含包名)
type-aliases-package: com.ck.**
# 該配置請和 typeAliasesPackage 一起使用,如果配置了該屬性,則僅僅會掃描路徑下以該類作爲父類的域對象
type-aliases-super-type: java.lang.Object
# 枚舉類 掃描路徑,如果配置了該屬性,會將路徑下的枚舉類進行注入,讓實體類字段能夠簡單快捷的使用枚舉屬性
type-enums-package: com.baomidou.mybatisplus.samples.quickstart.enums
# 啓動時是否檢查 MyBatis XML 文件的存在,默認不檢查
check-config-location: true
# SIMPLE:該執行器類型不做特殊的事情,爲每個語句的執行創建一個新的預處理語句,REUSE:該執行器類型會複用預處理語句,BATCH:該執行器類型會批量執行所有的更新語句
default-executor-type: REUSE
其中常用的配置有mapper-locations、type-aliases-package
configuration:
# 配置返回數據庫(column下劃線命名&&返回java實體是駝峯命名),自動匹配無需as(沒開啓這個,SQL需要寫as: select user_id as userId)
map-underscore-to-camel-case: true
# 全局地開啓或關閉配置文件中的所有映射器已經配置的任何緩存,默認爲 true
cache-enabled: false
# 懶加載
aggressive-lazy-loading: true
# NONE:不啓用自動映射 PARTIAL:只對非嵌套的 resultMap 進行自動映射 FULL:對所有的 resultMap 都進行自動映射
auto-mapping-behavior: partial
# NONE:不做任何處理 (默認值)WARNING:以日誌的形式打印相關警告信息 FAILING:當作映射失敗處理,並拋出異常和詳細信息
auto-mapping-unknown-column-behavior: none
# 如果查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
call-setters-on-nulls: true
# 配置JdbcTypeForNull, oracle數據庫必須配置
jdbc-type-for-null: "null"
# 這個配置會將執行的sql打印出來,在開發或測試的時候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
常用的配置有map-underscore-to-camel-case、cache-enabled、jdbc-type-for-null、log-impl,
global-config:
# 是否控制檯 print mybatis-plus 的 LOGO
banner: true
# 機器 ID 部分(影響雪花ID)
# worker-id:
# 數據標識 ID 部分(影響雪花ID)(workerId 和 datacenterId 一起配置才能重新初始化 Sequence)
# datacenter-id:
這部分配置沒有寫完,但也是不常用的,但可以從官方瞭解詳情
db-config:
#表名下劃線命名默認true
table-underline: true
#id類型
id-type: auto
#是否開啓大寫命名,默認不開啓
#capital-mode: false
#邏輯已刪除值,(邏輯刪除下有效) 需要注入邏輯策略LogicSqlInjector 以@Bean方式注入
logic-not-delete-value: 0
#邏輯未刪除值,(邏輯刪除下有效)
logic-delete-value: 1
#數據庫類型 這個屬性沒什麼用 數據庫類型,默認值爲未知的數據庫類型 如果值爲OTHER,啓動時會根據數據庫連接 url 獲取數據庫類型;如果不是OTHER則不會自動獲取數據庫類型
db-type: mysql
# IGNORED 忽略判斷 NOT_NULL 非NULL判斷 NOT_EMPTY 非空判斷(只對字符串類型字段,其他類型字段依然爲非NULL判斷) DEFAULT 追隨全局配置 類似的還有update-strategy、select-strategy等
insert-strategy: not_null
這部分常用的配置有id-type等,db-config詳情
以上內容來源於