MyBatis拦截器分页

本文介绍了如何使用MyBatis的Pagination Interceptor实现分页功能。步骤包括引入拦截器,配置sqlMapConfig.xml, mapper文件中添加分页方法,以及在dao、service和controller层的实现。需要注意在调用时从params.fullName中获取分页参数。
摘要由CSDN通过智能技术生成
使用Mybatis拦截器实现分页,类似aop的效果.拦截sql语句,修改为分页查询语句.

1、引入pagination inteceptor拦截器和分页page
2、在sqlMapConfig.xml中配置拦截器插件

<!-- 分页拦截器,拦截用户提交的查询,只查询当前页数据;提高响应速度。 -->
<plugins>  
        <plugin  interceptor="cn.itcast.jk.pagination.PageInterceptor">  
            <property name="databaseType" value="oracle"/>  
        </plugin>  
    </plugins>  

3、在mapper文件中添加分页方法

注意参数:params.fullName,参数封装的Page.params Map集合中,所以调用时要到其中获取。

<!-- 带条件分页查询 -->
    <select id="findPage" parameterType="cn.itcast.jk.pagination.Page" resultMap="factoryRM">  
        select * from FACTORY_C
        where 1=1
        <if test="params.fullName != null">and FULL_NAME like #{params.fullName}</if>
        <if test="params.state != null">and STATE = #{params.state}</if>
        order by ORDER_NO
    </select> 

4、实现dao、service
5、controller中调用

//查询
    @RequestMapping("/basicinfo/factory/list.action")
    public String list(String fullName, Model model, Page<Factory> page){

        //设置查询条件
        Map<String, Object> params = new HashMap<String, Object>();
        if(fullName!=null&&!fullName.equals("")){
            params.put("fullName", "%" + fullName + "%");
        }
        params.put("state", 1);
        page.setParams(params);

        List<Factory> dataList = factoryService.findPage(page);

        model.addAttribute("dataList", dataList);
        model.addAttribute("pageLinks", page.pageLinks("list.action"));
        return "/basicinfo/factory/jFactoryList.jsp";
    }
Page.java:
package cn.itcast.jk.pagination;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 对分页的基本数据进行一个简单的封装
 */
public class Page<T> {
    private int pageNo = 1;         //页码,默认是第一页
    private int pageSize = 3;       //每页显示的记录数,默认是10
    private int totalRecord;        //总记录数
    private int totalPage;          //总页数
    private List<T> results;        //对应的当前页记录
    private Map<String, Object> params = new HashMap<String, Object>();     //其他的参数我们把它分装成一个Map对象

    public int getPageNo() {
       return pageNo;
    }

    public void 
Mybatis拦截器分页是指通过使用Mybatis拦截器机制来实现数据库查询结果的分页显示。拦截器的作用是在方法执行前后加入自定义的逻辑代码,从而实现对方法的拦截和处理。在Mybatis中,我们可以使用拦截器来拦截Executor接口中的query方法,该方法用于执行数据库查询操作。通过拦截query方法,我们可以在查询前后进行一些处理,比如对查询结果进行分页处理。 在实现Mybatis拦截器分页的过程中,我们需要定义一个实现了Interceptor接口的拦截器类,并在该类上使用@Intercepts注解来定义拦截点。在拦截器类中,我们可以通过重写intercept方法来实现对query方法的拦截和处理。在intercept方法中,我们可以获取到方法的参数和执行结果,并根据需要进行分页处理。 为了在Mybatis中使用拦截器分页,我们还需要在Mybatis的配置文件中注册拦截器。在配置文件中,我们可以使用<plugins>标签来注册拦截器,指定拦截器的类名。通过注册拦截器,我们可以使拦截器生效,并在查询操作中进行分页处理。 需要注意的是,不同的数据库可能有不同的分页语法,为了保证程序的兼容性,最好将数据库方言的设置抽出来。可以定义一个数据库方言配置接口,通过实现该接口来设置不同数据库的分页语法。在分页处理中,我们可以根据数据库方言来生成相应的分页SQL语句,从而实现对不同数据库的兼容性支持。 #### 引用[.reference_title] - *1* *2* *3* [MyBatis拦截器实现分页](https://blog.csdn.net/wqh8522/article/details/78972135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值