mybatis-plus中的常用注解
一.前言
1.mybatis-plus簡介
MyBatis-Plus(簡稱 MP)是一個基于 MyBatis 的增強工具,它對 Mybatis 的基礎功能進行了增強,但未做任何改變。
使得我們可以可以在 Mybatis 開發(fā)的項目上直接進行升級為 Mybatis-plus,正如它對自己的定位,它能夠幫助我們進一步簡化開發(fā)過程,提高開發(fā)效率。
Mybatis-Plus 其實可以看作是對 Mybatis 的再一次封裝,升級之后,對于單表的 CRUD 操作,調用 Mybatis-Plus 所提供的 API 就能夠輕松實現(xiàn),此外還提供了各種查詢方式、分頁等行為。
最最重要的,開發(fā)人員還不用去編寫 XML,這就大大降低了開發(fā)難度.
2.mybatis-plus的優(yōu)點
- 無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產生影響,如絲般順滑
- 損耗?。?/strong>啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作,BaseMapper
- 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求,簡單的CRUD操作不用自己編寫。
- 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
- 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用(自動生成代碼)
- 內置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關心具體操作,配置好插件之后,寫分頁等同于普通 List 查詢
- 分頁插件支持多種數(shù)據(jù)庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫
- 內置性能分析插件:可輸出 SQL 語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢
- 內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預防誤操作
3.mybatis-plus依賴包
注:我的配置是基于MyBatis-plus 3.3.1的版本
<!--MyBatis-plus starter--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.3.1</version> </dependency>
二.mybatis-plus常用注解
1.@Tablename注解
@Tablename注解注解用來將指定的數(shù)據(jù)庫表和 JavaBean 進行映射。
多用于項目中entity包下 實體類中
@Tablename("user") public class User { private Long id; private String name; private Integer age; private String email; }
看一下源碼對@Tablename注解的解釋
2.@Tableld注解
注:一般的寫法
寫法:@TableId(value=“數(shù)據(jù)庫主鍵字段”,type = IdType.六種類型之一)
將該屬性對應的字段指定為主鍵
屬性 | 類型 | 默認值 | 描述 |
---|---|---|---|
value | string | "" | 主鍵字段名 |
type | Enum | IdType.NONE | 主鍵類型 |
類型:
值 | 描述 |
---|---|
Auto | 數(shù)據(jù)庫自增 |
Input | 自行輸入 |
ID_Worker | 分布式全局唯一ID 長整型類型 |
UUID | 32位UUID字符串 |
NONE | 無狀態(tài) |
ID_WORKER_STR | 分布式全局唯一ID 字符串類型 |
3.@TableField注解
1、主要用來解決實體類的字段名與數(shù)據(jù)庫中的字段名不匹配的問題(數(shù)據(jù)庫user_addr,字段useraddr未駝峰)
2、實體類中的屬性字段在表中不存在的問題
3、表示自動填充字段一般用于字段名
屬性 | 類型 | 必須指定 | 默認值 | 描述 |
value | String | 否 | "" | 數(shù)據(jù)庫字段名 |
exist | boolean | 否 | true | 是否為數(shù)據(jù)庫表字段 |
condition | String | 否 | "" | 字段 where 實體查詢比較條件,有值設置則按設置的值為準,沒有則為默認全局的 %s=#{%s},參考(opens new window) |
update | String | 否 | "" | 字段 update set 部分注入,例如:當在version字段上注解update="%s+1" 表示更新時會 set version=version+1 (該屬性優(yōu)先級高于 el 屬性) |
insertStrategy | Enum | 否 | FieldStrategy.DEFAULT | 舉例:NOT_NULLinsert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>) |
updateStrategy | Enum | 否 | FieldStrategy.DEFAULT | 舉例:IGNOREDupdate table_a set column=#{columnProperty} |
whereStrategy | Enum | 否 | FieldStrategy.DEFAULT | 舉例:NOT_EMPTYwhere <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if> |
fill | Enum | 否 | FieldFill.DEFAULT | 字段自動填充策略 |
select | boolean | 否 | true | 是否進行 select 查詢 |
keepGlobalFormat | boolean | 否 | false | 是否保持使用全局的 format 進行處理 |
jdbcType | JdbcType | 否 | JdbcType.UNDEFINED | JDBC 類型 (該默認值不代表會按照該值生效) |
typeHandler | Class<? extends TypeHandler> | 否 | UnknownTypeHandler.class | 類型處理器 (該默認值不代表會按照該值生效) |
numericScale | String | 否 | "" | 指定小數(shù)點后保留的位數(shù) |
4.@TableLogic注解
邏輯刪除注解: 一般用于項目中的邏輯刪除字段上添加該注解
效果:在字段上加上這個注解再執(zhí)行BaseMapper的刪除方法時,刪除方法會變成修改
執(zhí)行是效果:
- 加@TableLogic的情況下
- sql:UPDATE 表名 SET deleted=2 WHERE id=? AND deleted=0
- 不加@TableLogic的情況下
- 走 delete from 表名 where id=值
@TableLogic注解參數(shù):
- value = "" 默認的原值
- delval = "" 刪除后的值
- @TableLogic(value="原值",delval="改值")
5.@EnumValue注解
注:mp框架對枚舉進行處理的一個注解
使用場景:創(chuàng)建枚舉類,在需要存儲數(shù)據(jù)庫的屬性上添加@EnumValue注解
代碼展示
public enum SexEnum { MAN(1, "男"), WOMAN(2, "女"); @EnumValue private Integer key; }
三.項目中用到其他的注解
1.@JsonFormat注解
Jackson依賴
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency>
注: 是Jackson提供注解
導包:
import com.fasterxml.jackson.annotation.JsonFormat;
作用:日期格式化注解,方便前段解析,通常日期格式都是以時間戳的形式存放在數(shù)據(jù)庫里,當前端頁面通過接口查詢時,我們會將一個對象的某些屬性查出來返回給頁面。
格式:
@JsonFormat(pattern = “yyyy-MM-dd'T'HH:mm:ss”, locale = “zh”, timezone = “GMT+8”)
屬性:
- 1.pattern 指定轉化的格式SSSZ(S指的是微秒,Z指時區(qū)),此處的pattern和java.text.SimpleDateFormat中的Time Patterns一致
- 2.locale主要指語言,如果中文的話,月份輸出是五月,但是英文就是May,尤其是在反序列化的時候特別重要
- 3.timezone主要解決“8小時”問題
2.@JsonIgnore注解
注: 是Jackson提供注解
導包:
import com.fasterxml.jackson.annotation.JsonIgnore;
作用:在json序列化時將java Bean中的一些屬性忽略掉,標記在屬性或者方法上,返回的json數(shù)據(jù)即不包含該屬性。
3.@JsonTypeId注解
作用:屬性注解用來表示屬性值應該作為Type Idfor對象使用,而不是使用類名或外部類型名。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳細學習Java Cookie技術(用戶登錄、瀏覽、訪問權限)
這篇文章主要為大家詳細介紹了Java Cookie技術,顯示用戶上次登錄的時間、顯示用戶最近瀏覽的若干個圖片(按比例縮放)等,感興趣的小伙伴們可以參考一下2016-08-08Springboot使用jxls實現(xiàn)同sheet多個列表展示
這篇文章主要介紹了Springboot使用jxls實現(xiàn)同sheet多個列表展示,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08@insert mybatis踩坑記錄,實體接收前端傳遞的參數(shù)
這篇文章主要介紹了@insert mybatis踩坑記錄,實體接收前端傳遞的參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Ubuntu安裝JDK與IntelliJ?IDEA的詳細過程
APT是Linux系統(tǒng)上的包管理工具,能自動解決軟件包依賴關系并從遠程存儲庫中獲取安裝軟件包,這篇文章主要介紹了Ubuntu安裝JDK與IntelliJ?IDEA的過程,需要的朋友可以參考下2023-08-08@PropertySource 無法讀取配置文件的屬性值解決方案
這篇文章主要介紹了@PropertySource 無法讀取配置文件的屬性值解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Springboot內置Tomcat配置參數(shù)調優(yōu)方式
這篇文章主要介紹了Springboot內置Tomcat配置參數(shù)調優(yōu)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06