当前位置: 首页 > news >正文

sql2java-pagehelper:Spring AOP支持

sql2java是我几年年开始写的一个sql2java是一个轻量级数据库(SQL)访问代码(java)生成器。这几年一直在根据工作需要维护升级。本文接续上一篇博客《sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询》介绍Sql2java-pagehelper提供的分页查询(PageHelper)和动态SQL语句(WhereHelper)功能对Spring的支持

Spring AOP

如果使用切面技术,启动PageHelper及WhereHelper就更加方便上面的示例中对PageHelper,WhereHelper的直接调用都可以省去,只是需要增加一些切面的切入点定义。

启用aspect

PageHelper及WhereHelper支持Spring AOP(切面),需要如下在@ComponentScan注解中增加包名gu.sql2java.pagehelper.aspect,才能让Spring扫描到PageHelper及WhereHelper的切面实现类

@SpringBootApplication
@ComponentScan({"net.facelib.eam.devicecenter",
"net.facelib.eam.web.handler",
/** 启用分页查询切面支持 */
"gu.sql2java.pagehelper.aspect"})
public class RestfulService {
	//
}

注解启动的服务实现

如下在服务方法中定义@Sql2javaEnablePage,@EnableWhereHelper以启动分页查询和动态SQL脚本生成,

在方法实现中直接调取PageHelper.getWhere()即可获取WhereHelper根据方法注解生成的SQL WHERE语句,执行SQL查询

@RestController("instanceOfDeviceCenterImplSpringWebController")
@Api(value="DeviceCenterImpl",tags={"DeviceCenterImpl Spring Controller"})
public class DeviceCenterImplSpringWebController {
	@ResponseBody
    @ApiOperation(value = "设备记录分页查询<br>", notes = "设备记录分页查询<br>  \n"
+" 参数说明:  \n"
+" <ul>  \n"
+" <li>pageNum  --- 页码参数(1-based),默认1</li>  \n"
+" <li>pageSize   --- 每页记录数量,默认10</li>  \n"
+" <li>count         ---是否进行count查询,默认true</li>  \n"
+" <li>orderBy    ----排序字段名,格式:${字段1}[DESC|ASC]...,${字段N}[DESC|ASC]), 默认排序字段:id</li>  \n"
+" </ul>",httpMethod="GET")
    @RequestMapping(method=RequestMethod.GET, value="/DeviceCenterImpl/loadDeviceByWherePage")
    @Sql2javaEnablePage
    @EnableWhereHelper(debuglog=true)
    @OrderBy(value="id")
    @Equal(value="status")
	@Expression("id>0")
	@Expression("name !='$DUMMY_DEVICE_DONOT_DELETE$'")
    public PageInfo<DeviceBean> loadDeviceByWherePage() 
    {
		try {
            // 从PageHelper.getWhere()获取的由WhereHelper生成的SQL WHERE脚本
            // WHERE status = 'ENABLE' AND id > 0 AND name != '$DUMMY_DEVICE_DONOT_DELETE$' ORDER BY id 
			return new PageInfo<>(dm.daoLoadDeviceByWhere(PageHelper.getWhere()));
		} catch (RuntimeException e) {
			throw wrapServiceRuntimeException(e);
		}
    }
}

前端默认参数定义

字段名默认值参数名默认字段定义值说明
页码参数pageNum1HTTP请求中定义pageNum(页码参数,1-based)的属性名
每页数量pageSize10HTTP请求中定义pageSize(每页数量)的属性名
排序字段orderBy取决于服务方法定义排序(ORDER BY) 字段变量名,用于前端定义排序字段名格式 `${column} [ASC

分页查询返回数据字段(PageInfo)说明

Sqljava的PageInfo字段与Mybatis-PageHelper的PageInfo字段保持一致,字段说明如下

字段名类型说明
totallong总记录数
listList数据库查询的结果集
pageNumint当前页
pageSizeint每页的数量
sizeint当前页的数量
pagesint总页数
prePageint前一页
nextPageint下一页
isFirstPageboolean是否为第一页
isLastPageboolean是否为最后一页
hasPreviousPageboolean是否有前一页
hasNextPageboolean是否有下一页
navigatePagesint导航页码数
navigatepageNumsint[]所有导航页号
navigateFirstPageint导航条上的第一页
navigateLastPageint导航条上的最后一页

关于sql2java PageHelper的简单使用示例,参见上一篇博客《sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询》

相关文章:

  • java基础之策略模式[26]
  • 将自己的项目打包docker镜像并上传、使用
  • Vue 高级特性总结
  • 「滑动窗口算法概述」
  • MyEclipse数据库使用教程:使用数据库表、外键和索引
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • Windows Server 2016安装SQLServer2008R2
  • BP神经网络算法基本原理,bp神经网络的算法步骤
  • HADOOP 的 LZO 压缩 hadoop-lzo 编译
  • 单调栈: 接雨水
  • 用C++11 make_shared替代shared_ptr
  • 数据结构之——栈的操作讲解与功能实现
  • 剑指 Offer II 079+080+081+082
  • 前端小tips(持续更新)
  • matlab读取文件
  • [数据结构]链表的实现在PHP中
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • EventListener原理
  • mysql 数据库四种事务隔离级别
  • PHP变量
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • session共享问题解决方案
  • 百度地图API标注+时间轴组件
  • 模型微调
  • 时间复杂度与空间复杂度分析
  • 最近的计划
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云ACE认证学习知识点梳理
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #WEB前端(HTML属性)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (¥1011)-(一千零一拾一元整)输出
  • (二)hibernate配置管理
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (未解决)macOS matplotlib 中文是方框
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .gitignore
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 依赖注入和配置系统
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET和.COM和.CN域名区别
  • .NET下ASPX编程的几个小问题
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .py文件应该怎样打开?
  • @ModelAttribute使用详解
  • [C++]priority_queue的介绍及模拟实现
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [java基础揉碎]方法的重写/覆盖
  • [LeetCode 687]最长同值路径
  • [linux]centos7下解决yum install mysql-server没有可用包