MyBatis Plus的分页插件、执行分析插件、性能分析插件、乐观锁

分页插件

在applicationContext.xml的spring与MaBatis整合的SqlSessionFactoryBean中配置一个属性

1)com.baomidou.mybatisplus.plugins.PaginationInterceptor

在这里插入图片描述

编写测试类

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

    EmployeeMapper employeeMapper = ctx.getBean("employeeMapper",EmployeeMapper.class);
	/**
		分页测试
	*/
    @Test
    public void testPage(){
        List<Employee> employees = employeeMapper.selectPage(new Page<>(1, 1), null);
        System.out.println(employees);
    }

使用了分页插件后的分页就不是以前的假分页了

查询的SQL语句中就有limit关键字了,以前没有使用分页插件的时候,就是使用的内存分页,将所有的数据查出来,再进行分页。

在这里插入图片描述

查看分页的其他信息
 Page page = new Page<>(1, 1);
    @Test
    public void testPage(){
        List<Employee> employees = employeeMapper.selectPage(page, null);
        System.out.println(employees);
        System.out.println("》》》》获取与页面相关的一些信息《《《《");
        System.out.println("总条数:"+page.getTotal());
        System.out.println("当前页数:"+page.getCurrent());
        System.out.println("总页码:"+page.getPages());
        System.out.println("每页显示的条数:"+page.getSize());
        System.out.println("是否有上页:"+page.hasPrevious());
        System.out.println("是否有下页:"+page.hasNext());
        
        
    }

可以将查询的对象封装到Page对象中

//通过setRecords()方法将查询出来的对象放到Page对象中
page.setRecords(employees);

这样的话我们进行分页功能的编写会更加简单方便

执行分析插件

  1. com.baomidou.mybatisplus.plugins.SqlExplainInterceptor

配置插件同上

在这里插入图片描述

  1. SQL 执行分析拦截器,只支持 MySQL5.6.3 以上版本

  2. 该插件的作用是分析 DELETE UPDATE 语句,防止小白 或者恶意进行 DELETE UPDATE 全表操作

​ 例如:当我们不小心或者故意对数据库进行全表删除时,此插件会阻止此操作

​ 当我们执行下列的方法时

在这里插入图片描述

由于我的MySQL版本是5.5的,所以当我删除全表的时候还是生效了,同时也会给你一个警告,告诉你这个插件无法使用,除非升级到5.6.3以上

在这里插入图片描述
4) 只建议在开发环境中使用,不建议在生产环境使用

  1. 在插件的底层 通过 SQL 语句分析命令:Explain 分析当前的 SQL 语句, 根据结果集中的 Extra 列来断定当前是否全表操作

性能分析插件

1)com.baomidou.mybatisplus.plugins.PerformanceInterceptor

在这里插入图片描述

当超过规定的时间时,会显示如下错误。

在这里插入图片描述

2)性能分析拦截器,用于输出每条SQL语句及执行时间

3)性能执行分析,开发环境使用,超过指定时间,停止运行,有助于发现问题

乐观锁

  1. com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor

在这里插入图片描述
2) 如果想实现如下需求: 当要更新一条记录的时候,希望这条记录没有被别人更新

  1. 乐观锁的实现原理: 取出记录时,获取当前 version2更新时,带上这个 version2执行更新时, set version = yourVersion+1 where version = yourVersion 如果 version 不对,就更新失败

  2. @Version 用于注解实体字段,必须要有。

需要在实体类中添加version属性,并加上注解@Version,还有数据库中也加上此属性。

在这里插入图片描述

测试:

当数据库中version为2时,测试一下代码

/**
     * 测试乐观锁
     */
    @Test
    public void testOptimisticLockerInterceptor(){
        Employee emp = new Employee();
        emp.setId(8);
        emp.setAge(4);
        emp.setEmail("zzn@blh.com");
        emp.setGender("0");
        emp.setLastName("ycy");
        emp.setVersion(1);
        employeeMapper.updateById(emp);
    }

在这里插入图片描述
此时数据库影响条数为0,说明没有进行更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值