JDBC: DAO(Data Access Objects) 设计模式及其实现类

DAO设计模式及其实现类DAO(Data Access Object ,数据访问对象)设计模式。设计访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO。作用:为了实现功能的模块化,更有利于代码的维护和升级。DAO由以下6部分组成在整个DAO中实际上都是以接口为操作标准的,即:客户端依靠DAO实现的接口进行操作,而服务端要将接口进行具体的实现。DAO由以下几个部分组成。1)、Databa
摘要由CSDN通过智能技术生成

DAO设计模式及其实现类

DAO(Data Access Object ,数据访问对象)设计模式。设计访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO。
作用:为了实现功能的模块化,更有利于代码的维护和升级。

DAO由以下6部分组成

在整个DAO中实际上都是以接口为操作标准的,即:客户端依靠DAO实现的接口进行操作,而服务端要将接口进行具体的实现。DAO由以下几个部分组成。
1)、DatabaseConnection数据库连接类: 专门负责数据库打开与关闭的类,即连接数据库并获取连接对象。
2)、VO实体类:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录,即包含属性和表中字段完全对应的类。
3)、DAO接口:主要定义操作的接口,定义一系列数据库的原子性操作,例如:增加、修改、删除、按ID查询等,即提供了用户所有的操作方法(就如老师给学生提供一些学习方法)。
4)、Impl(DAO实现类): DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭,即实现DAO中所有的方法(就如老师给提供的方法看你如何去完成);
5)、Proxy :代理实现类,主要完成数据库的打开和关闭,并且调用真实实现类对象的操作
6)、Factory(DAO工厂类):通过工厂类取得一个DAO的实例化对象,为程序提供方法,如果要替换DAO实现类,只需要修改该Dao工厂类中的方法代码,而不必邀修改所有的操作数据库代码(如代理人专门为需要的公司提供人才,也叫做服务层)。

1.BaseDAO抽象类

设计一个抽象类BaseDAO,这个类中封装了通用的方法,而不是针对某个具体类。

public abstract class BaseDAO {
   

	//通用的增删改方法---version 2.0(考虑上事务)
	public int testGeneralMethod(Connection conn, String sql, Object...args){
    //sql中占位符的个数与可变形参的个数相同
		
		PreparedStatement ps = null;
		try {
   
			
			//1.预编译sql语句,返回PreparedStatement的实例
			ps = conn.prepareStatement(sql);
			
			//2.填充占位符
			for(int i = 0 ; i<args.length ; i++){
   
				ps.setObject(i + 1 ,args[i]);
				
			}
			
			//3.执行,返回影响了几条记录
			return ps.executeUpdate();
		} catch (Exception e) {
   
			e.printStackTrace();
		} finally{
   
//					//4.恢复每次DML操作的自动提交功能
//					try {
   
//						conn.setAutoCommit(true);
//					} catch (SQLException e) {
   
//						e.printStackTrace();
//					}
			
			//5.关闭资源,Connection定义在外面就外面关,里面别关
			JDBCUtils.closeResource(null, ps);		
		}
		
		return 0;
	}
	
	
	//通用的查询操作,用于返回表中的一条记录(version 2.0,考虑上事务)
	public <T> T getInstance(Connection conn, Class<T> clazz, String sql, Object...args){
   
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
   
			
			
			ps = conn.prepareStatement(sql);
			
			//填充占位符
			for(int i=0 ; i < args.length ; i++){
   
				ps.setObject(i+1, args[i]);
			}
			
			rs = ps.executeQuery();
			//获取结果集的元数据:ResultSetMetaData
			ResultSetMetaData rsmd = rs.getMetaData();
			//通过ResultSetMetaData获取结果集中的列数
			int columnCount = rsmd.getColumnCount();
						
			if(rs.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值