DAO模式学习。

在数据库访问中一种好的办法是单独利用一个模块来管理获得连接和构建sql语句的代码复杂性。DAO模式能够很好的完成这一工作的简单模式。

使用这种模式需要持久化的为每一种类型对象都编写一个类,即DAO类。

DAO模式的编写:

1.DAO接口:所有的DAO都从这里产生。

2.BaseDAO类,它为所有的DAO提供基础的实现。

3.DataSourceCache类,辅助类负责管理DataSource,并进行缓存。

4.DAOFactory ,创建各种DAO实现的工厂类。

5.DAOException,DAO运行时抛出的异常。

6需要使用的DAO类及其实现类。


目录如下:

代码如下:

1.DAO

<span style="white-space:pre">	</span>package mvcStudyVolidator.dao;

<span style="white-space:pre">	</span>import java.sql.Connection;

<span style="white-space:pre">	</span>public interface DAO {
	<span style="white-space:pre">	</span>public Connection getConnection() throws DAOException;
<span style="white-space:pre">	</span>}<span style="font-family: Arial, Helvetica, sans-serif;">.</span>
2.BaseDAO

package mvcStudyVolidator.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.sql.DataSource;

public class BaseDAO implements DAO {

	@Override
	public Connection getConnection() throws DAOException {
		
		DataSource dataSource = DataSourceCache.getInstance().getDataSource();
		try {
			return dataSource.getConnection();
		} catch(Exception e) {
			e.printStackTrace();
			throw new DAOException();
		}
	}
	
	protected void closeDBObject(ResultSet resultSet, Statement statement, Connection con) {
		if(resultSet != null ) {
			try {
				resultSet.close();
			} catch(Exception e) {
				e.printStackTrace();
				System.out.println("close resultSet failer");
			}
		}
		
		if(statement != null) {
			try {
				statement.close();
			} catch(Exception e) {
				e.printStackTrace();
				System.out.println("close statement failer");
			}
		}
		
		if(con !=null) {
			try {
				con.close();
			} catch(Exception e) {
				e.printStackTrace();
				System.out.println("close con failer");
			}
		}
	}

}
3.DataSourceCache

package mvcStudyVolidator.dao;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 * 
 * 单例模式实现一个数据库连接缓存
 *
 */
public class DataSourceCache {
	private static DataSourceCache instance ;
	private DataSource dataSource ;
	
	static {
		instance = new DataSourceCache();
	}
	
	private DataSourceCache() {
		Context context = null;
		try {
			context = new InitialContext();
			dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDataSource");
		} catch(NamingException e) {
			e.printStackTrace();
		}
	}
	
	public static DataSourceCache getInstance() {
		return instance ;
	}
	
	public DataSource getDataSource() {
		return dataSource ;
	}
	
	
}
4. DAOFactory

package mvcStudyVolidator.dao;

public class DAOFactory {
	public static ProductDAO getProduceDAO() {
		return new ProductDAOImpl();
	}
}
5.DAOException

package mvcStudyVolidator.dao;

public class DAOException extends Exception {
	
	private static final long serialVersionUID = 1921L;
	private String message ;
	
	public DAOException() {
		
	}
	public DAOException(String message) {
		this.message = message;
	}
	
	public String getMessage() {
		return message ;
	}
	
	public void setMessage(String message) {
		this.message = message ;
	}
	
	public String toString() {
		return message ;
	}

}
6productDAO

package mvcStudyVolidator.dao;

import java.util.List;

import mvcStudyVolidator.model.Product;

public interface ProductDAO extends DAO {
	List<Product> getProducts() throws DAOException ;
	void insert(Product product) throws DAOException ;
}

7.productDAOImpl

package mvcStudyVolidator.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import mvcStudyVolidator.model.Product;

public class ProductDAOImpl extends BaseDAO implements ProductDAO {
	
	//get products sql
	private static final String GET_PRODUCTS_SQL = "SELECT name, description, price FROM products";
	
	//insert db products sql
	private static final String INSERT_PRODUCT_SQL = "INSERT INTO products VALUES(?,?,?)" ;
	
	@Override
	public List<Product> getProducts() throws DAOException {
		List<Product> products = new ArrayList<Product>();
		Connection connection = null;
		PreparedStatement pStatement = null;
		ResultSet resultSet = null ;
		
		try {
			connection = getConnection();
			pStatement = connection.prepareStatement(GET_PRODUCTS_SQL);
			resultSet = pStatement.executeQuery();
			while(resultSet.next()) {
				Product product = new Product();
				product.setName(resultSet.getString("name"));
				product.setDescription(resultSet.getString("description"));
				product.setPrice(resultSet.getFloat("price"));
				System.out.println("price = " + product.getPrice());
				products.add(product);
			}
		} catch(SQLException e) {
			throw new DAOException("Errors geting products. " + e.getMessage());
		} finally {
			closeDBObject(resultSet, pStatement ,connection);
		}
		
		return products;
	}

	@Override
	public void insert(Product product) throws DAOException {
		Connection connection = null;
		PreparedStatement pStatement = null;
		try {
			connection = getConnection();
			pStatement = connection.prepareStatement(INSERT_PRODUCT_SQL) ;
			pStatement.setString(1, product.getName());
			pStatement.setString(2, product.getDescription());
			pStatement.setFloat(3, product.getPrice());
			pStatement.execute();
			System.out.println("proudctName is " + product.getName() + " ProductDescription is " + product.getDescription());
		} catch(SQLException e) {
			throw new DAOException("Error insert product " +e.getMessage() );
		} finally {
			closeDBObject(null,pStatement,connection);
		}
		
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值