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 ...
随机推荐
- 持续集成之jenkins2
ip 什么是持续集成 没有持续集成 持续集成最佳实践 持续集成概览 什么是Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开 ...
- 【转】jQuery.ajax向后台传递数组问题
$.ajax({ url: "/xxx", type: "GET", data: { "boxIds": boxIds, "box ...
- C++中的.和::和:和->的区别
在学习C++的过程中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别. 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取 ...
- PL/SQL Developer登入时候报ORA-12638
在client安装目录,找到打开sqlnet.ora 在里面找到 SQLNET.AUTHENTICATION_SERVICES= (NTS)将其更改为: SQLNET.AUTHENTICATION_S ...
- 第二次作业(WordCount)重制版
Github项目地址:https://gitee.com/DamonGetup/WordCount/tree/master 基本功能: 对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式 ...
- UVA796 - Critical Links(Tarjan求桥)
In a computer network a link L, which interconnects two servers, is considered critical if there are ...
- UVA 624 ---CD 01背包路径输出
DescriptionCD You have a long drive by car ahead. You have a tape recorder, but unfortunately your b ...
- 【剑指Offer】俯视50题之1-10题
面试题1赋值运算符函数 面试题2 实现Singleton模式 面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从头到尾打印链表 面试题6 重建二叉树 面试题7 用两个栈实 ...
- [WorldWind学习]23.TerrainAccessor
QuadTile的CreateElevatedMesh()方法中: //获取地形瓦片 TerrainTile tile = QuadTileSet.World.TerrainAccessor.GetE ...
- Java基础知识陷阱(十)
本文发表于本人博客. 上个星期由于时间比较紧所以未能继续写下去,今天再接再厉,专心 + 坚持这样离目标就越来越近了!废话少说说正题,今天我们还是来说说java中比较基础的知识,大家知道编写java程序 ...