Mybatis插件扩展

第五章 插件扩展

1. Mybatis插件机制简介

1.1 插件机制

Mybatis通过插件(Interceptor)可以做到拦截四大对象相关方法的执行,根据需求完成相关数据的动态改变。

  • Executor
  • StatementHandler
  • ParameterHandler
  • ResultSetHandler

1.2 插件原理

四大对象的每个对象在创建时,都会执行interceptorChain.pluginAll(),会经过每个插件对象的 plugin()方法,目的是为当前的四大对象创建代理。代理对象就可以拦截到四大对象相关方法的执行,因为要执行四大对象的方法需要经过代理。

2. 分页插件

com.baomidou.mybatisplus.plugins.PaginationInterceptor

2.1 在spring的配资文件中添加分页插件

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="typeAliasesPackage" value="com.mp.entity"/>
    <property name="globalConfig" ref="globalConfig"/>
    <property name="configuration" ref="configuration"/>
    <property name="plugins">
        <array>
            <!-- 添加分页插件 -->
            <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
                <!--<property name="dialectClazz" value="自定义方言类、可以没有" />-->
            </bean>
        </array>
    </property>
</bean>

2.2 分页API

IPage<T>接口:分页对象接口

方法功能
String[] descs()降序字段数组
String[] ascs()升序字段数组
Map<Object, Object> condition()查询条件
boolean optimizeCountSql()自动优化COUNT SQL,默认:true
boolean isSearchCount()进行count查询,默认: true
long offset()计算当前分页偏移量
long getPages()总页数
getRecords()获取分页记录列表
IPage<T> setRecords(List<T> records)设置分页记录列表
getTotal()获取总条数
IPage<T> setTotal(long total)设置总条数
long getSize()获取每页条数
IPage<T> setSize(long size)设置每页条数
long getCurrent()获取当前页,默认:1
IPage<T> setCurrent(long current)设置当前页

Page<T>:IPage<T>接口的实现类

方法功能
Page()无参构造
Page(long current, long size)构造方法,并初始化当前页和每页条数
Page(long current, long size, long total)构造方法,并初始化当前页,每页条数,总记录数
Page(long current, long size, boolean isSearchCount)构造方法,并初始化当前页,每页条数,是否进行count查询
Page(long current, long size, long total, boolean isSearchCount)构造方法,并初始化当前页,每页条数,总记录数,是否进行count查询
boolean hasPrevious()是否存在上一页
boolean hasNext()是否存在下一页
Page<T> setAsc(String… ascs)设置多个升序字段
Page<T> setAscs(List<String> ascs)设置多个升序字段
Page<T> setDesc(String… descs)设置多个降序字段
Page<T> setDescs(List<String> descs)设置多个降序字段

2.3 MP中自带分页查询的方法

通过BaseMapper<T>接口中IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper)方法实现分页查询

@Test
public void testPage1(){
    IPage<Person> page = personDao.selectPage(new Page<>(2, 2), null);
    System.out.println("当前页面数:" + page.getCurrent());
    System.out.println("每页条数:" + page.getSize());
    System.out.println("总记录数:" + page.getTotal());
    System.out.println("分页记录列表:" + page.getRecords());
    System.out.println("是否存在上一页:" + ((Page<Person>)page).hasPrevious());
    System.out.println("是否存在下一页:" + ((Page<Person>)page).hasNext());
}

2.4 自定义分页

定义接口

public interface PersonDao{
    IPage<Person> selectMyPage(Page page);
}

注:

  1. UserMapper可以继承或者不继承BaseMapper
  2. 方法参数传递Page对象即自动分页,并且Page对象必须放在第一位,可以继承Page实现自己的分页对象

定义mapper文件

<select id="selectMyPage" resultType="Person">
    select id,last_name,age,gender,email from tmp_person
</select>

注:编写一个普通list查询,mybatis-plus自动替你分页

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JTZ001

你的鼓励是我创作的最大动力?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值