如何换数据库(未使用任何框架)
?
因为之前使用的mysql 现在想转为Oracle实现
如何改能降低最大的工作量
DaoFactory 类 里面组合了 Dao的实例
ServiceFactory 类 里面 组合了 Service实例
?ps:这两个类不算工厂类 应将类名Factory改成Contextg更合适
具体下面贴代码
?
?
?
public class DaoFactory { private static IAccountDao accountDao ; private static IAffairDao affairDao ; private static IStateDao stateDao ; private static IPersonnelDao personnelDao ; private static IAnnouncementDao announcementDao; private static IStatDao statDao; private static IDepartmentDao departmentDao ; private static IPositionDao positionDao ; private static IInformationDao informationDao ; private static IDaysDao daysDao ; private static IWeekDao weekDao ; private static IWorkContentDao workContentDao ; private static IEmployeeManageDao employeeManageDao; private static IHolidayDao holidayDao ; private static IHolidayTypeDao holidayTypeDao ; private static IMessageDao messageDao ; static{ //读取配置文件 获得数据库类型 //下面实例化 if(TYPE==mysql ){ // 实例化 IAccountService accountService = new AccountServiceImpl(); ... }else if(TYPE==oracle ){ IAccountService accountService = new AccountServiceOracleImpl(); ... } } public static IMessageDao getMessageDao() { return messageDao; } public static IAccountDao getAccountDao() { return accountDao; } public static IAffairDao getAffairDao() { return affairDao; } public static IStateDao getStateDao() { return stateDao; } public static IPersonnelDao getPersonnelDao() { return personnelDao; } public static IAnnouncementDao getAnnouncementDao() { return announcementDao; } public static IStatDao getStatDao() { return statDao; } public static IDepartmentDao getDepartmentDao() { return departmentDao; } public static IPositionDao getPositionDao() { return positionDao; } public static IInformationDao getInformationDao() { return informationDao; } public static IDaysDao getDaysDao() { return daysDao; } public static IWeekDao getWeekDao() { return weekDao; } public static IWorkContentDao getWorkContentDao() { return workContentDao; } public static IEmployeeManageDao getEmployeeManageDao() { return employeeManageDao; } public static IHolidayDao getHolidayDao() { return holidayDao; } public static IHolidayTypeDao getHolidayTypeDao() { return holidayTypeDao; } } 但是却有if else 破坏了封装性
3 楼 F.B.I 2009-12-18 如果你要换数据库首先如果有框架ibtais你肯定不要选,hibernate对数据量不大的情况下还是可行
另外 spring jdbcTemple自己封装下也一般可行,如果不选任何框架,那只有自己封装了,我个人愚见,项目里使用spring还是不错的,最起码new这个词在我的代码里,看不到的,感觉极其丑陋。 4 楼 vvggsky 2009-12-18 重新实现DAO,然后再DAOFactory里面修改获取代码 5 楼 ysen 2009-12-18 spring 的bean 配置太多了也烦啊 6 楼 Nightlee 2009-12-18 不知道楼主想问什么,现在的代码已经是接口依赖了,替换DAO实现是很自然的事情,难道LZ是想不该daoimpl来实现? 7 楼 freespace521 2009-12-18 LZ 看下 spring 的scan 扫描 就不用写那么多配置了 8 楼 Kensai 2009-12-18 DAO都没有用接口直接写的类?没有框架的情况下,直接替换实现是理所当然的吧。
像楼主这样,我完全看不出如果有方言冲突的DAO实现你如何解决?
而且即便以前没用数据库方面的框架,替换数据库DAO以后用Digest把DAO实现和Service实现用配置的方式拼装起来不是更简单吗?
要隔离数据库这一层,没有注入实在想不出能够在不改代码的情况下有很好的办法。
9 楼 mikeandmore 2009-12-19 不支持,会有很多code duplication 10 楼 myworkfirst 2009-12-19 1.把数据库连接串放在xml里
2.把数据库操作的sql语句放在xml里。 如果是A数据库,就调用a_sql.xml,如果是b数据库,就调用b_sql.xml
这样可适配,挺方便,对程序代码无影响 11 楼 bigkai13 2009-12-19 说说我的思想,如果不使用框架,那就自己写一个数据库的XML配置文件。如果你使用了存储过程或者某种厂商特定的SQL语言,那么你就的改代码了 12 楼 kjj 2009-12-19 datasource+facade+daoImpl 这样行了吧!! 13 楼 antD 2009-12-20 呵呵,我只觉得主要是数据库里的存储过程,和函数可能要改.其他的可能改动很少.像分页,连库串,驱动.如果分装的好改动不会太大. 14 楼 hjw622979 2009-12-21 重写DaoFactory,如果用Spring简单些 15 楼 tibetjungle 2009-12-21 底层数据库切换,主要是对DAO层的影响。现在lz要从Mysql切换到Oracle,如果dao写中使用的sql脚本在Mysql和Oracle都适用,就不存在切换的障碍。
如果dao中写了一些mysql专用的代码,直接修改就可以了啊。其实用框架也存在类似需要修改代码的问题啊(特别是Ibatis)。no silver bullet. 16 楼 hz86655032 2009-12-31 关键看你DAOIMPL是怎么实现的,一般用hibernate之类的框架你就改改DATASOURCE就可以了.你要是手动JDBC实现的DAOIMPL,那只能自己再手动写套ORACLE的实现了. 17 楼 ssuupv 2009-12-31 spring 可以零配置了 18 楼 ysen 2010-01-04 想想用反射加配置文件的方法 19 楼 mercyblitz 2010-03-22 F.B.I 写道如果你要换数据库首先如果有框架ibtais你肯定不要选,hibernate对数据量不大的情况下还是可行
另外 spring jdbcTemple自己封装下也一般可行,如果不选任何框架,那只有自己封装了,我个人愚见,项目里使用spring还是不错的,最起码new这个词在我的代码里,看不到的,感觉极其丑陋。
为啥new就丑陋呢?