;新建MySQLDAO文件夹,里面有UserDAOMySQL.java,AdminDAOMySQL.java,GoodDAOMySQL.java。这样,我们在实例化一个DAO的时候,比如是UserDAOMySQL。我们会这样做UserDAOMySQL dao=new UserDAOMySQL();但是当用户要求改用Oracle数据库的时候,我们就麻烦了,要把所有的实例化DAO改成对应的OracleDAO。这是一个很让人蛋疼的工作。
MySQLDAO.UserDAOMySQL",用师兄给的一个类Config
urationStaticFinal_lmodules_nodes.java,在里面配置如下代码“Public Static String userdao;userdao=CONF.findProperty("userdao");" 这样我们实例化数据库
DAO时就可以这样写
UserDAOMySQL
userdao=Class.forName
("Config
u
rationStaticFinal_lmodules_nodes
.userdao”)。这样又出现了一个问题,就是当配置文件中如果是MySQLDAO的话,是对的。如果是
OracleDAO的
配置路径,我们得到的就是UserDAOOracle,这样前面的定义就不对了。我们需要把MySQLDAO和OracleDAO抽象出一个接口。就是UserDAOInf.java,我们把不同表对应的接口统一写在InfDAO 的文件夹里。这样我们实例化DAO的时候就可以这么写了UserDAOInf userdao=Class.forName("ConfigurationStaticFinal _lmodules_nodes.
userdao").
So我们在更改数据库的时候,就只要把配置文件中的不同表对应的DAO路径改一下就可以了。事情到这一步我们的工作量可以说已经简化很多了,如果我们碰到上百个表的工程时,我们就要改动对应的上百个路径。下面,我们继续简化~~(用到java里的Factory方法)
这样我们在实例化DAO的时候就可以用这样的方法了zf.newuserdao()(zf是ZiFactory1的一个实例化对象)。同样OracleDAO文件夹下面也要对应写一个生产OracleDAO的ZiFactory()类。我们再把这个工厂类配置到那个配置(.properties)文件中.zFactory="XX.YY.MySQLDAO.ZiFactory1"
在ConfigurationStaticFinal
_lmodules_nodes.java中添加相应代码{
}
这时要实例化我们的DAO对象就可以这样来:
UserDAOInf userdao=
(
UserDAOInf)Class.forName(ConfigrationStaticFinal_lmodules_nodes.zFactory).newInstance().newuserdao();
这样便很好的解决了更改数据库的问题。只要修改配置文件中zFactory的属性就达到了更改数据库的问题。
好像问题又来了,我们每一次实例化DAO的时候都要写那么长的代码,不是很方便。我们可以进一步改写
增加一个ZiFactory的一个父类
Public Abstract Class
Factory(){
}
这样,我们在用到DAO的时候就可以这样实例化了