常用注解
@TableName :映射数据库的表名
package com.weiruan.cn.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
@Data
@TableName(value="t_user")
public class User {
private Long id;
private String username;
private String password;
}
@TableId :映射数据库表中的主键
- value属性映射主键字段名
- type属性 设置主键类型,主键的生成策略
AUTO(0), // 数据库自增 开发者无需赋值 赋值也无效(不会存进数据库)
NONE(1), // MybatisPlus 随机生成主键,雪花算法实现(默认)
INPUT(2), // 需要开发者手动赋值 如果开发者没有手动赋值,数据库通过自增的方式给主键赋值
ASSIGN_ID(3), // MybatisPlus 分配ID ,Long、Integer、String 自动赋值,雪花算法
ASSIGN_UUID(4); // 分配UUID String类型 主键类型必须是String,自动生成String类型的UUID
@TableField :映射数据库表中非主键
- value属性映射的是字段名
- exist 表示是否为数据库字段 false(表示查询时候忽略此字段,默认为true,在VO、DTO中常使用)
- select属性 select=false 表示查询时不会再查询此字段
- fill 表示是否自动填充,将对象存入数据库的时候,由Mybatis Plus自动给某些字段赋值(常用于时间的赋值 create_time、update_time)
1.给表中添加create_time、update_time字段
2.实体类中添加成员变量
package com.weiruan.cn.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_user")
public class User {
@TableId
private Integer id;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT)
private Date creatTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
3.创建自动填充处理器
package com.weiruan.cn.mybatisplus.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
@Version : 标记乐观锁,通过一个Version字段来保证数据的安全性,当修改数据的时候,会以version作为条件,当条件成立的时候才会修改成功。
1.给数据库表添加version字段,默认值为1
2.实体类添加version成员变量,并添加这个注解
package com.weiruan.cn.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_user")
public class User {
@TableId
private Integer id;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT)
private Date creatTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version;
}
3.注册配置类
package com.weiruan.cn.mybatisplus.config;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor(){
return new OptimisticLockerInnerInterceptor();
}
}
@EnumValue: 通用枚举类注解,将数据库字段映射成实体类的枚举类型成员变量
第一种方式:注解形式
1.数据库中增加枚举类型字段 status ,并创建枚举类
package com.weiruan.cn.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
public enum StatusEnums {
WORK(1,"上班"),
REST(0,"休息");
@EnumValue
private Integer code;
private String msg;
StatusEnums(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
2.实体类中添加枚举成员变量
package com.weiruan.cn.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.weiruan.cn.mybatisplus.enums.StatusEnums;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_user")
public class User {
@TableId
private Integer id;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT)
private Date creatTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version; // 跟数据库名保持一直
private StatusEnums status; // 枚举的成员变量名一定要保持跟数据库一直
}
3.application.yml中配置枚举包
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
username: root
password: root
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-enums-package: com.weiruan.cn.mybatisplus.enums
第二种方式:
package com.weiruan.cn.mybatisplus.enums;
import com.baomidou.mybatisplus.annotation.IEnum;
public enum StatusEnumss implements IEnum<Integer> {
WORK(1,"上班"),
REST(0,"休息");
private Integer code;
private String msg;
StatusEnumss(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public Integer getValue() {
return this.code;
}
}
@TableLogic : 映射逻辑删除
1.数据表添加 deleted字段
2.实体类添加注解
package com.weiruan.cn.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.weiruan.cn.mybatisplus.enums.StatusEnums;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_user")
public class User {
@TableId
private Integer id;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT)
private Date creatTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version; // 跟数据库名保持一直
private StatusEnums status; // 枚举的成员变量名一定要保持跟数据库一直
@TableLogic
private Integer deleted;
}
3.application.yml 中添加配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
username: root
password: root
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-enums-package: com.weiruan.cn.mybatisplus.enums
global-config:
db-config:
logic-not-delete-value: 0
logic-delete-value: 1