Spring的JdbcTemplate实现分页
PageList.java实体类
/**
* 封装分页对象
**/
public class PageList {
private int page; //当前页
private int totalRows; //总行数
private int pages; //总页数
private List list=new ArrayList(); public int getPage() {
return page;
} public void setPage(int page) {
this.page = page;
} public int getPages() {
return pages;
} public void setPages(int pages) {
this.pages = pages;
} public List getList() {
if(list==null){
list=new ArrayList();
}
return list;
} public void setList(List list) {
this.list = list;
} public int getTotalRows() {
return totalRows;
} public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
}
dao层
/**
* 只查询一列数据类型对象。用于只有一行查询结果的数据
* @param sql
* @param params
* @param cla Integer.class,Float.class,Double.Class,Long.class,Boolean.class,Char.class,Byte.class,Short.class
* @return
*/
public Object queryOneColumnForSigetonRow(String sql,Object[] params,Class cla){
Object result=null;
try{
if(params==null||params.length>0){
result=jdbcTemplate.queryForObject(sql,params,cla);
}else{
result=jdbcTemplate.queryForObject(sql,cla);
}
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}
/**
* 查询返回实体对象集合
* @param sql sql语句
* @param params 填充sql问号占位符数
* @param cla 实体对象类型
* @return
*/
public List queryForObjectList(String sql,Object[] params,final Class cla){
final List list=new ArrayList();
try{
jdbcTemplate.query(sql, params, new RowCallbackHandler(){
public void processRow(ResultSet rs) {
try{
List<String> columnNames=new ArrayList<String>();
ResultSetMetaData meta=rs.getMetaData();
int num=meta.getColumnCount();
for(int i=0;i<num;i++){
columnNames.add(meta.getColumnLabel(i+1).toLowerCase().trim());
}
Method[] methods=cla.getMethods();
List<String> fields=new ArrayList<String>();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().trim().startsWith("set")){
String f=methods[i].getName().trim().substring(3);
f=(f.charAt(0)+"").toLowerCase().trim()+f.substring(1);
fields.add(f);
}
}
do{
Object obj=null;
try{
obj=cla.getConstructor().newInstance();
}catch(Exception ex){
ex.printStackTrace();
}
for(int i=0;i<num;i++){
Object objval=rs.getObject(i+1);
for(int n=0;n<fields.size();n++){
String fieldName=fields.get(n).trim();
if(columnNames.get(i).equals(fieldName.toLowerCase().trim())){
BeanUtils.copyProperty(obj, fieldName, objval);
break;
}
}
}
list.add(obj);
}while(rs.next());
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}catch(Exception ex){ex.printStackTrace();}
if(list.size()<=0){
return null;
}
return list;
}
/**
* 查询返回List<Map<String,Object>>格式数据,每一个Map代表一行数据,列名为key
* @param sql sql语句
* @param params 填充问号占位符数
* @return
*/
public List<Map<String,Object>> queryForMaps(String sql,Object[] params){
try{
if(params!=null&¶ms.length>0){
return jdbcTemplate.queryForList(sql, params);
}
return jdbcTemplate.queryForList(sql);
}catch(Exception ex){
ex.printStackTrace();
}
return null;
} /**
* 查询分页(MySQL数据库)
* @param sql 终执行查询的语句
* @param params 填充sql语句中的问号占位符数
* @param page 想要第几页的数据
* @param pagerow 每页显示多少条数
* @param cla 要封装成的实体元类型
* @return pageList对象
*/
public PageList queryByPageForMySQL(String sql, Object[] params, int page, int pagerow,Class cla) {
String rowsql="select count(*) from ("+sql+") gmtxtabs_"; //查询总行数sql
int pages = 0; //总页数
int rows=(Integer)queryOneColumnForSigetonRow(rowsql, params, Integer.class); //查询总行数
//判断页数,如果是页大小的整数倍就为rows/pageRow如果不是整数倍就为rows/pageRow+1
if (rows % pagerow == 0) {
pages = rows / pagerow;
} else {
pages = rows / pagerow + 1;
}
//查询第page页的数据sql语句
if(page<=1){
sql+=" limit 0,"+pagerow;
}else{
sql+=" limit "+((page-1)*pagerow)+","+pagerow;
}
//查询第page页数据
List list=null;
if(cla!=null){
list=queryForObjectList(sql, params, cla);
}else{
list=queryForMaps(sql, params);
} //返回分页格式数据
PageList pl =new PageList();
pl.setPage(page); //设置显示的当前页数
pl.setPages(pages); //设置总页数
pl.setList(list); //设置当前页数据
pl.setTotalRows(rows); //设置总记录数
return pl;
}
service层

controller层
if(null==pageNo)
{
pageNo = 1;
} if(null==pageSize)
{
pageSize = 30;
}
PageList list = service.getAllNotice(unitid, pageNo, pageSize);
Spring的JdbcTemplate实现分页的更多相关文章
- Spring利用JDBCTemplate实现批量插入和返回id
1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...
- Spring 中jdbcTemplate 实现执行多条sql语句
说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...
- spring使用jdbcTemplate和jdbcdaosupport和namedparameter
jdbcTemplate: 首先连接数据库 <!-- 导入外部文件 --> <context:property-placeholder location="classpat ...
- 两行代码玩转Spring Data排序和分页
一:唠嗑 在实际项目中对Spring Data的各种使用相当多,简单的增删改查Spring Data提供了现成的方法,一些复杂的,我们可以在接口方法写And,Not等关键字来搞定,想写原生SQL,CQ ...
- Spring之JDBCTemplate学习
一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...
- spring boot 整合pagehelper分页插件
Spring Boot 整合pagehelper分页插件 测试环境: spring boot 版本 2.0.0.M7 mybatis starter 版本 1.3.1 jdk 1.8 ------ ...
- spring+spring mvc+JdbcTemplate 入门小例子
大家使用这个入门时候 最好能够去 搜一下 spring mvc 的 原理,我放一张图到这里,自己琢磨下,后面去学习就容易了 给个链接 (网上一把,千万不能懒) https://www.cnblo ...
- spring 学习(四): spring 的 jdbcTemplate 操作
spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...
- Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法
以User为操作对象 package com.swift.jdbc; public class User { private Long user_id; private String user_cod ...
随机推荐
- 使用angular路由切换后 轮播以及iscrollJs失效的问题
我们在使用angular的时候,路由总是最让人头疼的地方. 在这里为大家解决一些用angular来回切换遗留下的小问题 比如我们在使用ng-route时如果主页面含有轮播图,当你切换到其他页面再切回主 ...
- RedisDesktopManager 打开报0xc000007b程序错误
RedisDesktopManager 是一个管理redis的工具,很好用,我的电脑可以安装0.8.3版的,最新版到0.9.4了,其中经典版本是0.8.8,可惜0.8.3版之后,我的电脑安装软件后,打 ...
- 在唯一密钥属性“fileExtension”设置为“.log”时,无法添加类型为“mimeMap”的重复集合项
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkoAAAFfCAIAAAA+snR7AAAgAElEQVR4nOzdZ1xT18PAcf+1VpZaW6
- Kafka Consumer接口
对于kafka的consumer接口,提供两种版本, high-level 一种high-level版本,比较简单不用关心offset, 会自动的读zookeeper中该Consumer grou ...
- freemarker 判断写法
1.if条件写法:如果data非空则输出:test<#if data?? >test</#if> 2.为空则输出 <#if !(data??) > test < ...
- PHP关于函数的参数问题
可能是自己以前写程序太规范了,今天发现个PHP函数参数个数的问题,定义的函数有三个参数,但是使用函数的时候竟然传了四个参数,更意外的是程序运行没有错误,甚至没有警告.于是依靠搜索引擎和PHP文档仔细查 ...
- 持续交付的Mesos与Docker导入篇
变革这个词在当今的数字化时代司空见惯,IT技术每过一段时间就会有一起革新,从WEB2.0.虚拟化.云计算.大数据.微架构.DevOps再到今天的容器Docker与Mesos. Docker的出现方便了 ...
- Linux学习 -->解决Ubuntu系统上 No command 'crond' found
前两天,准备在Ubuntu服务器上,定时执行Gitlab备份的命令,如下所示 编辑 vi /etc/crontab 文件,添加如下定时脚本 # edited by ouyang 2017-8-11 添 ...
- cocos2d-x-3.0 window+eclipse Android Project 环境与开发新手教程
今天闲来没事,听说最新cocos2d-x 出新版3.0.所以来学习一下. 大致參考官方教程:http://www.cocos2d-x.org/wiki/How_to_Build_an_Android_ ...
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...