DAO例子1_Products

DAO(Data Access Object)
What: DAO是一个访问数据的类,包好了对数据的CRUD,而不包含业务相关的功能
Why: 实现了功能的模块化,降低耦合度
How: 编写一个类,包含了使用JDBC,以及CRUD函数。
在DAO组成部分上,大部分人有自己的见解,但大部分人都支持这两种:
①参照:https://blog.csdn.net/zonzereal/article/details/79099181

    DAO接口
    DAO实现类
    实体类
    数据库连接和关闭工具类

------
②参照:https://blog.csdn.net/wuyueyuljh/article/details/7561863

(1)数据库连接类;

  数据库连接类的主要功能是连接数据库并获得连接对象,以及关闭数据库。通过数据库连接类可以大大的简化开发,在需要进行数据库连接时,只需常见该类的实例,并调用其中的方法就可以获得数据库连接对象和关闭数据库,不必再进行重复操作。

(2)VO类:

  VO类是一个包含属性和表中字段完全对应的类,并在该类中提供setter和getter方法来设置并获取该类中的属性。

(3)DAO接口:

  DAO接口中定义了所有的用户操作,如添加记录、删除记录及查询记录等。不过因为是借口,所以仅仅是定义,需要子类实现。

(4)DAO实现类:

  DAO实现类实现了DAO接口,并实现了接口中定义的所有方法。

(5)DAO工厂类:

  在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作。这时就必须知道具体的子类,对于后期的修改非常不方便。

  使用DAO工厂类,可以比较方便地对代码进行管理,而且可以很好地解决后期修改的问题,通过该DAO工厂类的一个静态方法来获取DAO实现类实例。这时如果要替换DAO实现类,只需要修改该Dao工厂类中的方法代码,而不必邀修改所有的操作数据库代码。

例子:
+++++ 数据库连接和关闭工具类+++++

package util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
	static private DataSource ds=new ComboPooledDataSource();
	
	public static DataSource getDataSource() {
		return ds;
	}
	
	static public Connection getConnection() throws SQLException {

		 return ds.getConnection();
		
	}
}

//其实这个写的有个失误,我选择抛出异常,结果在之后的接口实现类中,遇到了很大的麻烦,我需要不厌其烦的进行异常处理;
+++++实体类(JavaBean)+++++

package cn.njit.orm;
public class Products {
	private int pid;
	private String pname;
	private double price;
	private int categoryId;
	public Products() {
		
	}
	public Products(int pid,String pname,double price,int categoryId) {
		super();
		this.pid=pid;
		this.pname=pname;
		this.price=price;
		this.categoryId=categoryId;
	}
	
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public int getCategoryId() {
		return categoryId;
	}
	public void setCategoryId(int categoryId) {
		this.categoryId = categoryId;
	}
	public String toString() {
		return pname+"-"+price;
	}
}

+++++ DAO接口+++++

package cn.njit.dao;

import java.util.List;

import cn.njit.entity.PageBean;
import cn.njit.orm.Products;
/***
 * 产品DAO接口
 * @author Liu
 *
 */
public interface IProductsDao {
	int addProducts(Products p);//增加一个Products对象
	int deleteProducts(int id);//删除一个Products对象
	int modifyProducts(Products p);//修改一个Products对象
	int countAll();//查看一共有多少条记录
	Products queryById(int id);//根据pid查询产品
	PageBean<Products> queryAll();//查询所有产品,返回一个界面
	List<Products>  queryByName(String name); //模糊查询
	List<Products>  queryByPrice(double priceBegin,double priceEnd);//价格查询
}

+++++ DAO实现类++++

package cn.njit.dao;

import java.sql.SQLException;
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 cn.njit.entity.PageBean;
import cn.njit.orm.Products;
import util.C3P0Utils;
/***
 * 产品dao实现类
 * @author Liu
 *
 */
public class ProductsDaoImpl implements IProductsDao {
	
	private QueryRunner  qr=new QueryRunner(C3P0Utils.getDataSource());
	
	
	@Override
	public int addProducts(Products p) {
		String sql="insert into products(pname,price,category_id) values(?,?,?)";
		int cnt = 0;
		try {
			cnt = qr.update(sql,p.getPname(),p.getPrice(),p.getCategoryId());
		} catch (SQLException e) {
			System.out.println("======");
			e.printStackTrace();
		}
		return cnt;
	}

	@Override
	public int deleteProducts(int id) {
		String sql="delete from products where pid='"+id+"'";
		int cnt = 0;
		
		try {
		cnt=qr.update(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return cnt;
	}

	@Override
	public int modifyProducts(Products p) {
		if(null!=queryById(p.getPid())) {
			String sql="Update products set pname=?,price=?,category_id=? where pid='"+p.getPid()+"'";
			Object[] o= {p.getPname(),p.getPrice(),p.getCategoryId()};		
			int cnt = 0;
			try {
				cnt = qr.update(sql,o);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				cnt=-1;
			}
			return cnt;
		}else {	
			System.out.println("没有这个记录");
			return 0;
		}

	}

	@Override
	public Products queryById(int id) {
		String sql="select * from products where pid=?";
		BeanHandler<Products> blh=new BeanHandler<Products>(Products.class);
		
		try {
			Products p=qr.query(sql, blh,id);
			return p;
		} catch (SQLException e) {	
			e.printStackTrace();
			return null;
		}	
	}

	@Override
	public List<Products> queryByName(String name) {
		String sql="select * from products where pname like (?)";
		BeanListHandler<Products> bhl=new BeanListHandler<Products>(Products.class);
		
		try {
			List<Products> list=qr.query(sql, bhl,"%"+name+"%");
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}	
	}

	@Override
	public List<Products> queryByPrice(double priceBegin, double priceEnd) {
		String sql="select * from products where price>? and price<?";
		Object[] o= {priceBegin,priceEnd};
		BeanListHandler<Products> blh=new BeanListHandler<Products>(Products.class);
		try {
			List<Products> list=qr.query(sql, blh,o);
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public PageBean<Products> queryAll() {
		PageBean<Products> page=new PageBean<Products>();
		page.setPageSize(5);
		String sql="select * from products";
		BeanListHandler<Products> bh=new BeanListHandler<Products>(Products.class);
		int total=countAll();
		try {
			List<Products> ps=qr.query(sql, bh);
			page.setData(ps);
			page.setTotal(total);
			page.setPageSize(5);
			page.setPageNumber(1);
			return page;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public int countAll() {
		ScalarHandler<Long> sh=new ScalarHandler<Long>();
		String sql="select count(1) from products";
		try {
			Long cnt=qr.query(sql, sh);
			return cnt.intValue();
		} catch (SQLException e) {
			e.printStackTrace();
			return -1;
		}	
	}

}

测试类:

package cn.njit.dao;

import java.util.Arrays;

import cn.njit.entity.PageBean;
import cn.njit.orm.Products;
/****
 * dao测试类 
 * @author Liu
 *
 */
public class TestDao {

	public static void main(String[] args) {
		IProductsDao dao = new ProductsDaoImpl();
		testaddProducts(dao);
		

	}

	static void testaddProducts(IProductsDao dao) {		
		Products p = new Products();
		p.setCategoryId(1);
		p.setPname("榔头");
		p.setPrice(2500);
		int cnt = dao.addProducts(p);
		if (cnt > 0) {
			System.out.println("增加产品成功");
		} else {
			System.out.println("增加产品失败");
		}
	}
	
	static void testdeleteProducts(IProductsDao dao) {
		int cnt=dao.deleteProducts(1003);
		if (cnt > 0) {
			System.out.println("删除产品成功");
		} else {
			System.out.println("删除产品失败");
		}
	}
	
	static void testqueryById(IProductsDao dao) {
		System.out.println(dao.queryById(1002));
	}
	
	static void testmodifyProducts(IProductsDao dao) {
		Products p2=new Products();
		p2.setPid(1003);
		p2.setCategoryId(5);
		p2.setPname("锤子");
		p2.setPrice(2500);
		System.out.println(dao.modifyProducts(p2));

	}
	
	static void testPageBean(IProductsDao dao) {
		PageBean<Products> page=dao.queryAll();
		int count = 0;
		for(Products product:page.getData()) {
			count++;
			System.out.println(count + "\t" + product.toString());
		}
		System.out.println("第" + page.getPageNumber() + "页;共" + page.getPageCount() + "页。");
		
	}
	
	static void testqueryByName(IProductsDao dao) {
		String name="i";
		System.out.println(Arrays.toString(dao.queryByName(name).toArray()));
		
	}
	static void testqueryByPrice(IProductsDao dao) {
		System.out.println(Arrays.toString(dao.queryByPrice(1000, 6000).toArray()));	
	}
}

猜你喜欢

转载自blog.csdn.net/AirTrioa/article/details/83117122
DAO