达梦 Hibernate Spring集成开发示例
2019-04-14 21:18 发布
生成海报
DM 是武汉华工达梦数据库有限公司推出的新一代高性能、高安全性的数据库产品。它具有开放的、可扩展的体系结构,高性能事务处理能力,以及低廉的维护成本。DM 是完全自主开发的数据库软件,其安全级别达到了国内所有数据库产品中的最高级---B1 级。在这里我准备用时下比较流行的开发工具,Hibernate 和Spring ,达梦数据库。以及MyEclipse 来完成一个简单的应用。
数据库采用达梦 5.0
1 、 用 达梦创建一个 test 数据库,再创建一个 user 表,再创建两个字段 username 和 password 。脚本如下
create database test datafile 'test.dbf' size 100;
set current database test
create login test identified by test123 default database test;
create user test related by test;
grant resource to test at test;
-m1i @ ~qE!}:V"_*iGuest 以上脚本为创建 test 数据库 ,并且创建一个登陆名为 test 密码是 test123
drop table xt_user;
create table xt_user(
user_id varchar(30) not null,
user_name varchar(20) not null,
user_pwd varchar(30) not null,
primary key(user_id)
);
2 、 打开 myeclipse 的 database explore 透视图,右键单击左侧的空白区域 ,点击 new 按钮
单击 “configure database driver” 来配置数据库的驱动。完成以后,做如下操作: :LB!D9EI8IGuest
然后测试数据库是否连接成功。
如果测试成功显示如下图
1 . 新建一个 web 项目 testSpring MyPlaces( 自我空间 自由展现 )+/3~s$yo6A2k,k} MyPlaces( 自我空间 自由展现 )&qU)g9t(y Y 2 . 引入 Spring 包
注意:这里为了省得以后再添加 spring 的相关包,所以一次性的选中了所有的包。选中 MyPlaces( 自我空间 自由展现 )"cT{C:@bG Copy 选项,它会把这些包拷贝到 /WebRoot/WEB-INF/lib 目录下,方便以后实际项目中的使用。其余选下一步,完成
3 . 添加 hibernate 包 MyPlaces( 自我空间 自由展现 )7C} Yxr__o 。
这时候,系统会检测到已经添加了 spring 包。 选择使用 Spring 的配置文件
点 next
点 next
这里 Dialect 先空着。点下一步
点完成
4 .由于达梦数据库不支持 Hibrnate Reverse Engineering ,在这里推荐使用 Hibernate Synchronizer 插件。下载以后直接接压到 eclipse 的 plug 文件夹下面就可以使用了。在工程上面右键点新建 -> 其它 ->
选择 Hibernate Configuration File 点下一步。
这里的 Database Type 先暂时不要选择(没有达梦数据库选项) , 点完成。
将 org.hibernate.dialect.DB2Dialect 更改为
org.hibernate.dialect.DMDialect 这个类的代码在达梦的帮助文档中可以找到。
5 .新建一个包 com.dm.vo 用来存放我们的实体类。
在新建 -> 其它
选择 Hibernate Mapping File 点下一步
点 Refresh 按钮以后会看到数据库中我们创建的 xt_user 表,然后选择放到刚
才我们建好的包里面,这样会看到生成了一个 xtUser.hbm.xml 的 hibernate 的映射文件。选中该文件点鼠标右键会看到 HibernateSynchronizer 选项。选择 Synchronizer File
会看到给我们生成了三个包,连 DAO 都帮我们生成了。还比较方便。
但是当和 Spring 整合时,会有一个小问题,就是 Hibernate Synchronizer 产生的 DAO , 有自己控制 Session 的方法,如果直接使用 Spring 的 HibernateTemplate ,那么 Hibernate Synchronizer 产生的那些 DAO 就变成没用处,反过来直接使用 Hibernate Synchronizer 产生的 DAO ,那么会变成自己要想办法管理 session ,就失去和 Spring 整合的方便,而如果混着用,那么 session 又变成不好控制。要解决这个问题就要修改 Hibernate Synchronizer 产生的 _BaseRootDAO ,让他直接 extends HibernateDaoSupport
public abstract class _BaseRootDAO extends HibernateDaoSupport {
...
protected Object load(Class refClass, Serializable key) {
log.debug("load " + refClass + " instance with id: " + key);
try {
// 使用 getHibernateTemplate() 去操作 DB 。
return getHibernateTemplate().load(refClass, key);
} catch (RuntimeException re) {
log.error("load failed", re);
throw re;
}
}
public java.util.List findBySQL(final String queryString, final String alias,
final Class refClass) {
log.debug("findBySQL queryString " + queryString);
return (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
SQLQuery sqlQ = session.createSQLQuery(queryString);
if (alias == null) {
sqlQ.addEntity(refClass == null ? getReferenceClass()
: refClass);
} else {
sqlQ.addEntity(alias, refClass == null ? getReferenceClass()
: refClass);
}
return sqlQ.list();
}
}, true);
}
按照以上这个原则修改代码。就可以和 spring 整和在一起,在 Spring 架构里面使用 Hibernate 就变的非常简单,下面先建立业务逻辑代码
"MyTestDAO" class= "com.dm.dao.MyTestDAO" >
"sessionFactory" >
"mySessionFactory" />
程序代码如下:
MyTestDAO mDao = (MyTestDAO)apcontext.getBean("MyTestDAO");
// 查询 用 native SQL
List list = mDao.findBySQL("select XtUser.* from XT_USER XtUser ","tss");
// 查询 用 HQL
List list = mDao.find("from XtUser");
// 新增
mDao.save(new XtUser ());
// 修改
mDao.saveOrUpdate(new XtUser ());
// 删除
mDao.delete(XtUser);
修改后 spring ,hibernate 就能够整和在一起 , 以上的方法只是一个比较简单的示例 , 应该有个 service 层用来提供服务。而 DAO 是具体的业务实现类。这样每层之间是松散偶合。为了简便起见就没有去编写 service 这一层。使用 HibernateSynchronizer 可以提高我们的开发效率。 MyEclipse 的 Hibernate 插件不支持达梦数据库自动生成映射文件。如果每个表都需要我们去逐个来编写映像文件是比较烦琐的工作。利用 HibernateSynchronize 能够较好的解决这个问题。提高开发的效率。
2007- 07 - 24 丁艺
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮