sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询
Posted 10km
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询相关的知识,希望对你有一定的参考价值。
sql2java是我几年年开始写的一个sql2java是一个轻量级数据库(SQL)访问代码(java)生成器。这几年一直在根据工作需要维护升级,最近的项目中需要对数据库的记录提供分页查询功能,于是我参照Mybatis-PageHelper并借用其外部数据格式为sql2java实现的分页功能,将其封装为一个sql2java子项目sqlj2ava-pagehelper。使用方式与Mybatis-Pagehelper基本一致。
基本原理
PageHelper的基本原理是应用层通过调用PageHelper.startPage
方法在一个静态全局的线程局部变量(ThreadLocal)中保存分页查询的标志及相关的数据(参见gu.sql2java.pagehelper.Page,参见gu.sql2java.pagehelper.PageHelper 的getLocalPage,setLocalPage
方法),这样就激活了分页查询功能,
sql2java底层在执行SELECT
查询语句时会根据保存在ThreadLocal
中的Page
对象为应用层提供的SELECT
语句自动拼接分页查询语法。如果当前线程的ThreadLocal变量中没有Page
对象或Page.enable
字段为false
那么就是普通的SQL查询。
引入依赖
maven下引入sql2java-pagehelper项目依赖
<dependency>
<groupId>com.gitee.com</groupId>
<artifactId>sql2java-pagehelper</artifactId>
<version>3.11.1</version>
</dependency>
调用示例
调用示例如下:
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import gu.sql2java.Managers;
import gu.sql2java.Managers.Module;
import gu.sql2java.pagehelper.Page;
import gu.sql2java.pagehelper.PageHelper;
import gu.sql2java.pagehelper.PageInfo;
import net.facelib.eam.devicecenter.db.DeviceBean;
import static net.facelib.eam.devicecenter.DaoManagement.DM;
import static net.gdface.utils.SimpleLog.log;
public class PageHelperTest
@BeforeClass
public static void setUpBeforeClass() throws Exception
// 输出调试信息
Managers.setDebug(true, Module.BASETABLEMANAGER);
@SuppressWarnings( "rawtypes", "resource" )
@Test
public void test1LoadByWhere()
try
// 启动分页查询
PageHelper.startPage(1, 2);
// 正常执行sql2java的SQL查询
List<DeviceBean> devices = DM.daoLoadDeviceByWhere("WHERE id>0 order by id", 1, -1);
PageInfo<DeviceBean> pageInfo = PageInfo.of(devices);
log("pageInfo ",pageInfo);
finally
// 删除ThreadLocal变量
PageHelper.clearPage();
暂时禁用PageHelper
根据《基本原理》一节中的说明我们知道,PageHelper
是依赖线程局部变量(ThreadLocal
)来标记是否启动分页查询的。ThreadLocal
变量作用于当前线程。当分页查询启动时,在当前线程中调用sql2java的任何SELECT
查询都会被视为分页查询。
而在现实的场景中,我们实现一个提供分页查询的服务方法时,有可能往往不会只执行一次SELECT
查询就能返回需要的需要数据,有可能在执行主要的分页查询获取数据后还要执行其他的正常查询,在多次查询的结果基础组装用户需要的数据。所以这里就存在分页查询激活的状态下,分页查询和普通查询混合调用。
如果在调用时不加以区分,sql2java会将所有我们希望执行的普通查询都以分页查询对待,那么返回的结果肯定是不对的。
为了能在分页查询激活的状态下,实现执行普通查询。从3.11.1版本起,gu.sql2java.SqlRunner接口(TableManager继承了此接口)增加了runWithNoPage(Callable),runWithNoPage(Runnable)
方法,为应用层提供了在分页查询激活的状态下,临时禁用分页查询,执行普通查询的简单方式.
示例如下:
/** 暂时禁用分页查询执行 loadUsingTemplateAsList */
List<B> beans = deviceManager.runWithNoPage(()->deviceManager.loadUsingTemplateAsList(bean));
@Sql2javaEnablePage注解
gu.sql2java.pagehelper.annotations.Sql2javaEnablePage 是用于服务方法上启动分页查询的注解类。
注解类字段说明如下
字段名 | 默认值 | 默认字段定义值 | 说明 |
---|---|---|---|
value | true | 为true 启用分页查询 | |
pageNumKey | "pageNum" | 1 | HTTP请求中定义pageNum(页码参数,1-based)的属性名 |
pageSizeKey | "pageSize" | 10 | HTTP请求中定义pageSize(每页数量)的属性名 |
countKey | "count" | HTTP请求中定义count(是否进行count查询,默认true )的属性名 | |
countColumnKey | “countColumn” | “0” | HTTP请求中定义count查询的字段名的属性名,如果不定义则默认字段名为"0" |
以上是关于sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询的主要内容,如果未能解决你的问题,请参考以下文章
sql2java-pagehelper:Spring AOP支持
sql2java-pagehelper:Spring AOP支持
document.getElementById("myB").style.top = "100px"; [复制]
java 后台框架 支持APP接口调用 APP后台 手机后台框架java springmvc myb
Mybatis报错:org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.me.myb
错误org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.baomidou.myb