MybatisPlus------插件(分页、乐观锁)通用枚举类(九)

MybatisPlus------插件(分页、乐观锁)(九)

MybatisPlus自带分页插件,只要简单的配置就可以实现分页功能。

分页插件

创建分页插件拦截器

// 配置类
@Configuration
// 扫描mapper接口所在的包
@MapperScan("com/example/demo/mapper")
public class MyBatisPlusConfig {

    //MybatisPlusInterceptor  mybatisPlus的拦截器
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 配置数据库类型
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

测试结果:

 @Test
    public void testSelectList(){
        // 设置当前页,以及页面显示条数
        Page<BaseProcedure> page = new Page<>(1,3);
        LambdaQueryWrapper<BaseProcedure> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(BaseProcedure::getProcedureName,BaseProcedure::getProcedureCode);
        Page<BaseProcedure> page1 = baseProcedureMapper.selectPage(page, wrapper);
        // 获取查找结果
        List<BaseProcedure> records = page1.getRecords();
        System.out.println(records);
        // 获取总页数
        System.out.println(page1.getPages());
        // 获取总记录数
        System.out.println(page1.getTotal());
        //是否有下一页
        System.out.println(page1.hasNext());
        //是否有上一页
        System.out.println(page1.hasPrevious());
    }

自定义分页功能

自定义分页时,需要注意:
@param page Mybatis-Plus所提供的分页对象,必须位于第一个参数的位置。
在具体的sql实现中,不需要编写对Page的处理,会通过分页拦截器自动处理。

测试类:

  @Test
    public void testSelectList2(){
        // 设置当前页,以及页面显示条数
        Page<BaseProcedure> page = new Page<>(1,3);
        Page<BaseProcedureDto> page1 = baseProcedureMapper
                .selcetPage2(page, "测试哈哈哈哈");
        // 获取查找结果
        List<BaseProcedureDto> records = page1.getRecords();
        System.out.println(records);
        // 获取总页数
        System.out.println(page1.getPages());
        // 获取总记录数
        System.out.println(page1.getTotal());
        //是否有下一页
        System.out.println(page1.hasNext());
        //是否有上一页
        System.out.println(page1.hasPrevious());
    }

自定义分页方法:

//自定义分页sql
    // 通过name查询信息,并分页
    // @param page Mybatis-Plus所提供的分页对象,必须位于第一个参数的位置
    // @param procedureName
    Page<BaseProcedureDto> selcetPage2(@Param("page")Page page,@Param("procedureName") String procedureName);
}

自定义分页方法实现:

 <select id="selcetPage2" resultType="com.example.demo.pojo.BaseProcedureDto">
        select procedure_name,procedure_code
        FROM base_procedure
        <where>
            procedure_name = #{procedureName}
        </where>
    </select>

当传入的size参数为-1时,MybatisPlus会进行全量查询

乐观锁插件

乐观锁:在保存前,检查该变量是否被修改过,如果修改过,则重新取出被修改的后的变量,进行操作。(一般通过version版本号实现,更新时会将版本号和变量同时更新)
悲观锁:同一时刻只允许一个线程操作该变量,其他线程若想使用,则阻塞排队。

实现流程

数据库中添加version字段,取出记录时,获取当前version。
更新语句,更新时:如果where语句中的version版本不对,则更新失败。

UPDATE  item_t SET  code ='1022'   
WHERE  code ='1023' AND VERSION = '13'

实体类中新增@Version注解

    @Version // 表示乐观锁版本号
    private Integer version;

配置乐观锁插件

// 配置类
@Configuration
// 扫描mapper接口所在的包
@MapperScan("com/example/demo/mapper")
public class MyBatisPlusConfig {

    //MybatisPlusInterceptor  mybatisPlus的拦截器
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 配置数据库类型
        // 添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

在SQL操作时,就不需要对version进行条件判断,和赋值要求。这个字段就和active以及id一样,不需要额外操作。

通用枚举类

创建枚举类,@EnumValue注解

@Getter
public enum SexEnum {
    MALE(1,"男"),
    FEMALE(2,"女");

    @EnumValue  //将注解所标识的属性的值存储到数据库中
    private Integer sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String getSexName() {
        return sexName;
    }

    public void setSexName(String sexName) {
        this.sexName = sexName;
    }
}

对象的sex属性

private SexEnum sex

配置文件新增配置:扫描通用枚举类

mybatis-plus:
  ## 设置log打印执行的SQL语句
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  ## 设置mybatisplus的全局配置
#  global-config:
#    db-config:
      ## 设置实体类所对应的表的统一前缀
#      table-prefix: base_
      ## 设置全局id生成策略
      ## id-type: assign_id
      ## id-type: assign_uuid
      ## id-type: auto
      ## id-type: input
      ## id-type: none
  # 配置类型别名所对应的包
  type-aliases-package: com.example.demo.pojo
  # 配置扫描通用包
  type-enums-package: com.example.demo.enums
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值