`
royzhou1985
  • 浏览: 250018 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDBC_DAO设计思想与搭建骨架, 结合Service层讲解DAO层的异常处理

    博客分类:
  • Java
阅读更多
类设计结构图


异常的处理通过一个继承自RuntimeException的异常处理类捕获,然后在Service层可以捕获,这样有个好处,如果是Jdbc实现的Dao,可能会抛出SQLException这个异常,但是如果是Hibernate实现的Dao,因为不存在SQLException,所以如果更改实现的方法的话会导致service层捕获异常的时候需要做相应的修改..

使用下面方法,用一个继承自RuntimeException的类,从而可以只修改实现类
package com.royzhou.exception;

public class DaoException extends RuntimeException {

	private static final long serialVersionUID = 2102076276311052301L;

	public DaoException() {
	}

	public DaoException(String message) {
		super(message);
	}

	public DaoException(Throwable cause) {
		super(cause);
	}

	public DaoException(String message, Throwable cause) {
		super(message, cause);
	}

}

//添加用户的方法
public void addUser(User user) {
		Connection conn = null;
		PreparedStatement ps = null;
		String sql = "";
		try {
			sql = "insert into user values (null,?,?,?,null)";
			conn = DbUtils.getConnection();
			ps = conn.prepareStatement(sql);
			int i = 1;
			ps.setString(i++, user.getUserName());
			ps.setString(i++, user.getLoginId());
			ps.setString(i++, user.getPassword());
			ps.executeUpdate();
		} catch(Exception e) {
                           //抛出异常DaoException
			throw new DaoException(e.getMessage(),e);
		} finally {
			DbUtils.close(ps);
			DbUtils.close(conn);
		}
	}


dao的获取通过一个单例工厂获得,通过一个daoConfig.properties可配置各个dao实现类,使得配置更加灵活

package com.royzhou.factory;

import java.io.InputStream;
import java.util.Properties;

import com.royzhou.dao.UserDao;

public class DaoFactory {
	
	private UserDao userDao = null;
	
	Properties prop = null;
	
	private static DaoFactory daoFactory = new DaoFactory();
	
	private DaoFactory() {
		prop = new Properties();
		InputStream is = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.properties");
		try {
			prop.load(is);
		} catch (Throwable e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public static DaoFactory getInstance() {
		return daoFactory;
	}
	
	public UserDao getUserDao() {
		String userDaoClass = prop.getProperty("userDao");
		try {
			userDao = (UserDao)Class.forName(userDaoClass).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return userDao;
	}
}

  • 大小: 22 KB
  • 大小: 13.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics