多条件查询数据库Dao

package com.mkk.goods.books.bookDao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import com.mkk.goods.books.domain.Book;
import com.mkk.goods.paper.Expression;
import com.mkk.goods.paper.Page;
import com.mkk.goods.paper.PageConstant;

import cn.itcast.jdbc.TxQueryRunner;

/*
 * 图书相关数据库操作
 */
public class BookDao {
	QueryRunner queryRunner = new TxQueryRunner();
	
	/**********************具体的查询方法 *************************************/
	
	/*
	 * 5.多条件查询
	 */
	public Page findByThreeCriteria(Book book,int pageNow) throws SQLException{
		List listEx=new ArrayList();
		listEx.add(new Expression("author","like","%"+book.getAuthor()+"%"));
		listEx.add(new Expression("bname","like","%"+book.getBname()+"%"));
		listEx.add(new Expression("press","like","%"+book.getPress()+"%"));
		return findByCriteria(listEx, pageNow);
	}
	
	/*
	 * 4.按出版社查询
	 * 
	 */
	public Page findByPress(String press,int pageNow) throws SQLException{
		List listEx=new ArrayList();
		listEx.add(new Expression("press","like","%"+press+"%"));
		return findByCriteria(listEx, pageNow);
	}
	
	
	/*
	 * 3.按作者查询
	 */
	public Page findByAuthor(String author,int pageNow) throws SQLException{
		List listEx=new ArrayList();
		listEx.add(new Expression("author","like","%"+author+"%"));
		return findByCriteria(listEx, pageNow);
	}
	
	/*
	 * 2.按书名查询
	 */
	public Page findByBname(String bname,int pageNow) throws SQLException{
		List listEx=new ArrayList();
		listEx.add(new Expression("bname","like","%"+bname+"%"));
		return findByCriteria(listEx, pageNow);
	}
	
	
	/*
	 * 1.按分类查询
	 */
	public Page findByCategory(String cid, int pageNow) throws SQLException{
		/*
		 * 1)设置查询的表达式
		 */
		Expression ex=new Expression("cid","=",cid);
		List listEx=new ArrayList();
		listEx.add(ex);
		Page p= findByCriteria(listEx, pageNow);
		return p;
	}
	
	/**********************下面是查询的工具类*********************************/
	/*
	 * 1.通用条件查询criteria
	 * 	 -->是一个工具查询类,方便查询方法使用
	 */
	private  Page findByCriteria(List listExpression,int pageNow) throws SQLException{
		int pageSize = PageConstant.PAGE_SICE;//每页显示book数据的大小
		/*
		 * 1.这里开始拼接sql语句
		 */
		StringBuilder whereSql = new StringBuilder("where 1=1 ");
		List params = new ArrayList();//属性数组		
		for(Expression es:listExpression){//循环遍历expression
			whereSql.append(" and ").append(es.getName()).append(" ").append(es.getOperator()).append(" ");
			/*
			 * 1)如果是is null  whereSql="where 1=1  and name is null ";name为名
			 * 2)如果不是  whereSql="where 1=1  and name =  ? and name =  ?";
			 */
			if(!es.getOperator().equals("is null")){//如果操作符不是is null 后面加?
				whereSql.append(" ?");
				params.add(es.getValue());//每添加一个表达式,就添加一个值,如果值为空则为 null
			}
		}
		/*
		 * 2.执行查询
		 */
		String sql ="select count(*) from t_book "+whereSql;
		//这里的params一定要params.toArray()一下,变称数组,相当于{value1,value2,······},如果是list则没办法直接使用
		Number number = (Number) queryRunner.query(sql, new ScalarHandler(),params.toArray());//获取总条数
		int totalCount = number.intValue();
		/*
		 * 3.获取Page所有信息
		 * 		-->limit ?,?  ------->第一个?:查询的数据的第?行(从0开始),第二个?:查询的数据的?个数据
		 */
		sql ="select * from t_book "+whereSql+" order by orderBy limit ?,? ";
		params.add((pageNow-1) * pageSize);
		params.add(pageSize);
		List listBook = queryRunner.query(sql, new BeanListHandler(Book.class),params.toArray());
		System.out.println(params.toArray().toString());
		Page pagebook=new Page();
		pagebook.setListBean(listBook);
		pagebook.setPageNow(pageNow);
		pagebook.setTotalCount(totalCount);
		pagebook.setPageSize(pageSize);
		return pagebook;
	}
	
}
 
  

下面是需要的包类

package com.mkk.goods.books.domain;

import com.mkk.good.category.domain.Category;

public class Book {

	private String bid;//书号
	private String bname;//书名
	private String author;//作者
	private String price;//价格
	private String currPrice;//当前价格
	private String discount;//折扣
	private String press;//出版社
	private String publishtime;//出版时间
	private int edition;//版次
	private int pageNum;//页数
	private int wordNum;//字数
	private String printtime;//印刷时间
	private int booksize;//开本
	private String paper;//纸质类型
	private Category category;//所属分类
	private String image_b;//大图路径
	private String image_w;//小图路径
	public String getBid() {
		return bid;
	}
	public void setBid(String bid) {
		this.bid = bid;
	}
	public String getBname() {
		return bname;
	}
	public void setBname(String bname) {
		this.bname = bname;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getCurrPrice() {
		return currPrice;
	}
	public void setCurrPrice(String currPrice) {
		this.currPrice = currPrice;
	}
	public String getDiscount() {
		return discount;
	}
	public void setDiscount(String discount) {
		this.discount = discount;
	}
	public String getPress() {
		return press;
	}
	public void setPress(String press) {
		this.press = press;
	}

	public int getEdition() {
		return edition;
	}
	public void setEdition(int edition) {
		this.edition = edition;
	}
	public int getPageNum() {
		return pageNum;
	}
	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}
	public int getWordNum() {
		return wordNum;
	}
	public void setWordNum(int wordNum) {
		this.wordNum = wordNum;
	}
	public String getPrinttime() {
		return printtime;
	}
	public void setPrinttime(String printtime) {
		this.printtime = printtime;
	}
	public int getBooksize() {
		return booksize;
	}
	public void setBooksize(int booksize) {
		this.booksize = booksize;
	}
	public String getPaper() {
		return paper;
	}
	public void setPaper(String paper) {
		this.paper = paper;
	}
	public Category getCategory() {
		return category;
	}
	public void setCategory(Category category) {
		this.category = category;
	}
	public String getImage_b() {
		return image_b;
	}
	public void setImage_b(String image_b) {
		this.image_b = image_b;
	}
	public String getImage_w() {
		return image_w;
	}
	public void setImage_w(String image_w) {
		this.image_w = image_w;
	}
	public String getPublishtime() {
		return publishtime;
	}
	public void setPublishtime(String publishtime) {
		this.publishtime = publishtime;
	}
	
}
package com.mkk.goods.paper;

import java.util.List;

/*
 *这个是dao最后返回的类型用于做分页
 */

/*
 * 分页相关内容
 */
public class Page {
     private int pageSize;//每页多少条数
     private int totalCount;//总条数
     private int pageNow;//当前页
     private String url;//请求的路径,如:/BookServlet?method=XXX&pageNow=2......
     private List listBean;//需要分页的bean对象,泛型,更加的灵活
     int totalPage =getTotalCount();
     public int getTotalPage(){//得到总的页数
    	 int totalPage = totalCount / pageSize;
    	 return totalCount%pageSize==0?totalPage:(totalPage+1);
     }
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNow() {
		return pageNow;
	}
	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public List getListBean() {
		return listBean;
	}
	public void setListBean(List listBean) {
		this.listBean = listBean;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
}
package com.mkk.goods.paper;
/*
 * 这个是表达式类,用于装各种条件的集合
 */
public class Expression {//表达式类
  private String name;
  private String operator;
  private String value;
public Expression() {
	super();
}
public Expression(String name, String operator, String value) {
	super();
	this.name = name;
	this.operator = operator;
	this.value = value;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getOperator() {
	return operator;
}
public void setOperator(String operator) {
	this.operator = operator;
}
public String getValue() {
	return value;
}
public void setValue(String value) {
	this.value = value;
}
@Override
public String toString() {
	// TODO Auto-generated method stub
	return super.toString();
}
}




你可能感兴趣的:(javaee,数据库)