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 ...
随机推荐
- 170724、springboot编程之完整demo
综合之前学习,参考网上各大神博客,写了一个小demo,需要的朋友可以参考一下! 项目地址:https://github.com/zrbfree/spring-boot-anna.git
- JS/Java/Python格式化金额
//java代码 public static void main(String[] args) { DecimalFormat myformat = new DecimalFormat(); ...
- html lang="zh-cn"解决Mac版Firefox中文字体显示问题
这两天在Mac下被Firefox的中文字体显示问题所困扰.在Firefox中将Sans-serif字体设置为SimSun-ExtB(新宋体)或英文字体(这时会用Mac默认中文字体),如下图: 浏览园子 ...
- expdp全库备份rac数据库因错误终止
1.expdp导出日志报错如下: ORA-39014: One or more workers have prematurely exited. ORA-39029: worker 2 with pr ...
- BBS - 后台管理
一.添加文章 注: 后台管理页面,应该有个新得 app /blog/backend/ # 文章列表页/blog/add_article/ # 添加文章 # 后台管理re_path(r'backend/ ...
- JavaWeb404排错的小技巧
报这种错误,404后面什么都没有的话,就证明处理器映射器根据url找不到handler. 报这种错误,证明处理器映射器根据url找到了handler,转发的jsp页面找不到,说明jsp页面错了.
- Elasticsearch入门教程
ElasticSearch是一个高度可扩展的开源搜索引擎并使用REST API,所以您值得拥有. 在本教程中,将介绍开始使用ElasticSearch的一些主要概念. 下载并运行ElasticSear ...
- spark2.1.1创建Pipeline
Pipeline 为流程,是Spark创建机器学习的一个流程控制的类 下面直接贴出创建的代码,以及整个流程 第一种: import org.apache.spark.ml.{Pipeline, Pip ...
- 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) Solution
A: Solved. 分别处理出每个%7后余数的数字个数,再组合一下 #include <bits/stdc++.h> using namespace std; #define ll lo ...
- 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) Solution
A:Exam Solved. 温暖的签. #include<bits/stdc++.h> using namespace std; ; int k; char str1[maxn], st ...