MyBatis-Plus(二、常用註解)
1、@TableName
@TableName
用法:映射數據庫的表名,如果數據庫表名與實體類名不一致,用@TableName來映射。
package com.example.mybatisplus.entiy;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("mp") //表名
public class User {
private String id;
private String name;
private String age;
}

當數據庫表名與實體類名不一致,報錯如下:

2、@TableId
@TableId
設置主鍵映射
1)value
- value 映射主鍵字段名

2)type
- type 設置主鍵類型,主鍵的生成策略
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 | 數據庫自增 |
| NONE | MP set 主鍵,雪花算法實現 |
| INPUT | 需要開發者手動賦值 |
| ASSIGN_ID | MP 分配 ID,Long、Integer、String |
| ASSIGN_UUID | 分配 UUID,Strinig |
-
INPUT 如果開發者沒有手動賦值,則數據庫通過自增的方式給主鍵賦值,如果開發者手動賦值,則存入該值。
-
AUTO 默認就是數據庫自增,開發者無需賦值。
-
ASSIGN_ID MP 自動賦值,雪花算法。
-
ASSIGN_UUID 主鍵的數據類型必須是 String ,自動生成 UUID 進行賦值。
例如:

編寫測試類
@Test
void save(){
User user = new User();
user.setName("張三");
user.setAge(20);
userMapper.insert(user);
}
Id成功按策略插入成功

3、@TableField
@TableField
映射非主鍵字段,value 映射字段名
例如:
當字段名與數據庫字段名不一致時,報錯如下:

正確寫法:

1)exist
- exist 表示是否為數據庫字段 false,如果實體類中的成員變量在數據庫中沒有對應的字段,則可以使用 exist,VO、DTO
當添加數據庫沒有的字段時,報錯如下:

加上@TableField(exist = false),表示在數據庫中沒有對應的字段,即可查詢成功。

2)select
- select 表示是否查詢該字段

3)fill
- fill 表示是否自動填充,如create_time、update_time
1、增加字段

2、擴充實體類
@TableField(fill = FieldFill.INSERT) //填充字段
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //填充字段
private Date updateTime;
3、MetaObjectHandler
創建MyMetaObjectHandler類 implements MetaObjectHandler,重寫兩個方法。
package com.example.mybatisplus.handle;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", System.currentTimeMillis(), metaObject); // 創建時間 或者new Date()
this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject); // 更新時間
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", System.currentTimeMillis(), metaObject); // 更新時間
}
}
4、Test

4、@Version
@Version
標記樂觀鎖,通過 version 字段來保證數據的安全性,當修改數據的時候,會以 version 作為條件,當條件成立的時候才會修改成功。
1、數據庫表添加 version 字段,默認值為 1

2、實體類添加 version 成員變量,並且添加 @Version
@Version
private Integer version; //樂觀鎖
3、配置類
package com.example.mybatisplus.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration // 聲明為配置類
public class MyConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor(); // 創建一個 OptimisticLockerInterceptor 對象
}
}
測試:version 1–>2

3、@EnumValue
@EnumValue
1)枚舉類註解實現
通用枚舉類註解,將數據庫字段映射成實體類的枚舉類型成員變量
1、設計表

2、實體類添加字段
private StatusEnum status; //狀態 枚舉類型
3、創建枚舉類
package com.example.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
public enum StatusEnum { //枚舉類 enum類型的類
//獎勵1 懲罰0
reward(1,"獎勵"),punishment(0,"懲罰");
@EnumValue
private Integer code;
private String 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 # 日誌實現類 -->打印sql
type-enums-package:
com.example.mybatisplus.enums # 實現類所在的包 這裡
5、測試
查詢id為1、2,其對應status分別為1、0

2)接口實現
import com.baomidou.mybatisplus.core.enums.IEnum;
public enum SexEnum implements IEnum<Integer> {
ONE(1,"男"),
TWO(0,"女"),
private Integer code;
private String msg;
AgeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public Integer getValue() {
return this.code;
}
}
6、@TableLogic
@TableLogic
映射邏輯刪除
1、數據表添加 identification字段

2、實體類添加註解
@TableLogic
private Integer identification; //是否刪除標識
3、application.yml 添加配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日誌實現類 -->打印sql
type-enums-package:
com.example.mybatisplus.enums # 實現類所在的包
global-config:
db-config:
logic-not-delete-value: 0 # 邏輯刪除的值
logic-delete-value: 1 # 邏輯刪除的值
4、測試
刪除id為2的User,identification標識 0–>1

再次查詢數據庫,查不到id為2的User,邏輯刪除實現。



