2020-12-19

MyBatisPlus-常用注解

一、@TableName

映射数据库的表名

package com.md.entity;import com.baomidou.mybatisplus.annotation.*;import com.md.enums.StatusEnum;import lombok.Data;import java.util.Date;/** * @author md * @Desc * @date 2020/10/26 15:38 */@Data@TableName(value = "student")public class Student { private Integer id; private String name; private Integer age;}

二、@TableId

设置主键映射,value 映射主键字段名

type 设置主键类型,主键的生成策略

AUTO(0),NONE(1),INPUT(2),ASSIGN_ID(3),ASSIGN_UUID(4),/** @deprecated */@DeprecatedID_WORKER(3),/** @deprecated */@DeprecatedID_WORKER_STR(3),/** @deprecated */@DeprecatedUUID(4);
描述
AUTO数据库自增
NONEMP set 主键,雪花算法实现
INPUT需要开发者手动赋值
ASSIGN_IDMP 分配 ID,Long、Integer、String
ASSIGN_UUID分配 UUID,Strinig

INPUT 如果开发者没有手动赋值,则数据库通过自增的方式给主键赋值,如果开发者手动赋值,则存入该值。

AUTO 默认就是数据库自增,开发者无需赋值。

ASSIGN_ID MP 自动赋值,雪花算法。

ASSIGN_UUID 主键的数据类型必须是 String,自动生成 UUID 进行赋值

	// 自己赋值 //@TableId(type = IdType.INPUT) // 默认使用的雪花算法,长度比较长,所以使用Long类型,不用自己赋值 @TableId private Long id;

测试

@Test void save(){  // 由于id加的有注解,这里就不用赋值了  Student student = new Student();  student.setName("天明");  student.setAge(18);  mapper.insert(student); }

三、@TableField

映射非主键字段,value 映射字段名

exist 表示是否为数据库字段 false,如果实体类中的成员变量在数据库中没有对应的字段,则可以使用 exist,VO、DTO

select 表示是否查询该字段

fill 表示是否自动填充,将对象存入数据库的时候,由 MyBatis Plus 自动给某些字段赋值,create_time、update_time

自动填充

1、给表添加 create_time、update_time 字段

2、实体类中添加成员变量

package com.md.entity;import com.baomidou.mybatisplus.annotation.*;import com.md.enums.StatusEnum;import lombok.Data;import java.util.Date;@Data@TableName(value = "student")public class Student { @TableId private Long id; // 当该字段名称与数据库名字不一致 @TableField(value = "name") private String name; // 不查询该字段 @TableField(select = false) private Integer age; // 当数据库中没有该字段,就忽略 @TableField(exist = false) private String gender; // 第一次添加填充 @TableField(fill = FieldFill.INSERT) private Date createTime; // 第一次添加的时候填充,但之后每次更新也会进行填充 @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;}

3、创建自动填充处理器

注意:不要忘记添加 @Component 注解

package com.md.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.util.Date;/** * @author md * @Desc 对实体类中使用的自动填充注解进行编写 * @date 2020/10/26 17:29 */// 加入注解才能生效@Componentpublic 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); }}

4、测试

@Test void save(){  // 由于id加的有注解,这里就不用赋值了  Student student = new Student();  student.setName("韩立");  student.setAge(11);  // 时间自动填充  mapper.insert(student); }

5、更新

当该字段发生变化的时候时间会自动更新

@Test void update(){  Student student = mapper.selectById(1001);  student.setName("韩信");  mapper.updateById(student); }

四、@Version

乐观锁

标记乐观锁,通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成立的时候才会修改成功。

version = 2

线程 1:update ... set version = 2 where version = 1

线程2 :update ... set version = 2 where version = 1

1、数据库表添加 version 字段,默认值为 1

2、实体类添加 version 成员变量,并且添加 @Version

package com.md.entity;import com.baomidou.mybatisplus.annotation.*;import com.md.enums.StatusEnum;import lombok.Data;import java.util.Date;@Data@TableName(value = "student")public class Student { @TableId private Long id; @TableField(value = "name") private String name; @TableField(select = false) private Integer age; @TableField(exist = false) private String gender; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;  @Version private Integer version; //版本号 }

3、注册配置类

在 MybatisPlusConfig 中注册 Bean

package com.md.config;import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author md * @Desc * @date 2020/10/26 20:42 */@Configurationpublic class MyBatisPlusConfig { /** * 乐观锁 */ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor(){  return new OptimisticLockerInterceptor(); }}

五、@EnumValue

1、通用枚举类注解,将数据库字段映射成实体类的枚举类型成员变量

package com.southwind.mybatisplus.enums;import com.baomidou.mybatisplus.annotation.EnumValue;public enum StatusEnum { WORK(1,"上班"), REST(0,"休息"); StatusEnum(Integer code, String msg) {  this.code = code;  this.msg = msg; } @EnumValue private Integer code; private String msg;}
package com.md.entity;import com.baomidou.mybatisplus.annotation.*;import com.md.enums.StatusEnum;import lombok.Data;import java.util.Date;@Data@TableName(value = "student")public class Student { @TableId private Long id; @TableField(value = "name") private String name; @TableField(select = false) private Integer age; @TableField(exist = false) private String gender; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; @Version private Integer version;   private StatusEnum status;}

数据库中新增一个status字段,

2、在主配置文件中

# 枚举包扫描mybatis-plus.type-enums-package=com.md.enums

六、@TableLogic

映射逻辑删除,并不是真正的删除

1、数据表添加 deleted 字段,默认是0

2、实体类添加注解

package com.md.entity;import com.baomidou.mybatisplus.annotation.*;import com.md.enums.StatusEnum;import lombok.Data;import java.util.Date;@Data@TableName(value = "student")public class Student { @TableId private Long id; @TableField(value = "name") private String name; @TableField(select = false) private Integer age; @TableField(exist = false) private String gender; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; @Version private Integer version; private StatusEnum status; @TableLogic private Integer deleted;}

3、主配置文件中添加配置

# 没有删除为0,删除了为1mybatis-plus.global-config.db-config.logic-not-delete-value=0mybatis-plus.global-config.db-config.logic-delete-value=1

4、在 MybatisPlusConfig 中注册 Bean

配置类

@Configurationpublic class MyBatisPlusConfig { /** * 乐观锁 */ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor(){  return new OptimisticLockerInterceptor(); }  /** * 逻辑删除 */ @Bean	public ISqlInjector sqlInjector() {		return new LogicSqlInjector();	}}

删除的时候不是真正的删除数据库表中的数据,而是改变delete字段的值,当然了查询的时候也是查询delete=0,这都是框架自动实现的









原文转载:http://www.shaoqun.com/a/501425.html

跨境电商:https://www.ikjzd.com/

淘粉吧返利:https://www.ikjzd.com/w/1725

net-a-porter:https://www.ikjzd.com/w/2132


一、@TableName映射数据库的表名packagecom.md.entity;importcom.baomidou.mybatisplus.annotation.*;importcom.md.enums.StatusEnum;importlombok.Data;importjava.util.Date;/***@authormd*@Desc*@date2020/10/2615:38*/@Dat
tm商标:tm商标
韩蓬:韩蓬
如何降低wish的退款率:如何降低wish的退款率
口述:败给8年感情办公室之恋:口述:败给8年感情办公室之恋
杭州必吃早点是什么,杭州特色早点有哪些,杭州什么早点好吃:杭州必吃早点是什么,杭州特色早点有哪些,杭州什么早点好吃

No comments:

Post a Comment