`
kevin_wanwei
  • 浏览: 117598 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

经典JDBC DAOFactory类实现

阅读更多
package ajax.user.language.factory.dao_factory;

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


/**
 * 这是我个人最近在学JDBC技术时:总结以前别人写过代码开发一个自己个人一个小工具(只针对初学者)
 * 该程序主要是读取配置文件来产生dao层实现对象(采用了反射技术);
 * 程序优点:(1)可以产生DAO层多种不同实现对象(返回Object对象需要强制转换)
 * 		   (2)在多线程模式下也只有一个工厂对象。
 *         (3)使用生产dao层实现对象,即使底层实现有JDBC成hibernate或者其他实现,不需要修改代码只需修改配置文件
 * @author kevin      Email:wanwei.234@163.com
 * 2010-01-09
 */
public class DaoFactory {
	/**工厂对象引用*/
	private static DaoFactory daoFactory=null;
	/**dao实现对象引用*/
	private static Object daoImpl=null;
	/**阻止new对象*/
	private DaoFactory(){}
	/**创建工厂对象*/
	public static DaoFactory getDaoFactoryInstance(){
		if(daoFactory==null){
			synchronized(DaoFactory .class){
			if(daoFactory==null){//如果没有这个判断,当两个线程同时访问这个方法会出现创建两个对象
				daoFactory=new DaoFactory();
		    }
		  }
		}
		return daoFactory;
	}
	/**
	 * 这是通过properties文件来产生dao实现类对象
	 * properti文件写法:userDao=ajax.user.language.entity.User(这是类的全名);
	 * 该方法返回的是一个Object对象,所以在使用时强制转换为你所需要的实现对象。
	 * @param key userDao
	 * @param filePath properties文件路径
	 * @return Object对象
	 */
	public Object produceDaoImpObject(String key,String filePath){
		try {
			Properties prop=new Properties();
			InputStream input=new FileInputStream(new File(filePath));
			prop.load(input);
			String daoClass=prop.getProperty(key);
			daoImpl=Class.forName(daoClass).newInstance();
		} catch (Exception e) {
			throw new ExceptionInInitializerError();
		}
		return daoImpl;
	}
	/**
	 *通过配置文件名称读取src目录的的配置文件
	 * @param key
	 * @return Object对象
	 */
	public Object produceDaoImpObjectOverFileName(String key,String FileName){
		try {
			Properties prop=new Properties();
			InputStream input=DaoFactory.class.getClassLoader().getResourceAsStream(FileName);
			prop.load(input);
			String daoClass=prop.getProperty(key);
			System.out.println(daoClass);
			daoImpl=Class.forName(daoClass).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			throw new ExceptionInInitializerError();
		}
		return daoImpl;
	}
}
 测试类:
package ajax.user.language.dao.impl;

import ajax.user.language.entity.Student;
import ajax.user.language.factory.dao_factory.DaoFactory;

public class Test {
	
	public static void main(String[] args) {
		DaoFactory daoFactory=DaoFactory.getDaoFactoryInstance();
		//StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObjectOverFileName("StudentDaoImpl","daoconfig.properties");
		//StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObject("StudentDaoImpl","D:\\newapps\\workspace\\ajax\\src\\daoconfig.properties");
	    StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObject("StudentDaoImpl","src/daoconfig.properties");
		Student s1=new Student();
		s1.setId("stu1");
		s1.setName("zhangsan");
		s1.setSex("F");
		try {
			stuImpl.addStudent(s1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

 配置文件:daoconfig.properties

StudentDaoImpl=ajax.user.language.dao.impl.StuDaoImpl

 

分享到:
评论

相关推荐

    基于JDBC实现的DAO

    基于JDBC实现的DAO(Data Access Object)是一种在Java编程中常见的数据访问模式,它用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦,提高了代码的可复用性和可维护性。以下是关于基于JDBC实现DAO的一些...

    tp-garage-2:TP车库实施jdbc,DAOFactory和EDT进行摆动

    "tp-garage-2: TP车库实施jdbc,DAOFactory和EDT进行摆动"这个项目显然是一个Java应用程序,它涉及到数据库访问、对象持久化以及线程安全的实现策略。 首先,让我们来了解这三个核心概念: 1. **JDBC(Java ...

    jdbc操作oracle数据库(增删改查)

    下面将详细介绍如何使用JDBC来实现增删改查操作。 首先,需要了解JDBC的基本概念。JDBC是一种Java API,用于连接和操作关系数据库。它提供了统一的接口来访问不同的关系数据库管理系统。 在本例中,我们使用Oracle...

    jdbc操作oracle数据库(增删改查).docx

    DAO 接口定义了数据访问接口,DAO 实现类实现了 DAO 接口,而工厂类负责创建 DAO 实现类的实例。 五、示例代码 以下是使用 JDBC 操作 Oracle 数据库的示例代码: ```java // DAO 工厂类 public class DAOFactory ...

    jsp+jdbc+servlet登陆完整程序和注解.doc

    在这个系统中,`loginDao`接口定义了登录验证的方法,而`loginDaoImp`是其实现类,负责具体的数据库查询操作。 5. DAOFactory:工厂模式的实现,`DAOFactory`类提供了一个静态方法`getLoginDAOInstance()`,用于...

    J2EE-JDBC学习笔记

    ClassLoader classLoader = DaoFactory.class.getClassLoader(); // 加载配置文件为字节流 InputStream resourceStream = classLoader.getResourceAsStream("daoconfig.properties"); ``` 以上知识点涵盖了J2EE环境...

    Java Web程序设计_图书借阅网站的实现——图书借还实验.docx

    - **图书借还功能**:通过Servlet作为控制器,接收到用户的请求,然后调用对应的DAO实现类,通过JDBC与数据库进行交互,完成图书的借阅和归还操作。 - **界面设计**:使用JSP创建用户界面,如管理员导航条...

    Java Web程序设计——图书借阅网站的实现——图书信息实验.docx

    同时,还需要定义实体类(如BookInfo和BookType)来表示图书信息和类型,以及对应的DAO接口和实现类,如bookInfoDAO和bookTypeDAO,用于执行CRUD(Create, Read, Update, Delete)操作。此外,配置文件web.xml用于...

    一个经典的数据库访问层实现

    在本案例中,我们讨论的是一个经典的数据库访问层实现,这通常涉及到面向对象的设计模式,如工厂模式、单例模式以及数据访问对象(DAO)模式。以下是对这个主题的详细解释: 1. 数据访问对象(DAO)模式:DAO模式是...

    万能javaweb DAO

    2. **实现类**:接着,为每个接口编写实现类,这些类具体实现了接口中定义的方法,包含了与数据库交互的逻辑,通常使用JDBC或者ORM框架(如Hibernate、MyBatis)来完成。 3. **工厂类**:然后是工厂类,它负责根据...

    第5章DAO设计模式[定义].pdf

    4. DAO实现类:DAO实现类实现了DAO接口,提供了具体的数据库操作实现。比如`UserDAOImpl.java`类会实现`UserDAO`接口中的所有方法,通过JDBC或ORM框架(如Hibernate)来与数据库进行交互。 5. DAO工厂类:DAO工厂类...

    第5章_DAO设计模式[定义].pdf

    4. **DAO实现类**:DAO实现类实现了DAO接口中的抽象方法,提供了具体的数据库操作实现。这些实现通常会使用数据库连接类获取连接,然后执行SQL语句来执行增删改查操作。例如,`UserDAOImpl.java`类会实现`UserDAO`...

    Java Web程序设计——图书借阅网站的实现——读者信息实验.docx

    此外,还有实体类(如readerinfo.java、readertype.java)来封装数据,DAO接口(如ReaderInfoDAO.java、ReaderTypeDAO.java)和实现类(如ReaderInfoDAOImpl.java、ReaderTypeDAOImpl.java)来处理数据库操作。...

    DAO涉及模式实例,源码

    这些方法的具体实现则由具体的DAO实现类完成,通常每个数据库表对应一个DAO实现类。这样,当需要更改数据库访问方式时,只需要替换实现类,而无需修改调用DAO的业务逻辑代码。 例如,我们有一个`User`实体类,对应...

    DAO抽象工厂

    在这个例子中,`UserService`类通过`DAOFactory`获取`UserDAO`实例,根据配置可以选择使用`MySQLUserDAO`或`OracleUserDAO`。这种方式使得`UserService`无需关心具体的DAO实现,只需关注业务逻辑。

    dao设计模式(1)

    接着,我们需要为这个接口创建一个实现类,通常会根据实际的数据访问技术(如JDBC、Hibernate或MyBatis)来实现。例如,UserDAOImpl类可能会使用JDBC来实现上述接口: ```java public class UserDAOImpl implements...

    java课程设计报告--javadao模式设计.docx

    表现层负责用户交互,业务逻辑层处理业务规则,而数据访问层则通过DAO接口和其实现类来与数据库进行交互。 2. **DAO组成**:DAO模式的核心是DAO接口和其实现类。DAO接口定义了一组操作数据的方法,如增删改查,而...

    java-DAO分层解析.pdf

    业务层接口的实现类(通常位于相应的`service.impl`子包)会调用DAO层的接口来执行数据操作。 **工厂类(DAOFactory)** 为了在业务层中获取DAO对象,我们可以使用工厂设计模式。DAOFactory位于`factory`子包,负责...

Global site tag (gtag.js) - Google Analytics