java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MybatisPlus字段自动填充&乐观锁

MybatisPlus字段自动填充&乐观锁的方法实现

作者:y.q.q

MyBatis-Plus提供了便捷的自动填充功能,可用于自动处理创建时间、更新时间等字段,本文来介绍一下MybatisPlus字段自动填充&乐观锁的方法实现,感兴趣的可以了解一下

MyBatis-Plus 提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。

自动填充功能通过实现 com.baomidou.mybatisplus.core.handlers.MetaObjectHandler 接口来实现。

1.使用步骤

1.定义实体类

@TableField(fill = FieldFill.INSERT):表示该字段在执行 insert 操作时进行填充。

@TableField(fill = FieldFill.INSERT_UPDATE):表示该字段在执行 insert 和 update 操作时进行填充。

LocalDateTime:这里使用 LocalDateTime 作为时间类型,也可以使用 Date 或 Instant 等

@Data
public class User {
    private Long id;
    private String name;
    @TableField(value = "pwd",select = false)
    private String password;
    private Integer age;
    private String tel;
    @TableField(exist = false)
    private String online;
    private Integer deleted;

    // 只在插入时自动填充字段
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime  createTime;

    // 在插入和更新时填充字
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    private String updateUser;
}

2.编写填充处理器

创建一个类来实现 MetaObjectHandler 接口,并重写 insertFill 和 updateFill 方法。

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("开始插入填充...");
        // 创建时间字段只需要在创建这条记录的时候填充当前时间
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        // 更新数据的人,在插入一条记录的时候要把这个人记录到数据库
        this.strictInsertFill(metaObject, "updateUser", String.class, "admin");
        // 更新时间,在插入一条记录的时候要把当前时间记录到数据库
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("开始更新填充...");
        // 更新某条记录的时候,把该记录的更新的人记录
        // this.strictUpdateFill(metaObject, "updateUser",String.class, "zhangsan");
        // 更新时间字段,在更新一条记录的时候要把当前时间记录到数据库
        // this.strictUpdateFill(metaObject, "updateTime",LocalDateTime.class, LocalDateTime.now());
        // this.strictUpdateFill(metaObject, "updateTime",LocalDateTime.class, LocalDateTime.now());
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateUser", "zhangsan", metaObject);
    }
}

3.ID生成策略

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
    # 主键自增
      id-type: auto
      # 表前缀
      table-prefix: tbl_
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0

4.测试代码

1.testInsert():测试插入操作

2.testUpdate():基于条件更新

3.testUpdate1():基于实体主键更新

功能:先查询后更新,通过实体主键更新记录。

分析

 @Test
    public void testInsert() {
        User user = new User();
        user.setName("张99");
        user.setAge(19);
        user.setTel("123456789");
        user.setPassword("123456");
        int insert = userMapper.insert(user);
        System.out.println("insert:"+insert);
    }
    @Test
    public void testUpdate() {
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
        userUpdateWrapper.set("name", "更887");
        userUpdateWrapper.eq("id", "1916126238607409154");
        userMapper.update(userUpdateWrapper);
    }
    @Test
    public void testUpdate1() {
        User user = userMapper.selectById("1916131310603149314");
        // 假设ID为1的用户存在
        user.setName("updatedUser");
        int result = userMapper.updateById(user);
        System.out.println("影响行数:" + result);
        System.out.println("更新后的用户更新时间:" + user.getUpdateTime());
    }

2.注意事项

到此这篇关于MybatisPlus字段自动填充&乐观锁的方法实现的文章就介绍到这了,更多相关MybatisPlus字段自动填充&乐观锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文