读书人

怎么换数据库(未使用任何框架)

发布时间: 2012-11-06 14:07:00 作者: rapoo

如何换数据库(未使用任何框架)

?

因为之前使用的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就丑陋呢?

读书人网 >其他数据库

热点推荐