MybatisPus核心知识学习总结(七)插件扩展

七、插件扩展

7.1.注册分页插件

<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
    <!-- 数据源 -->
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    <!-- 别名处理 -->
    <property name="typeAliasesPackage" value="com.luo.beans"></property>
    <!-- 注入全局MP策略配置 -->
    <property name="globalConfig" ref="globalConfiguration"></property>
    <property name="plugins">
        <list>
            <bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean>
        </list>
    </property>
</bean>

真正的分页查询

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

private UserMapper userMapper = ioc.getBean("userMapper",UserMapper.class);

@Test
public void testPage(){
    Page<User> page = new Page<User>(1,4);
    List<User> users = userMapper.selectPage(page,null);
    page.setRecords(users);
    System.out.print("总记录数"+page.getTotal());
    System.out.print("当前页码"+page.getCurrent());
    System.out.print("总页码"+page.getPages());
    System.out.print("每页记录数"+page.getSize());
    System.out.print("是否有前一页"+page.hasPrevious());
    System.out.print("是否有后一页"+page.hasNext());
}

说明:我们可以将分页查询的数据放在page对象中,返回前端一个page对象即可

7.2.执行分析插件

<bean class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
    <property name="stopProceed" value="true"></property>
</bean>

测试如下:

@Test
public void testDeltetAll(){
    userMapper.delete(null);
}

sql分析插件只支持mysql5.6.3以上的版本,本质就是通过sql分析命令Explain分析当前的sql语句,根据结果集中的Extra列来断定当前是否全表操作;

7.3.性能分析插件

性能分析插件用于输出每秒sql语句和其执行时间,首先注册插件,如下:

<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
    <property name="format" value="true"></property>
</bean>

测试如下:

@Test
public  void testPer(){
    Dept dept = new Dept();
    dept.setDeptName("开发部");
    dept.setDeptCount("34");
    dept.setDeptBegintime(new Date());
    dept.insert();
}

结果如下:

 Time:142 ms - ID:com.luo.mapper.DeptMapper.insert
 Execute SQLINSERT 
    INTO
        tbl_dept
        ( dept_count, dept_name, dept_beginTime ) 
    VALUES
        ( '34', '开发部', '2018-08-26 23:09:17.293' )]

7.4.乐观锁插件

当我们在开发中,有时需要判断,当我们更新一条数据库记录时,希望这条记录没有被别人更新,这个时候就可以使用乐观锁插件,他的原理就是,取出记录时,获取当前的version,更新的时候带上这个version,执行更新的时候set version = yourVersion+1 where version = yourVersion,如果version不对,则更新失败,注意的是:@version用于注解实体字段,必须要有

首先,注册插件

<bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor"></bean>

实体类添加对应属性,同时数据库表也要添加对应字段

@Version
private Integer version;

测试如下:

@Test
public void testVersion(){
    Dept dept = new Dept();
    dept.setDeptName("测试部");
    dept.setVersion(1);
    dept.setId(1);
    dept.updateById();
}

如果:这个时候将数据库version改为2,在执行更新就会显示更新记录数为0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值