1.实体类 PageList
import java.util.ArrayList;
import java.util.List;
/**
* 封装分页对象
**/
@SuppressWarnings("rawtypes")
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;
}
2.工具类
}
package com.rxdatainfo.modules.zzzl.util;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import com.rxdatainfo.modules.zzzl.domain.PageList;
@SuppressWarnings({"unchecked","rawtypes"})
@Component
public class PageUtil {
private static final Logger logger = LoggerFactory.getLogger(PageUtil.class);
public static JdbcTemplate jdbcTemplate;
@Autowired
public PageUtil(JdbcTemplate jdbcTemplate) {
PageUtil.jdbcTemplate = jdbcTemplate;
}
public PageUtil() {
super();
}
/**
* 只查询一列数据类型对象。用于只有一行查询结果的数据
* @param sql
* @param cla Integer.class,Float.class,Double.Class,Long.class,Boolean.class,Char.class,Byte.class,Short.class
* @return
*/
public static Object queryOneColumnForSigetonRow(String sql, Class cla){
Object result=null;
try{
result=jdbcTemplate.queryForObject(sql,cla);
logger.info(sql);
}catch(Exception ex){
ex.printStackTrace();
}
return result;
}
/**
* 查询返回List<Map<String,Object>>格式数据,每一个Map代表一行数据,列名为key
* @param sql sql语句
* @param params 填充问号占位符数
* @return
*/
public static 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 page 想要第几页的数据
* @param pagerow 每页显示多少条数
* @return pageList对象
*/
public static PageList queryByPageForMySQL(String sql, int page, int pagerow) {
String rowsql="select count(*) from ("+sql+") gmtxtabs_"; //查询总行数sql
int pages = 0; //总页数
int rows=(Integer)queryOneColumnForSigetonRow(rowsql, 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;
}
logger.info(sql);
//查询第page页数据
List list=jdbcTemplate.queryForList(sql);
//返回分页格式数据
PageList pl =new PageList();
pl.setPage(page); //设置显示的当前页数
pl.setPages(pages); //设置总页数
pl.setList(list); //设置当前页数据
pl.setTotalRows(rows); //设置总记录数
return pl;
}
}
3.使用方法
PageList list = PageUtil.queryByPageForMySQL(sql, Integer.parseInt(paramMap.get("pageNum")), Integer.parseInt(paramMap.get("pageSize")));
if (!ObjectUtils.isEmpty(list) && !ObjectUtils.isEmpty(list.getList())) {
result.put("list", list);
}
代替掉
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
if (!ObjectUtils.isEmpty(list)) {
result.put("list", list);
}
本文介绍了一种在Java中实现数据库分页查询的方法,通过自定义PageList实体类和PageUtil工具类,提供了针对MySQL数据库的分页查询功能。PageList类封装了分页对象的属性,如当前页、总行数、总页数和数据列表;PageUtil类则包含查询单列数据、返回List<Map<String,Object>>格式数据和分页查询等功能。

185

被折叠的 条评论
为什么被折叠?



