![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5iYhZmY2EWY1EGM2UDM2QmY1ATMlFWOiF2YxQDOkJTOj9CXyAzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.jpeg)
一、添加依賴pom.xml
二、application.yml添加配置
三、application配置@MapperScan
到這裡就引入了MyBatis-Plus了。
四、代碼生成器
很多時候,都不想寫entity,mapper等檔案,這個時候就可以使用代碼生成器來自動生成對應的檔案了。
需要修改幾個地方:
1、資料庫連接配接 2、檔案需要放置的檔案夾位址。
具體代碼:
// 示範例子,執行 main 方法控制台輸入子產品表名回車自動生成對應項目目錄中
五、添加測試
這裡主要是Mybatis-Plus的CURD等方法。
六、資料分頁
1、簡單分頁方法
上面的分頁其實是調用BaseMapper的selectPage方法,這樣的分頁傳回的資料确實是分頁後的資料,但在控制台列印的SQL語句上看到其實并沒有真正的實體分頁,而是通過緩存來獲得全部資料中再進行的分頁,這樣對于大資料量操作時是不可取的,那麼接下來就叙述一下,真正實作實體分頁的方法。
2、 實體分頁方法
建立一個MybatisPlusConfig配置類檔案
重新調用mpUserService.page可以看到資料有實體分頁
3、XML自定義分頁
UserServiceImpl.java 調用分頁方法
七、列印sql日志
為了友善排查錯誤,很多時候需要列印mybatis生成的sql語句,這時候就需要列印日志了。
在application.yml中添加:
或者
八、邏輯删除
很多時候需要表的資料雖然删除了,但是還是希望不是真正删除資料,資料還是留在資料庫中,隻需要使用一個字段來做标志為即可,這時候就需要邏輯删除功能。
SpringBoot 配置方式:
application.yml 加入配置(如果你的預設值和mp預設的一樣,該配置可無):
注冊 Bean(3.1.1開始不再需要這一步):
實體類字段上加上@TableLogic注解
@TableField(select = false)注解,可以不查詢出deleted字段
@TableLogic
//@TableField(select = false)
private Integer deleted;
效果: 使用mp自帶方法删除和查找都會附帶邏輯删除功能 (自己寫的xml不會)
example
删除時 update user set deleted=1 where id =1 and deleted=0
查找時 select * from user where deleted=0
附件說明
邏輯删除是為了友善資料恢複和保護資料本身價值等等的一種方案,但實際就是删除。
如果你需要再查出來就不應使用邏輯删除,而是以一個狀态去表示。
九、主鍵政策
mybatis-plus 的主鍵生成的類型 預設類型 是 IdType.ID_WORKER全局唯一ID,内容為空自動填充(預設配置),雪花算法
1,局部主鍵政策實作
在實體類中 ID屬性加注解
2,全局主鍵政策實作
需要在application.yml檔案中添加
表示全局主鍵都采用該政策(如果全局政策和局部政策都有設定,局部政策優先級高)
十、自動填充
很多時候表中都需要添加建立時間,建立人,修改時間,修改人來跟蹤資料的來源和變動,但每次插入資料和修改資料的時候都要set這幾個字段又感覺很麻煩,這個時候就系統系統能自動填充這幾個字段了。
字段必須聲明TableField注解,屬性fill選擇對應政策,該申明告知 Mybatis-Plus 需要預留注入 SQL 字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
屬性fill有四種對應政策,分别為:
自定義實作類 MyMetaObjectHandler:
測試使用
自動填充優化
insertFill方法每次插入的時候都會調用,如果不存在createTime屬性的話,每次插入都會白白調用了,浪費資源,是以可以判斷是否存在該屬性
希望,當更新時有設定時間,就用更新時設定的時間,當沒有設定時就自動填充更新時間,可以這樣設定