1. 程式人生 > 其它 >Mybatis plus註解使用

Mybatis plus註解使用

前言
  MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

特性
  無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
  損耗小:啟動即會自動注入基本CURD,效能基本無損耗,直接面向物件操作
  強大的 CRUD操作:內建通用 Mapper、通用Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
  支援 Lambda形式呼叫:通過 Lambda 表示式,方便的編寫各類查詢條件,無需再擔心欄位寫錯
  支援主鍵自動生成:支援多達 4種主鍵策略(內含分散式唯一 ID 生成器 - Sequence)

,可自由配置,完美解決主鍵問題
  支援 ActiveRecord 模式:支援ActiveRecord 形式呼叫,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
  支援自定義全域性通用操作:支援全域性通用方法注入( Write once, use anywhere
  內建程式碼生成器:採用程式碼或者Maven 外掛可快速生成 Mapper 、 Model 、 Service 、 Controller
  層程式碼,支援模板引擎,更有超多自定義配置等您來使用
  內建分頁外掛:基於 MyBatis
  物理分頁,開發者無需關心具體操作,配置好外掛之後,寫分頁等同於普通 List 查詢
  分頁外掛支援多種資料庫:支援MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫
  內建效能分析外掛:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢 - 內建全域性攔截外掛:提供全表 delete、 update 操作智慧分析阻斷,也可自定義攔截規則,預防誤操作
  支援資料庫
  mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver 、 presto
  達夢資料庫 、 虛谷資料庫 、 人大金倉資料庫
框架結構

@TableName

  • @TableName(表名註解)
@TableName(value = "em_t")
public class Test {
    private String id;
    private String name;
}
屬性型別必須指定預設值描述
value String "" 表名
schema String "" schema
keepGlobalPrefix boolean false 是否保持使用全域性的 tablePrefix 的值(如果設定了全域性 tablePrefix 且自行設定了 value 的值)
resultMap String "" xml 中 resultMap 的 id
autoResultMap boolean false 是否自動構建 resultMap 並使用(如果設定 resultMap 則不會進行 resultMap 的自動構建並注入)
excludeProperty String[] {} 需要排除的屬性名(@since 3.3.1)
關於`autoResultMap`的說明:

mp會自動構建一個ResultMap並注入到mybatis裡(一般用不上).下面講兩句:

因為mp底層是mybatis,所以一些mybatis的常識你要知道,mp只是幫你注入了常用crud到mybatis裡 注入之前可以說是動態的(根據你entity的欄位以及註解變化而變化)
但是注入之後是靜態的(等於你寫在xml的東西) 而對於直接指定typeHandler,mybatis只支援你寫在2個地方: (1)定義在resultMap裡,只作用於select查詢的返回結果封裝 (2)定義在insert和updatesql的#{property}裡的property後面(例:#{property,typehandler
=xxx.xxx.xxx}),只作用於設定值
  而除了這兩種直接指定typeHandler,mybatis有一個全域性的掃描你自己的typeHandler包的配置,這是根據你的property的型別去找typeHandler並使用.

@TableId

  • @TableId(表名主鍵)
    value:主鍵欄位名
    type:主鍵型別:
    寫法:IdType.NONE
AUTO——資料庫自增
INPUT——自行輸入
ID_WORKER——分散式全域性唯一ID長整型型別
UUID——32位UUID字串
NONE——無狀態,該型別為未設定主鍵型別(註解裡等於跟隨全域性,全局裡約等於 INPUT)
ID_WORKER_STR——分散式全域性唯一ID字串型別
@TableId(value = “id”, type = IdType.AUTO):自增
@TableId(value = “id”, type = IdType.ID_WORKER_STR):分散式全域性唯一ID字串型別
@TableId(value = “id”, type = IdType.INPUT):自行輸入
@TableId(value = “id”, type = IdType.ID_WORKER):分散式全域性唯一ID 長整型型別
@TableId(value = “id”, type = IdType.UUID):32位UUID字串
@TableId(value = “id”, type = IdType.NONE):無狀態

例如:

@TableName(value = "em_t")
public class Test {
    @TableId(value = "emid",type= IdType.AUTO)
    private String emid;
    private String name;
}

@TableField

  • @TableField
  • value:欄位名
  • exit:是否為資料庫表字段
  • Strategy:欄位驗證
  • 寫法:FieldStrategy.NOT_NULL
IGNORED——忽略判斷
NOT_NULL——非NULL判斷
NOT_EMPTY——非空判斷(字串型別)
DEFAULT——追隨全域性配置

fill:欄位自動填充策略(需要寫相關的配置類)
寫法:FieldFill.DEFAULT

DEFAULT——預設不處理
INSERT——插入時填充欄位
UPDATE——更新時填充欄位
INSERT_UPDATE——插入和更新時填充欄位

@TableField(value = “age”)// 用來解決資料庫中的欄位和實體類的欄位不匹配問題
@TableField(exist = false) // 用來解決實體類中有的屬性但是資料表中沒有的欄位,預設為true
@TableField(condition = SqlCondition.LIKE):表示該屬性可以模糊搜尋。
@TableField(fill = FieldFill.INSERT):註解填充欄位 ,生成器策略部分也可以配置!
  FieldStrategy:

  • 欄位填充策略 FieldFill:
描述
DEFAULT 預設不處理
INSERT 插入時填充欄位
UPDATE 更新時填充欄位
INSERT_UPDATE 插入和更新時填充欄位
@TableField(value = "ename")
private String ename;

@TableField(.. , update="%s+1") 其中 %s 會填充為欄位
//輸出 SQL 為:update 表 set 欄位=欄位+1 where ...


@TableField(.. , update="now()") 使用資料庫時間
//輸出 SQL 為:update 表 set 欄位=now() where ...

@TableField(condition = SqlCondition.LIKE)
private String name;
//輸出 SQL 為:selectwhere name LIKE CONCAT('%',值,'%')

@Version:樂觀鎖註解、標記

@KeySequence:序列主鍵策略

  • 屬性:value、resultMap

@EnumValue:通列舉類註解((註解在列舉欄位上))

@TableLogic:表字段邏輯處理註解(邏輯刪除)

  • 描述:表字段邏輯處理註解(邏輯刪除)
屬性型別必須指定預設值描述
value String "" 邏輯未刪除值
delval String "" 邏輯刪除值

@SqlParser:租戶註解

@OrderBy:排序註解

  • 描述:內建 SQL 預設指定排序,優先順序低於 wrapper 條件查詢
屬性型別必須指定預設值描述
isDesc boolean 是否倒序查詢
sort short Short.MAX_VALUE 數字越小越靠前