SQL Server分页查询

[复制链接]
发表于 2026-1-26 05:31:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
原生SQL语句,实现SQL Server分页查询
  1. DECLARE @pageCount INT
  2. DECLARE @pageIndex INT
  3. SET @pageCount = 10 -- #{page.pageSize}
  4. SET @pageIndex = 2 -- #{page.pageNum}
  5. ;WITH ACTE AS (
  6.         SELECT
  7.                 ROW_NUMBER () OVER (ORDER BY id) AS SN,
  8.                 id, table_id, name, workcode, create_time, update_time
  9.         FROM
  10.                 lott_result_information
  11.         ),
  12. BCTE AS (SELECT CEILING(MAX(SN) * 1.0 / @pageCount) AS PageTotal FROM ACTE)
  13. SELECT *,
  14.         (SELECT COUNT (*) FROM ACTE ) AS total_number,
  15.         (SELECT PageTotal FROM BCTE ) AS total_page_size
  16. FROM
  17.         ACTE
  18. WHERE
  19.         ACTE.SN > (@pageIndex - 1) * @pageCount
  20.         AND ACTE.SN <= (@pageIndex * @pageCount)
复制代码
实战
1. 编写Mapper.java的接口
  1. List<LottResultInformation> selectLottResultByPage(@Param("name") String name, @Param("page") BasePage page);
复制代码
2. 编写Mapper.xml的SQL语句
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.demo.framework.mapper.LottMapper">
  4.     <resultMap id="BaseResultLottResultMap" type="com.demo.framework.entity.LottResultInformation"  extends="BasePageMap">
  5.         <id column="id" property="id" jdbcType="INTEGER"/>
  6.         <result column="table_id" property="tableId" jdbcType="INTEGER"/>
  7.         <result column="name" property="name" jdbcType="VARCHAR"/>
  8.         <result column="workcode" property="workcode" jdbcType="VARCHAR"/>
  9.         <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
  10.         <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
  11.     </resultMap>
  12.     <resultMap id="BasePageMap" type="com.demo.framework.entity.BasePage">
  13.         <result column="total_number" property="totalNumber" jdbcType="INTEGER"/>
  14.         <result column="total_page_size" property="pageTotal" jdbcType="INTEGER"/>
  15.     </resultMap>
  16.     <select id="selectLottResultByPage" resultMap="BaseResultLottResultMap">
  17.         DECLARE @pageCount INT
  18.         DECLARE @pageIndex INT
  19.         SET @pageCount = #{page.pageSize}
  20.         SET @pageIndex = #{page.pageNum}
  21.         ;WITH ACTE AS (
  22.             SELECT ROW_NUMBER() OVER (ORDER BY id) AS SN,
  23.                    id, table_id, name, workcode, create_time, update_time
  24.             FROM lott_result_information
  25.             <if test="name != null and name !=''">
  26.                 where name LIKE CONCAT('%',#{name},'%')
  27.             </if>
  28.         ),
  29.         BCTE AS (SELECT CEILING(MAX(SN) * 1.0 / @pageCount) AS PageTotal FROM ACTE)
  30.         SELECT *,
  31.                (SELECT COUNT(*) FROM ACTE)  AS total_number,
  32.                (SELECT PageTotal FROM BCTE) AS total_page_size
  33.         FROM ACTE
  34.         WHERE ACTE.SN > (@pageIndex - 1) * @pageCount
  35.           AND ACTE.SN &lt;= (@pageIndex * @pageCount)
  36.     </select>
  37. </mapper>
复制代码
如许的话每次查询都会冗余两列total_number和total_page_size;如许也方便每次获取总页数和总条数。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表