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(Data Access Object)是一种在Java编程中常见的数据访问模式,它用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦,提高了代码的可复用性和可维护性。以下是关于基于JDBC实现DAO的一些...
"tp-garage-2: TP车库实施jdbc,DAOFactory和EDT进行摆动"这个项目显然是一个Java应用程序,它涉及到数据库访问、对象持久化以及线程安全的实现策略。 首先,让我们来了解这三个核心概念: 1. **JDBC(Java ...
下面将详细介绍如何使用JDBC来实现增删改查操作。 首先,需要了解JDBC的基本概念。JDBC是一种Java API,用于连接和操作关系数据库。它提供了统一的接口来访问不同的关系数据库管理系统。 在本例中,我们使用Oracle...
DAO 接口定义了数据访问接口,DAO 实现类实现了 DAO 接口,而工厂类负责创建 DAO 实现类的实例。 五、示例代码 以下是使用 JDBC 操作 Oracle 数据库的示例代码: ```java // DAO 工厂类 public class DAOFactory ...
在这个系统中,`loginDao`接口定义了登录验证的方法,而`loginDaoImp`是其实现类,负责具体的数据库查询操作。 5. DAOFactory:工厂模式的实现,`DAOFactory`类提供了一个静态方法`getLoginDAOInstance()`,用于...
ClassLoader classLoader = DaoFactory.class.getClassLoader(); // 加载配置文件为字节流 InputStream resourceStream = classLoader.getResourceAsStream("daoconfig.properties"); ``` 以上知识点涵盖了J2EE环境...
- **图书借还功能**:通过Servlet作为控制器,接收到用户的请求,然后调用对应的DAO实现类,通过JDBC与数据库进行交互,完成图书的借阅和归还操作。 - **界面设计**:使用JSP创建用户界面,如管理员导航条...
同时,还需要定义实体类(如BookInfo和BookType)来表示图书信息和类型,以及对应的DAO接口和实现类,如bookInfoDAO和bookTypeDAO,用于执行CRUD(Create, Read, Update, Delete)操作。此外,配置文件web.xml用于...
在本案例中,我们讨论的是一个经典的数据库访问层实现,这通常涉及到面向对象的设计模式,如工厂模式、单例模式以及数据访问对象(DAO)模式。以下是对这个主题的详细解释: 1. 数据访问对象(DAO)模式:DAO模式是...
2. **实现类**:接着,为每个接口编写实现类,这些类具体实现了接口中定义的方法,包含了与数据库交互的逻辑,通常使用JDBC或者ORM框架(如Hibernate、MyBatis)来完成。 3. **工厂类**:然后是工厂类,它负责根据...
4. DAO实现类:DAO实现类实现了DAO接口,提供了具体的数据库操作实现。比如`UserDAOImpl.java`类会实现`UserDAO`接口中的所有方法,通过JDBC或ORM框架(如Hibernate)来与数据库进行交互。 5. DAO工厂类:DAO工厂类...
4. **DAO实现类**:DAO实现类实现了DAO接口中的抽象方法,提供了具体的数据库操作实现。这些实现通常会使用数据库连接类获取连接,然后执行SQL语句来执行增删改查操作。例如,`UserDAOImpl.java`类会实现`UserDAO`...
此外,还有实体类(如readerinfo.java、readertype.java)来封装数据,DAO接口(如ReaderInfoDAO.java、ReaderTypeDAO.java)和实现类(如ReaderInfoDAOImpl.java、ReaderTypeDAOImpl.java)来处理数据库操作。...
这些方法的具体实现则由具体的DAO实现类完成,通常每个数据库表对应一个DAO实现类。这样,当需要更改数据库访问方式时,只需要替换实现类,而无需修改调用DAO的业务逻辑代码。 例如,我们有一个`User`实体类,对应...
在这个例子中,`UserService`类通过`DAOFactory`获取`UserDAO`实例,根据配置可以选择使用`MySQLUserDAO`或`OracleUserDAO`。这种方式使得`UserService`无需关心具体的DAO实现,只需关注业务逻辑。
接着,我们需要为这个接口创建一个实现类,通常会根据实际的数据访问技术(如JDBC、Hibernate或MyBatis)来实现。例如,UserDAOImpl类可能会使用JDBC来实现上述接口: ```java public class UserDAOImpl implements...
表现层负责用户交互,业务逻辑层处理业务规则,而数据访问层则通过DAO接口和其实现类来与数据库进行交互。 2. **DAO组成**:DAO模式的核心是DAO接口和其实现类。DAO接口定义了一组操作数据的方法,如增删改查,而...
业务层接口的实现类(通常位于相应的`service.impl`子包)会调用DAO层的接口来执行数据操作。 **工厂类(DAOFactory)** 为了在业务层中获取DAO对象,我们可以使用工厂设计模式。DAOFactory位于`factory`子包,负责...