ibatis 实现分页查询 简单粗暴

本文介绍了一种使用sqlMap进行数据库分页查询的方法,包括如何定义SQL映射文件中的count和pageSelect方法,以及如何在DAO层实现具体的分页逻辑。同时,还展示了如何在Controller层设置分页参数并获取分页结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlMap中要有两个方法:count、pageSelect

<!-- 查询记录数 根据特定条件 -->
     <select id="count" resultClass="long">
        <![CDATA[
        select count(*) from t_dat_dict
    ]]>
     </select>

     <!-- 分页查询已经使用Dialect进行分页,也可以不使用Dialect直接编写分页 因为分页查询将传 #offset#,#pageSize#,#lastRows#
           三个参数,不同的数据库可以根于此三个参数属性应用不同的分页实现 -->
     <select id="pageSelect" resultMap="cowboysResultMap">
           select
           <include refid="commonColumns" />
        <![CDATA[
             from t_dat_dict
         ]]>
           <dynamic prepend="ORDER BY">
                <isNotEmpty property="sortColumns">$sortColumns$</isNotEmpty>
           </dynamic>
     </select>

Dao层 调用count查询总记录条数。如有其他过滤条件则在page的Filter中添加

public String getCountQuery() {
           return "Cowboys.count";
     }
/**
      * 分页查询记录
      *
      * @param statementName
      * @param pageRequest
      * @return
      */
     protected Page pageQuery(String statementName, PageRequest pageRequest) {
           //符合条件的总记录数
           Number totalCount = (Number) this.getSqlMapClientTemplate().queryForObject(getCountQuery(),
                     pageRequest.getFilters());
           //分页对象
           Page page = new Page(pageRequest, totalCount.intValue());
           // 与getSqlMapClientTemplate().queryForList(statementName,
           // parameterObject)配合使用
           Map otherFilters = new HashMap();
           //页起始记录数
           otherFilters.put("offset", page.getFirstResult());
           //分页大小
           otherFilters.put("pageSize", page.getPageSize());
           //页结束记录数
           otherFilters.put("lastRows", page.getFirstResult() + page.getPageSize());
           //排序信息
           otherFilters.put("sortColumns", pageRequest.getSortColumns());
           // 混合两个filters为一个filters,MapAndObject.get()方法将在两个对象取值,Map如果取值为null,则再在Bean中取值
           Map parameterObject = new MapAndObject(otherFilters, pageRequest.getFilters());
           //分页查询
           List list = getSqlMapClientTemplate().queryForList(statementName, parameterObject, page.getFirstResult(),
                     page.getPageSize());
           page.setResult(list);
           return page;
     }
     /**
      * 根据页面查询条件,取得 WalletMchtInfoReg 表的分页信息.
      * @param pageRequest 页面请求参数
      * @return WalletMchtInfoReg 表的分页信息
      */
     public Page findByPageRequest(PageRequest pageRequest) {
           return pageQuery("Cowboys.pageSelect", pageRequest);
     }
controller层调用 此处可以设置pageSize,pageNum,filter等条件

@GET
     @RequestMapping(value = "/v4", method = RequestMethod.GET)
     public @ResponseBody Page getPage() {
           PageRequest<Map> pageRequest = new PageRequest(DEFAULT_SORT_COLUMNS);
           pageRequest.setPageSize(5);
           Page page = cowboysDao.findByPageRequest(pageRequest);
           return page;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值