关于java的封装数据库

J2EE 码拜 6年前 (2015-07-18) 315次浏览

目前在写一个存数据到mysql的方法,写的时候在想这么一个问题,按照传统的getconnection和prestatement的做法,其实代码是和数据库绑定的,如果哪天换了一个数据库,这个代码就不能用了。
我认为在程序主逻辑里是不应该出现依赖特定数据库的类的,在主逻辑里应该就是打开数据库,拼接并执行sql,关闭数据库这么几步,并且针对所有数据库,代码都是相同的,要实现这个,就需要对数据库相关类进行封装,但这里有个问题,sql语句不是跨数据库通用的,如果要实现封装sql语句,那工作量比较大,目前java有没有按照这种想法设计的工具或者框架?比如说hibernate或者mybatis是不是有这样的功能?哪个比较好。

5分

#1

hibernate和mybatis可以了,只不过不同数据库配置不一样啊!例如:数据库方言,驱动,主键生成方式等等;其他的框架搞定!

#2

回复楼:

我后来查了查资料,hb的hql是跨数据库的,不过对复杂查询支持得不好,而且建模也很麻烦。mybatis的sql依然是各数据库的native sql,不通用

15分

#3

其实标准sql语句是数据库通用的,如果不使用一些数据库的特性的话,直接写标准sql就可以。
你的根本问题是写一套代码能够实现跨库(更换了数据库,不需要调整java代码),从这个层面上来说,hibernate是可以满足需要的;
单独写javaBean和映射配置文件是很麻烦,但有相关的工具可以直接通过数据库表生成javaBean和映射配置文件;
HQL对有些情况下的复杂查询是无能为力的,这个时候一般使用hibernate的原生SQL查询功能,原生SQL禁止使用特定数据库的特性就行了(比如mysql的limit,sqlServer的top,oracle的to_char等等);

#4

回复3楼:

有道理,可以参考参考


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于java的封装数据库
喜欢 (0)
[1034331897@qq.com]
分享 (0)