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&&params.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实现分页的更多相关文章

  1. Spring利用JDBCTemplate实现批量插入和返回id

    1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...

  2. Spring 中jdbcTemplate 实现执行多条sql语句

    说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...

  3. spring使用jdbcTemplate和jdbcdaosupport和namedparameter

    jdbcTemplate: 首先连接数据库 <!-- 导入外部文件 --> <context:property-placeholder location="classpat ...

  4. 两行代码玩转Spring Data排序和分页

    一:唠嗑 在实际项目中对Spring Data的各种使用相当多,简单的增删改查Spring Data提供了现成的方法,一些复杂的,我们可以在接口方法写And,Not等关键字来搞定,想写原生SQL,CQ ...

  5. Spring之JDBCTemplate学习

    一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...

  6. spring boot 整合pagehelper分页插件

    Spring Boot 整合pagehelper分页插件 测试环境: spring boot  版本 2.0.0.M7 mybatis starter 版本  1.3.1 jdk 1.8 ------ ...

  7. spring+spring mvc+JdbcTemplate 入门小例子

    大家使用这个入门时候 最好能够去 搜一下 spring mvc 的 原理,我放一张图到这里,自己琢磨下,后面去学习就容易了 给个链接 (网上一把,千万不能懒)    https://www.cnblo ...

  8. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

  9. Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法

    以User为操作对象 package com.swift.jdbc; public class User { private Long user_id; private String user_cod ...

随机推荐

  1. 使用angular路由切换后 轮播以及iscrollJs失效的问题

    我们在使用angular的时候,路由总是最让人头疼的地方. 在这里为大家解决一些用angular来回切换遗留下的小问题 比如我们在使用ng-route时如果主页面含有轮播图,当你切换到其他页面再切回主 ...

  2. RedisDesktopManager 打开报0xc000007b程序错误

    RedisDesktopManager 是一个管理redis的工具,很好用,我的电脑可以安装0.8.3版的,最新版到0.9.4了,其中经典版本是0.8.8,可惜0.8.3版之后,我的电脑安装软件后,打 ...

  3. 在唯一密钥属性“fileExtension”设置为“.log”时,无法添加类型为“mimeMap”的重复集合项

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkoAAAFfCAIAAAA+snR7AAAgAElEQVR4nOzdZ1xT18PAcf+1VpZaW6

  4. Kafka Consumer接口

    对于kafka的consumer接口,提供两种版本,   high-level 一种high-level版本,比较简单不用关心offset, 会自动的读zookeeper中该Consumer grou ...

  5. freemarker 判断写法

    1.if条件写法:如果data非空则输出:test<#if data?? >test</#if> 2.为空则输出 <#if !(data??) > test < ...

  6. PHP关于函数的参数问题

    可能是自己以前写程序太规范了,今天发现个PHP函数参数个数的问题,定义的函数有三个参数,但是使用函数的时候竟然传了四个参数,更意外的是程序运行没有错误,甚至没有警告.于是依靠搜索引擎和PHP文档仔细查 ...

  7. 持续交付的Mesos与Docker导入篇

    变革这个词在当今的数字化时代司空见惯,IT技术每过一段时间就会有一起革新,从WEB2.0.虚拟化.云计算.大数据.微架构.DevOps再到今天的容器Docker与Mesos. Docker的出现方便了 ...

  8. Linux学习 -->解决Ubuntu系统上 No command 'crond' found

    前两天,准备在Ubuntu服务器上,定时执行Gitlab备份的命令,如下所示 编辑 vi /etc/crontab 文件,添加如下定时脚本 # edited by ouyang 2017-8-11 添 ...

  9. cocos2d-x-3.0 window+eclipse Android Project 环境与开发新手教程

    今天闲来没事,听说最新cocos2d-x 出新版3.0.所以来学习一下. 大致參考官方教程:http://www.cocos2d-x.org/wiki/How_to_Build_an_Android_ ...

  10. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...