小编给大家分享一下MyBatisPlus如何实现自动更新、软删除、乐观锁操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
成都创新互联公司是一家专注于网站设计、成都网站建设与策划设计,磐安网站建设哪家好?成都创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:磐安等地区。磐安做网站价格咨询:13518219792
快速入门
步骤
- 创建数据库,数据表 

- 使用SpringBoot导入maven依赖 - mysql - mysql-connector-java - 8.0.21 - org.projectlombok - lombok - 1.18.12 - com.baomidou - mybatis-plus-boot-starter - 3.3.2 
- 使用了mybatis-plus 之后(区别于mybatis传统方式entity-dao(连接mybatis,配置mapper.xml文件)-service-controller) 
- 实体类: - @Data public class User { /** * 主键ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 姓名 */ private String name; /** * 年龄 */ private Integer age; /** * 邮箱 */ private String email; }
- mapper接口 - //对应的的Mapper上面继承基本的类 BaseMapper @Repository public interface UserMapper extends BaseMapper - { //通用CRUD操作父类已经写好 } 
- 注意点,我们需要在主启动类上去扫描我们的mapper包下的所有接口 - @MapperScan("com.mybatis.mybatis_plus.mapper") 
- 测试类中可以测试: - @Autowired private UserMapper userMapper; @Test void contextLoads() { List- userList = userMapper.selectList(null); userList.forEach(System.out::println); } 
自动更新
所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需 要自动化!
1、在表中新增字段 gmt_create、gmt_modified,类型datetime
2、把实体类同步,实体类字段属性上需要增加注解
@TableField(fill = FieldFill.INSERT) private Date gmtCreate; @TableField(fill = FieldFill.INSERT_UPDATE) private Date gmtModified;
3、编写handler来处理这个注解!
@Slf4j
@Component // 注意加到ioc容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
        // 插入时的填充策略
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("gmtCreate",new Date(),metaObject);
            this.setFieldValByName("gmtModified",new Date(),metaObject);
        }
        // 更新时的填充策略
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("gmtModified",new Date(),metaObject);
        }
}4、测试插入、测试更新、观察时间即可。
软删除(逻辑删除)
物理删除 :从数据库中直接移除
逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1
1、在数据表中增加一个 deleted 字段
2、实体类中增加属性
/** * 是否删除,1已删除,0未删除 */ @TableLogic private Boolean deleted;
3、配置!
# 配置逻辑删除 mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0
新版本Mybatislus无需一下配置了
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }4、测试一下删除! 记录依旧在数据库,但是值确已经变化了,查询也不会显示被删除的数据!
int i = userMapper.deleteById(2L); System.out.println(i); ListuserList = userMapper.selectList(null); userList.forEach(System.out::println); 
乐观锁
乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题, 再次更新值测试
悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!
我们这里主要讲解 乐观锁机制!
乐观锁实现方式:
- 取出记录时,获取当前 version 
- 更新时,带上这个version 
- 执行更新时, set version = newVersion where version = oldVersion 
- 如果version不对,就更新失败 - 乐观锁:1、先查询,获得版本号 version = 1 -- A update user set name = "tom", version = version + 1 where id = 2 and version = 1 -- B 线程抢先完成,这个时候 version = 2,会导致 A 修改失败! update user set name = "jack", version = version + 1 where id = 2 and version = 1 
在MyBatisPlus里面使用乐观锁插件
1、给数据添加version字段,整型默认值为1。
2、实体类添加对应字段
@Version //乐观锁Version注解 private Integer version;
3、注册组件
    // 注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }4、测试
// 测试乐观锁成功!
@Test
public void testOptimisticLocker(){
    // 1、查询用户信息
    User user = userMapper.selectById(1L);
    // 2、修改用户信息
    user.setName("Simon");
    // 3、执行更新操作
    userMapper.updateById(user);
}可以看到更新执行的sql

看完了这篇文章,相信你对“MyBatisPlus如何实现自动更新、软删除、乐观锁操作”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
本文题目:MyBatisPlus如何实现自动更新、软删除、乐观锁操作
URL网址:http://www.cqwzjz.cn/article/ieigic.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 