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