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);
}
}
}
前端默认参数定义
字段名 | 默认值参数名 | 默认字段定义值 | 说明 |
---|---|---|---|
页码参数 | pageNum | 1 | HTTP请求中定义pageNum(页码参数,1-based)的属性名 |
每页数量 | pageSize | 10 | HTTP请求中定义pageSize(每页数量)的属性名 |
排序字段 | orderBy | 取决于服务方法定义 | 排序(ORDER BY) 字段变量名,用于前端定义排序字段名格式 `${column} [ASC |
分页查询返回数据字段(PageInfo)说明
Sqljava的PageInfo字段与Mybatis-PageHelper的PageInfo字段保持一致,字段说明如下
字段名 | 类型 | 说明 |
---|---|---|
total | long | 总记录数 |
list | List | 数据库查询的结果集 |
pageNum | int | 当前页 |
pageSize | int | 每页的数量 |
size | int | 当前页的数量 |
pages | int | 总页数 |
prePage | int | 前一页 |
nextPage | int | 下一页 |
isFirstPage | boolean | 是否为第一页 |
isLastPage | boolean | 是否为最后一页 |
hasPreviousPage | boolean | 是否有前一页 |
hasNextPage | boolean | 是否有下一页 |
navigatePages | int | 导航页码数 |
navigatepageNums | int[] | 所有导航页号 |
navigateFirstPage | int | 导航条上的第一页 |
navigateLastPage | int | 导航条上的最后一页 |
关于sql2java PageHelper的简单使用示例,参见上一篇博客《sql2java-pagehelper:参照Mybatis-PageHelper实现分页查询》