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 數字越小越靠前


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM