SQL Server分页查询

原生SQL语句,实现SQL Server分页查询

sql 复制代码
DECLARE @pageCount INT 
DECLARE @pageIndex INT 
SET @pageCount = 10 -- #{page.pageSize}
SET @pageIndex = 2 -- #{page.pageNum}
;WITH ACTE AS (
	SELECT
		ROW_NUMBER () OVER (ORDER BY id) AS SN,
		id, table_id, name, workcode, create_time, update_time
	FROM
		lott_result_information
	),
BCTE AS (SELECT CEILING(MAX(SN) * 1.0 / @pageCount) AS PageTotal FROM ACTE) 
SELECT *,
	(SELECT COUNT (*) FROM ACTE ) AS total_number,
	(SELECT PageTotal FROM BCTE ) AS total_page_size 
FROM
	ACTE 
WHERE
	ACTE.SN > (@pageIndex - 1) * @pageCount 
	AND ACTE.SN <= (@pageIndex * @pageCount)

实战

  1. 编写Mapper.java的接口
java 复制代码
List<LottResultInformation> selectLottResultByPage(@Param("name") String name, @Param("page") BasePage page);
  1. 编写Mapper.xml的SQL语句
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.framework.mapper.LottMapper">
    <resultMap id="BaseResultLottResultMap" type="com.demo.framework.entity.LottResultInformation"  extends="BasePageMap">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="table_id" property="tableId" jdbcType="INTEGER"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="workcode" property="workcode" jdbcType="VARCHAR"/>
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
    </resultMap>

    <resultMap id="BasePageMap" type="com.demo.framework.entity.BasePage">
        <result column="total_number" property="totalNumber" jdbcType="INTEGER"/>
        <result column="total_page_size" property="pageTotal" jdbcType="INTEGER"/>
    </resultMap>

    <select id="selectLottResultByPage" resultMap="BaseResultLottResultMap">
        DECLARE @pageCount INT
        DECLARE @pageIndex INT
        SET @pageCount = #{page.pageSize}
        SET @pageIndex = #{page.pageNum}
        ;WITH ACTE AS (
            SELECT ROW_NUMBER() OVER (ORDER BY id) AS SN,
                   id, table_id, name, workcode, create_time, update_time
            FROM lott_result_information
            <if test="name != null and name !=''">
                where name LIKE CONCAT('%',#{name},'%')
            </if>
        ),
        BCTE AS (SELECT CEILING(MAX(SN) * 1.0 / @pageCount) AS PageTotal FROM ACTE)
        SELECT *,
               (SELECT COUNT(*) FROM ACTE)  AS total_number,
               (SELECT PageTotal FROM BCTE) AS total_page_size
        FROM ACTE
        WHERE ACTE.SN > (@pageIndex - 1) * @pageCount
          AND ACTE.SN &lt;= (@pageIndex * @pageCount)
    </select>

</mapper>

这样的话每次查询都会冗余两列total_number和total_page_size;这样也方便每次获取总页数和总条数。

相关推荐
是梦终空12 分钟前
JAVA毕业设计210—基于Java+Springboot+vue3的中国历史文化街区管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·历史文化街区管理·景区管理
摘星怪sec28 分钟前
【漏洞复现】|方正畅享全媒体新闻采编系统reportCenter.do/screen.do存在SQL注入
数据库·sql·web安全·媒体·漏洞复现
基哥的奋斗历程37 分钟前
学到一些小知识关于Maven 与 logback 与 jpa 日志
java·数据库·maven
m0_5127446437 分钟前
springboot使用logback自定义日志
java·spring boot·logback
十二同学啊41 分钟前
JSqlParser:Java SQL 解析利器
java·开发语言·sql
莫名有雪44 分钟前
BUUCTF_Web([RCTF2015]EasySQL)二次注入+报错注入
sql
苏-言44 分钟前
MyBatis最佳实践:提升数据库交互效率的秘密武器
数据库·mybatis
老马啸西风1 小时前
Plotly 函数图像绘制
java
方圆想当图灵1 小时前
缓存之美:万文详解 Caffeine 实现原理(上)
java·缓存
gyeolhada1 小时前
计算机组成原理(计算机系统3)--实验八:处理器结构拓展实验
java·前端·数据库·嵌入式硬件