博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
经典JDBC DAOFactory类实现
阅读量:6152 次
发布时间:2019-06-21

本文共 2918 字,大约阅读时间需要 9 分钟。

hot3.png

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

转载于:https://my.oschina.net/ydsakyclguozi/blog/265351

你可能感兴趣的文章
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
416. Partition Equal Subset Sum
查看>>
app内部H5测试点总结
查看>>
[TC13761]Mutalisk
查看>>
while()
查看>>
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
bulk
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>