文档章节

分页查询

bharals
 bharals
发布于 2017/05/16 07:04
字数 917
阅读 15
收藏 0
点赞 0
评论 0

分页查询实例

package com.hao.bookstore.dao.impl;  
  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.Statement;  
import java.util.List;  
  
import org.apache.commons.dbutils.QueryRunner;  
import org.apache.commons.dbutils.handlers.BeanHandler;  
import org.apache.commons.dbutils.handlers.BeanListHandler;  
import org.apache.commons.dbutils.handlers.ScalarHandler;  
  
import com.hao.bookstore.dao.DAO;  
import com.hao.bookstore.db.JDBCUtils;  
import com.hao.bookstore.utils.ReflectionUtils;  
  
  
public class BaseDAO<T> implements DAO<T> {  
      
    private QueryRunner queryRunner = new QueryRunner();  
  
    private Class<T> clazz;  
      
    public BaseDAO() {  
        clazz = ReflectionUtils.getSuperGenericType(getClass());  
    }  
      
    @Override  
    public long insert(String sql, Object... args) {  
          
        long id = 0;  
          
        Connection connection = null;  
        PreparedStatement preparedStatement = null;  
        ResultSet resultSet = null;  
          
        try {  
            connection = JDBCUtils.getConnection();  
            preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);  
              
            if(args != null){  
                for(int i = 0; i < args.length; i++){  
                    preparedStatement.setObject(i + 1, args[i]);  
                }  
            }  
              
            preparedStatement.executeUpdate();  
              
            //获取生成的主键值  
            resultSet = preparedStatement.getGeneratedKeys();  
            if(resultSet.next()){  
                id = resultSet.getLong(1);  
            }  
              
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally{  
            JDBCUtils.release(resultSet, preparedStatement);  
        }  
          
        return id;  
    }  
  
    @Override  
    public void update(String sql, Object... args) {  
        Connection connection = null;  
          
        try {  
            connection = JDBCUtils.getConnection();  
            queryRunner.update(connection, sql, args);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    @Override  
    public T query(String sql, Object... args) {  
          
        Connection connection = null;  
          
        try {  
            connection = JDBCUtils.getConnection();  
            return queryRunner.query(connection, sql, new BeanHandler<>(clazz), args);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
          
        return null;  
    }  
  
    @Override  
    public List<T> queryForList(String sql, Object... args) {  
        Connection connection = null;  
          
        try {  
            connection = JDBCUtils.getConnection();  
            return queryRunner.query(connection, sql, new BeanListHandler<>(clazz), args);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }   
        return null;  
    }  
  
    @Override  
    public <V> V getSingleVal(String sql, Object... args) {  
        Connection connection = null;  
          
        try {  
            connection = JDBCUtils.getConnection();  
            return (V)queryRunner.query(connection, sql, new ScalarHandler(), args);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
          
        return null;  
    }  
  
    @Override  
    public void batch(String sql, Object[]... params) {  
        Connection connection = null;  
          
        try {  
            connection = JDBCUtils.getConnection();  
            queryRunner.batch(connection, sql, params);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
          
    }  
  
}  
package com.hao.bookstore.dao;  
  
import java.util.Collection;  
import java.util.List;  
  
import com.hao.bookstore.domain.Book;  
import com.hao.bookstore.domain.ShoppingCartItem;  
import com.hao.bookstore.web.CriteriaBook;  
import com.hao.bookstore.web.Page;  
  
  
public interface BookDAO {  
  
    /** 
     * 根据 id 获取指定 Book 对象 
     * @param id 
     * @return 
     */  
    public abstract Book getBook(int id);  
    /** 
     * 根据传入的 CriteriaBook 对象返回对应的 Page 对象 
     * @param cb 
     * @return 
     */  
    public abstract Page<Book> getPage(CriteriaBook cb);  
    /** 
     * 根据传入的 CriteriaBook 对象返回其对应的记录数 
     * @param cb 
     * @return 
     */  
    public abstract long getTotalBookNumber(CriteriaBook cb);  
    /** 
     * 根据传入的 CriteriaBook 和 pageSize 返回当前页对应的 List  
     * @param cb 
     * @param pageNo 
     * @param pageSize 
     * @return 
     */  
    public abstract List<Book> getPageList(CriteriaBook cb,int pageSize);  
    /** 
     * 返回指定 id 的 book 的 storeNumber 字段的值 
     * @param id 
     * @return 
     */  
    public abstract int getStoreNumber(Integer id);  
    /** 
     * 根据传入的 ShoppingCartItem 的集合,  
     * 批量更新 books 数据表的 storenumber 和 salesnumber 字段的值 
     * @param items 
     */  
    public abstract void batchUpdateStoreNumberAndSalesAmount(  
            Collection<ShoppingCartItem> items);  
}  
package com.hao.bookstore.dao.impl;  
  
import java.util.ArrayList;  
import java.util.Collection;  
import java.util.List;  
  
import com.hao.bookstore.dao.BookDAO;  
import com.hao.bookstore.domain.Book;  
import com.hao.bookstore.domain.ShoppingCartItem;  
import com.hao.bookstore.web.CriteriaBook;  
import com.hao.bookstore.web.Page;  
  
  
public class BookDAOImpl extends BaseDAO<Book> implements BookDAO {  
  
    @Override  
    public Book getBook(int id) {  
        String sql = "SELECT id, author, title, price, publishingDate, " +  
                "salesAmount, storeNumber, remark FROM mybooks WHERE id = ?";  
        return query(sql, id);  
    }  
  
    //3.   
    @Override  
    public Page<Book> getPage(CriteriaBook cb) {  
        Page<Book> page = new Page<>(cb.getPageNo());  
          
        page.setTotalItemNumber(getTotalBookNumber(cb));  
        //校验 pageNo 的合法性  
        cb.setPageNo(page.getPageNo());  
        page.setList(getPageList(cb, 3));  
          
        return page;  
    }  
  
    //1.   
    @Override  
    public long getTotalBookNumber(CriteriaBook cb) {  
        String sql = "SELECT count(id) FROM mybooks WHERE price >= ? AND price <= ?";  
        return getSingleVal(sql, cb.getMinPrice(), cb.getMaxPrice());   
    }  
  
    //2.   
    /** 
     * MySQL 分页使用 LIMIT, 其中 fromIndex 从 0 开始。  
     */  
    @Override  
    public List<Book> getPageList(CriteriaBook cb, int pageSize) {  
        String sql = "SELECT id, author, title, price, publishingDate, " +  
                "salesAmount, storeNumber, remark FROM mybooks " +  
                "WHERE price >= ? AND price <= ? " +  
                "LIMIT ?, ?";  
          
        return queryForList(sql, cb.getMinPrice(), cb.getMaxPrice(),   
                (cb.getPageNo() - 1) * pageSize, pageSize);  
    }  
  
    @Override  
    public int getStoreNumber(Integer id) {  
        String sql = "SELECT storeNumber FROM mybooks WHERE id = ?";  
        return getSingleVal(sql, id);  
    }  
  
    @Override  
    public void batchUpdateStoreNumberAndSalesAmount(  
            Collection<ShoppingCartItem> items) {  
        String sql = "UPDATE mybooks SET salesAmount = salesAmount + ?, " +  
                "storeNumber = storeNumber - ? " +  
                "WHERE id = ?";  
        Object [][] params = null;  
        params = new Object[items.size()][3];  
        List<ShoppingCartItem> scis = new ArrayList<>(items);  
        for(int i = 0; i < items.size(); i++){  
            params[i][0] = scis.get(i).getQuantity();  
            params[i][1] = scis.get(i).getQuantity();  
            params[i][2] = scis.get(i).getBook().getId();  
        }  
        batch(sql, params);  
    }  
  
  
}  
package com.hao.bookstore.web;  
  
import java.util.List;  
  
public class Page<T> {  
    private int pageNo;//当前第几页  
    private List<T> list;//当前页的 List  
    private int pageSize=3;//每页显示多少条记录  
    private long totalItemNumber;//共有多少条记录  
      
    public Page(int pageNo){  
        super();  
        this.pageNo=pageNo;  
    }  
  
    public int getPageNo() {  
        if(pageNo < 0)  
            pageNo = 1;  
          
        if(pageNo > getTotalPageNumber()){  
            pageNo = getTotalPageNumber();  
        }  
        return pageNo;  
    }  
  
    public void setPageNo(int pageNo) {  
        this.pageNo = pageNo;  
    }  
  
    public List<T> getList() {  
        return list;  
    }  
  
    public void setList(List<T> list) {  
        this.list = list;  
    }  
  
    public int getPageSize() {  
        return pageSize;  
    }  
  
    public void setPageSize(int pageSize) {  
        this.pageSize = pageSize;  
    }  
  
    public long getTotalItemNumber() {  
        return totalItemNumber;  
    }  
  
    public void setTotalItemNumber(long totalItemNumber) {  
        this.totalItemNumber = totalItemNumber;  
    }  
      
    //获取总页数  
    public int getTotalPageNumber(){  
        int totalPageNumber = (int)totalItemNumber/pageSize;  
        if(totalItemNumber % pageSize != 0){  
            totalPageNumber++;  
        }  
        return totalPageNumber;  
    }  
    public boolean isHasNext(){  
        if(getPageNo()<getTotalPageNumber()){  
            return true;  
        }  
        return false;  
    }  
    public boolean isHasPrev(){  
        if(getPageNo() > 1){  
            return true;  
        }  
        return false;  
    }  
    public int getPrevPage(){  
        if(isHasPrev()){  
            return getPageNo() - 1;  
        }  
          
        return getPageNo();  
    }  
    public int getNextPage(){  
        if(isHasNext()){  
            return getPageNo() + 1;  
        }  
          
        return getPageNo();  
    }  
}  
  
  
<pre name="code" class="java">package com.hao.bookstore.web;  
  
public class CriteriaBook {  
    private float minPrice = 0;  
    private float maxPrice = Integer.MAX_VALUE;  
      
    private int pageNo;  
  
    public float getMinPrice() {  
        return minPrice;  
    }  
  
    public void setMinPrice(float minPrice) {  
        this.minPrice = minPrice;  
    }  
  
    public float getMaxPrice() {  
        return maxPrice;  
    }  
  
    public void setMaxPrice(float maxPrice) {  
        this.maxPrice = maxPrice;  
    }  
  
    public int getPageNo() {  
        return pageNo;  
    }  
  
    public void setPageNo(int pageNo) {  
        this.pageNo = pageNo;  
    }  
  
    public CriteriaBook(float minPrice, float maxPrice, int pageNo) {  
        super();  
        this.minPrice = minPrice;  
        this.maxPrice = maxPrice;  
        this.pageNo = pageNo;  
    }  
}  

本文转载自:

共有 人打赏支持
bharals
粉丝 0
博文 26
码字总数 46307
作品 0

暂无相关文章

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 45分钟前 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

MVC——统一报文格式的异常处理响应

在我们写controller层的时候,常常会有这样的困惑,如果需要返回一个数据是,可能为了统一回去构造一个类似下列的数据格式: { status:true, msg:"保存成功!", data:[]} 而且在写...

alexzhu592 ⋅ 昨天 ⋅ 0

[知乎]SSH框架

网上图书馆管理系统包括管理员管理和图书管理,图书借阅,查询模块等等,网上商城包括前台页面和后台管理页面,两个都是以前别人的实际项目,只是别人用的不是SSH,我把他们改用SSH了,除了S...

颖伙虫 ⋅ 昨天 ⋅ 0

android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app

开发中常常有打开本地浏览器加载url或者指定浏览器加载, 还有打开第三方app, 如 打开高德地图 百度地图等 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。 如果手机本身...

切切歆语 ⋅ 昨天 ⋅ 0

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部