MybatisPlus_查询数据(乐观锁与自动分页)

在Config类下创建插件(Bean)

@Configuration
public class MybatisPlusConfig {

    //乐观锁插件
    @Bean
    public MybatisPlusInterceptor lockInterceptor() {
        MybatisPlusInterceptor lockInterceptor = new MybatisPlusInterceptor();
        lockInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return lockInterceptor;
    }

    //分页插件
    @Bean
    public MybatisPlusInterceptor pageInterceptor() {
        MybatisPlusInterceptor pageInterceptor = new MybatisPlusInterceptor();
        pageInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return pageInterceptor;
    }
}

一.乐观锁(需要数据库有version字段)

当要更新一条记录的时候,希望这条记录没有被别人更新;若更新成功,则版本号+1

//乐观锁
    @Test
    void lock(){
        User user = userMapper.selectById(5L);

        user.setName("TestLock");
        user.setEmail("TestLock@qq.com");

        userMapper.updateById(user);
    }
    @Test
    void lock2(){
        //线程1
        User user = userMapper.selectById(5L);
        user.setName("TestLock");
        user.setEmail("TestLock@qq.com");

        //模拟线程2
        User user2 = userMapper.selectById(5L);
        user2.setName("TestLock2");
        user2.setEmail("TestLock2@qq.com");
        userMapper.updateById(user2);

        //乐观锁触发 此次修改不生效
        userMapper.updateById(user);
    }

版本字段 

 执行第一个测试后,可以看到第五条数据的版本号变成了2

执行第二个测试,可以看到最终执行了第一次更新,第二次更新由于乐观锁的存在而失败了

这是由于第一次更新之后,版本号变成了3,而第二次更新需要在版本号2上进行,所以更新失败

二.自动分页

//分页查询
    @Test
    void limit() {
        Page<User> page = new Page<>(2, 3);

        userMapper.selectPage(page,null);

        //获取分页记录表并循环输出
        page.getRecords().forEach(System.out::println);
        //获取数据总行数(不限于当前页)
        System.out.println("total row = " + page.getTotal());
    }

注:page的参数为"当前页数"与"分页行数"

一些基础查询 

    //查询
    @Test
    void query() {
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }

    @Test
    void selectById() {
        User user = userMapper.selectById(1L);
        System.out.println(user);
    }

    @Test
    void selectByBatchIds() {
        List<User> user = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        user.forEach(System.out::println);
    }

    @Test
    void selectByMap() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("name", "Jone");
        List<User> user = userMapper.selectByMap(map);
        user.forEach(System.out::println);
    }
MyBatisPlus是一个基于MyBatis的代码生成器和ORM框架的增强工具,它简化了数据库表的映射和CRUD操作,并提供了自动建表(也称为初始化数据表)的功能。当你使用MyBatisPlus创建一个新的Java实体类,并配置好相应的字段、主键等信息后,它可以根据这些信息自动生成对应的SQL脚本,用于在数据库中创建表结构。 自动建表主要包括以下几个步骤: 1. **实体类配置**:在实体类中声明字段、设置注解(如@Table、@Id、@Column等),这些都会被MyBatisPlus用于生成表结构。 2. **启用插件**:在项目启动时,需要在Spring Boot配置类中启用MyBatisPlus的自动建表功能。 ```java @EnableGlobalMethodSecurity(prePostEnabled = true) @MapperScan("com.example.mapper") // 配置mapper扫描包 public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); // 启用MyBatisPlus的自动建表 Configurations.init(); } } ``` 3. **运行初始化脚本**:在应用启动后,MyBatisPlus会在后台检查数据库中的表结构,如果不存在对应的表,会根据实体类生成的配置执行建表脚本。 4. **版本管理**:MyBatisPlus还支持版本控制,可以为每个表生成一个增量更新的SQL脚本,便于在不删除原有表的情况下,逐步升级数据结构。 需要注意的是,虽然MyBatisPlus提供了便利,但还是建议在正式生产环境中手动检查和验证生成的SQL脚本,确保符合实际需求和数据库约束规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值