mybatisPlus自动写入和乐观锁和分页

MybatisPlus自动填充和乐观锁

一、自动填充

1)数据库表结构

在sys_admin中添加 create_time,update_time

2)实体类添加注解

@Data
public class SysAdmin {
    ......
        
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

3)实现元对象处理器接口

@Component
public class MyMetaObjectHanlder 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)测试

@SpringBootTest
public class MybatsiPlusTest {

    @Autowired
    private SysAdminMapper adminMapper;

    @Test
    public void addTest(){

        SysAdmin admin=new SysAdmin();
        admin.setAdminName("greety");
        admin.setAdminAge(18);
        adminMapper.insert(admin);
    }

    @Test
    public void updateTest(){
        SysAdmin admin=new SysAdmin();
        admin.setAdminId(1);
        admin.setAdminName("linker");
        admin.setAdminAge(22);
        adminMapper.updateById(admin);
    }

    @Test
    public void showTest(){
        List<SysAdmin> sysAdmins = adminMapper.selectList(null);
        System.out.println(sysAdmins);
    }
}

二、乐观锁

1)乐观锁和悲观锁的介绍

乐观锁:并行解决,通过添加版本号的方法来控制数据库的数据

悲观锁:串行解决,一次只能由一个人进行操作,其他人都必须等待

乐观锁实现方式:

  • 取出记录时,获取当前的version
  • 更新时,带上这个version
  • 执行更新时,set version=newVersion where version=oldVersion
  • 如果version不对,就更新失败

2)数据库中添加version字段

ALTER TABLE `sysAdmin` ADD COLUMN `version` INT
  1. 实体类添加version字段
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
  1. 元对象处理接口添加version的insert默认值
@Override
public void insertFill(MetaObject metaObject) {
    ......
    this.setFieldValByName("version", 1, metaObject);
}

5)创建一个新的配置类,将乐观锁的配置加入

@Configuration
@MapperScan("edu.mju.mybatis.plus.mapper")
public class MySpringConfig {
    /**
     * 乐观锁插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

三、分页

1)配置分页插件

/**
 * 分页插件
 */
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

2)测试分页

 // 测试分页
    @Test
    public void testpage(){

        // 1、创建page对象
        //传入两个参数,第一个为当期页,第二位页面数量
        Page<SysAdmin> page=new Page<SysAdmin>(1,3);

        // 2、获取相对的添加页面信息
        adminMapper.selectPage(page,null);
        
        // 3、通过page对象获取分页数据
        System.out.println(page.getCurrent()); // 当期页
        System.out.println(page.getRecords());// 当期页数据
        System.out.println(page.getSize());//当期页的数量
        System.out.println(page.getTotal());//总记录数

        System.out.println(page.hasNext());
        System.out.println(page.hasPrevious());
    }

四、删除

  • 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
  • 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

逻辑操作讲解:

1)表中添加逻辑删除字段

ALTER TABLE `sys_admin` ADD COLUMN `deleted` boolean

2)实体类中添加deleted字段

@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;

3)元对象处理接口添加deleted的insert默认值

@Override
public void insertFill(MetaObject metaObject) {
    ......
    this.setFieldValByName("deleted", 0, metaObject);
}

4)在MySpringConfig配置类中注册Bean

@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}

五、性能分享

参数说明:

maxTime:sql执行时间多大时,停止查询

format:sql格式化,默认为false

1)在MySpringConifg配置插件

/**
 * SQL 执行性能分析插件
 * 开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长
 */
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    performanceInterceptor.setMaxTime(100);//ms,超过此处设置的ms则sql不执行
    performanceInterceptor.setFormat(true);
    return performanceInterceptor;
}

2)在application.yml设置Dev环境

#环境设置:dev、test、prod
spring.profiles.active=dev
performanceInterceptor.setMaxTime(100);//ms,超过此处设置的ms则sql不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;

}


2)在application.yml设置Dev环境

```yaml
#环境设置:dev、test、prod
spring.profiles.active=dev
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值