mybatis-plus中的常用注解
一.前言
1.mybatis-plus簡介
MyBatis-Plus(簡稱 MP)是一個(gè)基于 MyBatis 的增強(qiáng)工具,它對(duì) Mybatis 的基礎(chǔ)功能進(jìn)行了增強(qiáng),但未做任何改變。
使得我們可以可以在 Mybatis 開發(fā)的項(xiàng)目上直接進(jìn)行升級(jí)為 Mybatis-plus,正如它對(duì)自己的定位,它能夠幫助我們進(jìn)一步簡化開發(fā)過程,提高開發(fā)效率。
Mybatis-Plus 其實(shí)可以看作是對(duì) Mybatis 的再一次封裝,升級(jí)之后,對(duì)于單表的 CRUD 操作,調(diào)用 Mybatis-Plus 所提供的 API 就能夠輕松實(shí)現(xiàn),此外還提供了各種查詢方式、分頁等行為。
最最重要的,開發(fā)人員還不用去編寫 XML,這就大大降低了開發(fā)難度.
2.mybatis-plus的優(yōu)點(diǎn)
- 無侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(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ā)測(cè)試時(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;
}看一下源碼對(duì)@Tablename注解的解釋

2.@Tableld注解
注:一般的寫法
寫法:@TableId(value=“數(shù)據(jù)庫主鍵字段”,type = IdType.六種類型之一)
將該屬性對(duì)應(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)先級(jí)高于 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框架對(duì)枚舉進(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è)對(duì)象的某些屬性查出來返回給頁面。
格式:
@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對(duì)象使用,而不是使用類名或外部類型名。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
安卓系統(tǒng)中實(shí)現(xiàn)搖一搖畫面振動(dòng)效果的方法
這篇文章主要介紹了安卓系統(tǒng)中實(shí)現(xiàn)搖一搖畫面振動(dòng)效果的方法,調(diào)用Android SDK中的SensorEventListener接口,需要的朋友可以參考下2015-07-07
Java對(duì)中文進(jìn)行排序的實(shí)現(xiàn)示例
工作中,我們經(jīng)常會(huì)遇到需要進(jìn)行各種排序的需求,本文主要介紹了Java對(duì)中文進(jìn)行排序的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
Java使用OpenOffice將office文件轉(zhuǎn)換為PDF的示例方法
OpenOffice是一個(gè)開源的辦公套件,它包含了文檔處理、電子表格、演示文稿以及繪圖等多種功能,類似于Microsoft Office,本文將給大家介紹Java使用OpenOffice將office文件轉(zhuǎn)換為PDF的示例方法,需要的朋友可以參考下2024-09-09
Spring Boot配置線程池拒絕策略的場景分析(妥善處理好溢出的任務(wù))
本文通過實(shí)例代碼給大家介紹下如何為線程池配置拒絕策略、如何自定義拒絕策略。對(duì)Spring Boot配置線程池拒絕策略的相關(guān)知識(shí)感興趣的朋友一起看看吧2021-09-09
Java的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)
下面小編就為大家?guī)硪黄狫ava的基本數(shù)據(jù)類型和運(yùn)算方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07

