目前在写一个存数据到mysql的方法,写的时候在想这么一个问题,按照传统的getconnection和prestatement的做法,其实代码是和数据库绑定的,如果哪天换了一个数据库,这个代码就不能用了。
我认为在程序主逻辑里是不应该出现依赖特定数据库的类的,在主逻辑里应该就是打开数据库,拼接并执行sql,关闭数据库这么几步,并且针对所有数据库,代码都是相同的,要实现这个,就需要对数据库相关类进行封装,但这里有个问题,sql语句不是跨数据库通用的,如果要实现封装sql语句,那工作量比较大,目前java有没有按照这种想法设计的工具或者框架?比如说hibernate或者mybatis是不是有这样的功能?哪个比较好。
------解决思路----------------------
hibernate和mybatis可以了,只不过不同数据库配置不一样啊!!例如:数据库方言,驱动,主键生成方式等等;其他的框架搞定!!!
------解决思路----------------------
其实标准sql语句是数据库通用的,如果不使用一些数据库的特性的话,直接写标准sql就可以。
你的根本问题是写一套代码能够实现跨库(更换了数据库,不需要调整java代码),从这个层面上来说,hibernate是可以满足需要的;
单独写javaBean和映射配置文件是很麻烦,但有相关的工具可以直接通过数据库表生成javaBean和映射配置文件;
HQL对有些情况下的复杂查询是无能为力的,这个时候一般使用hibernate的原生SQL查询功能,原生SQL禁止使用特定数据库的特性就行了(比如mysql的limit,sqlServer的top,oracle的to_char等等);