Java springboot 集成JdbcTemplate自定义分页

本文介绍了一种在Java中实现数据库分页查询的方法,通过自定义PageList实体类和PageUtil工具类,提供了针对MySQL数据库的分页查询功能。PageList类封装了分页对象的属性,如当前页、总行数、总页数和数据列表;PageUtil类则包含查询单列数据、返回List<Map<String,Object>>格式数据和分页查询等功能。

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&&params.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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值