1您单、@TableName
@TableName
用法:映射數(shù)據(jù)庫的表名,如果數(shù)據(jù)庫表名與實體類名不一致荞雏,用@TableName來映射虐秦。
packagecom.example.mybatisplus.entiy;importcom.baomidou.mybatisplus.annotation.TableName;importlombok.Data;@Data@TableName("mp")//表名publicclassUser{privateString id;privateString name;privateString age;}
當(dāng)數(shù)據(jù)庫表名與實體類名不一致,報錯如下:
2凤优、@TableId
@TableId
設(shè)置主鍵映射
1)value
value 映射主鍵字段名
2)type
type 設(shè)置主鍵類型悦陋,主鍵的生成策略
~~~
AUTO(0),NONE(1),INPUT(2),ASSIGN_ID(3),ASSIGN_UUID(4),/** @deprecated */@Deprecated#已不推薦ID_WORKER(3),/** @deprecated */@Deprecated#已不推薦ID_WORKER_STR(3),/** @deprecated */@Deprecated#已不推薦UUID(4);
~~~
值描述
AUTO數(shù)據(jù)庫自增
NONEMP set 主鍵,雪花算法實現(xiàn)
INPUT需要開發(fā)者手動賦值
ASSIGN_IDMP 分配 ID筑辨,Long俺驶、Integer、String
ASSIGN_UUID分配 UUID棍辕,Strinig
INPUT 如果開發(fā)者沒有手動賦值暮现,則數(shù)據(jù)庫通過自增的方式給主鍵賦值还绘,如果開發(fā)者手動賦值,則存入該值栖袋。
AUTO 默認(rèn)就是數(shù)據(jù)庫自增拍顷,開發(fā)者無需賦值。
ASSIGN_ID MP 自動賦值塘幅,雪花算法昔案。
ASSIGN_UUID 主鍵的數(shù)據(jù)類型必須是 String ,自動生成 UUID 進(jìn)行賦值晌块。
例如:
編寫測試類
~~~
@Test? ? void save(){Useruser= newUser();user.setName("張三");user.setAge(20);? ? ? ? userMapper.insert(user);? ? }
~~~
Id成功按策略插入成功
3爱沟、@TableField
@TableField
映射?非主鍵?字段,value 映射字段名
例如:
當(dāng)字段名與數(shù)據(jù)庫字段名不一致時匆背,報錯如下:
正確寫法:
1)exist
exist 表示是否為數(shù)據(jù)庫字段 false呼伸,如果實體類中的成員變量在數(shù)據(jù)庫中沒有對應(yīng)的字段,則可以使用 exist钝尸,VO括享、DTO
當(dāng)添加數(shù)據(jù)庫沒有的字段時,報錯如下:
加上@TableField(exist = false)珍促,表示在數(shù)據(jù)庫中沒有對應(yīng)的字段铃辖,即可查詢成功。
2)select
select 表示是否查詢該字段
3)fill
fill 表示是否自動填充猪叙,如create_time娇斩、update_time
1、增加字段
2穴翩、擴(kuò)充實體類
~~~
@TableField(fill = FieldFill.INSERT)//填充字段privateDate createTime;@TableField(fill = FieldFill.INSERT_UPDATE)//填充字段privateDate updateTime;
~~~
3犬第、MetaObjectHandler
創(chuàng)建MyMetaObjectHandler類 implements MetaObjectHandler,重寫兩個方法芒帕。
~~~
packagecom.example.mybatisplus.handle;importcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;importorg.apache.ibatis.reflection.MetaObject;importorg.springframework.stereotype.Component;@ComponentpublicclassMyMetaObjectHandlerimplementsMetaObjectHandler{@OverridepublicvoidinsertFill(MetaObject metaObject){this.setFieldValByName("createTime", System.currentTimeMillis(), metaObject);// 創(chuàng)建時間 或者new Date()this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);// 更新時間}@OverridepublicvoidupdateFill(MetaObject metaObject){this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject);// 更新時間}}
~~~
4、Test
4鉴分、@Version
@Version
標(biāo)記樂觀鎖,通過 version 字段來保證數(shù)據(jù)的安全性,當(dāng)修改數(shù)據(jù)的時候,會以 version 作為條件载慈,當(dāng)條件成立的時候才會修改成功。
1寡具、數(shù)據(jù)庫表添加 version 字段,默認(rèn)值為 1
2、實體類添加 version 成員變量,并且添加 @Version
@Versionprivate Integer version;//樂觀鎖
3、配置類
packagecom.example.mybatisplus.config;importcom.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@Configuration// 聲明為配置類publicclassMyConfig{@BeanpublicOptimisticLockerInterceptor optimisticLockerInterceptor(){returnnew OptimisticLockerInterceptor();// 創(chuàng)建一個 OptimisticLockerInterceptor 對象}}
測試:version 1-->2
3稼钩、@EnumValue
@EnumValue
1)枚舉類注解實現(xiàn)
通用枚舉類注解静秆,將數(shù)據(jù)庫字段?映射成?實體類的枚舉類型成員變量
1、設(shè)計表
2、實體類添加字段
privateStatusEnum status;//狀態(tài)? ? 枚舉類型
3膨蛮、創(chuàng)建枚舉類
packagecom.example.mybatisplus.enums;importcom.baomidou.mybatisplus.annotation.EnumValue;publicenumStatusEnum {//枚舉類? enum類型的類//獎勵1? 懲罰0reward(1,"獎勵"),punishment(0,"懲罰");@EnumValueprivateInteger code;privateString msg;? ? StatusEnum(Integer code, String msg) {this.code = code;this.msg = msg;? ? }}
4、application.yml
mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl# 日志實現(xiàn)類-->打印sqltype-enums-package:com.example.mybatisplus.enums# 實現(xiàn)類所在的包這里
5、測試
查詢id為1、2附帽,其對應(yīng)status分別為1颗圣、0
2)接口實現(xiàn)
importcom.baomidou.mybatisplus.core.enums.IEnum;publicenumSexEnum implements IEnum {? ? ? ? ONE(1,"男"),? ? TWO(0,"女"),privateInteger code;privateString msg;? ? AgeEnum(Integer code, String msg) {this.code = code;this.msg = msg;? ? }@OverridepublicInteger getValue() {returnthis.code;? ? }}
6、@TableLogic
@TableLogic
映射邏輯刪除
1、數(shù)據(jù)表添加 identification字段
2斟叼、實體類添加注解
@TableLogicprivate Integer identification;//是否刪除標(biāo)識
3绢淀、application.yml 添加配置
mybatis-plus:? configuration:? ? log-impl:org.apache.ibatis.logging.stdout.StdOutImpl# 日志實現(xiàn)類? -->打印sql? type-enums-package:com.example.mybatisplus.enums# 實現(xiàn)類所在的包? global-config:? ? db-config:? ? ? logic-not-delete-value:0# 邏輯刪除的值? ? ? logic-delete-value:1# 邏輯刪除的值
4硝全、測試
刪除id為2的User,identification標(biāo)識 0-->1
再次查詢數(shù)據(jù)庫,查不到id為2的User,邏輯刪除實現(xiàn)遮精。