您好,登录后才能下订单哦!
如何进行Spring和Hibernate的集成,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
1.介绍
最近我参与了北美一家银行的审计系统的后台软件设计和开发工作,除了使用Web Service以外,我们集成了Spring和Hibernate,通过Spring的HibernateTemplate实现了对数据库数据的存取。众所周知Hibernate是一种广泛应用的一种强大的数据持久层技术, 另一方面Spring作为支持IOC的依赖注入框架,其优点是能够非常好地集成大多数主流技术。 本文我们将讨论如何集成 Spring 和Hibernate.
2.Spring和Hibernate基础
在我们实际进入集成这两个技术之前,让我们理解这种集成需求,大家都知道Hibernate是一种位于应用和数据库之间的强大的ORM 工具。 它可使应用以独立平台的方式从各种数据库访问数据,对应用来说没有必要依赖于低级DBC 细节如管理连接, 处理statements 和result sets. 所有访问特定数据源的细节很容易在Xml文件中配置,另一个好处是Hibernate和J2SE和J2EE应用兼容得很好。
使用Hibernate 问题之一是使用Hibernate Framework访问数据库的客户应用必须依赖Hibernate APIs如Configuration, SessionFactory and Session. 这些个对象在应用代码中持续扩散。而且应用代码必须用手工维护和管理这些对象。但是在Spring的环境,业务对象通过IOC的帮助下是能够通过配置完成的,简单地说,一个对象状态能够从应用代码中分离。意思是现在使用Hibernate 对象作为Spring Beans是可能的,他们能够得到Spring提供的所有方便。
3.集成Sample
我们没有打算研究Spring包里集成的各种API,我们想通过实例源码来学习和理解这些APIs. 下列部分包括了集成Spring-Hiberante 的每个步骤并附有详细的解释。
3.1.创立数据库
下面的应用使用Oracle数据库。 安装后, 先用管理员身份登录和创建用户schema,username and password,再以用户身份登录后去SQL command 或SQL Script运行以下SQL statement :create table Activitylog(id varchar(10), name varchar(20), taskcode varchar(3), tasktime timestamp);现在一个空表已创立。
3.2.ActivityLog类
现在让我们创建叫做Activitylog POJO代码用于存储从Activitylog表取出的数据,此类的设计使表'Activitylog'的列名将被映射到Java类Activitylog适当类型的变量名。 可使用ant工具或plug-in产生,Activitylog类完整的代码列举如下:
package com.xxx.audit.pojo;
public class Activitylog {
private String id;
private String name;
private String taskcode;
private Timestamp tasktime;
public Activitylog () {
}
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getTaskcode(){
return taskcode;
}
public void setTaskcode(String taskcode){
this.taskcode = taskcode;
}
public Timestamp getTasktime(){
return tasktime;
}
public void setTasktime(Timestamp tasktime){
this.tasktime = tasktime;
}
public String toString(){
return "Id = " + id + ", Name = " + name + ", Taskcode = "
+ taskcode + ", Tasktime = " + tasktime;
}
}
3.3.创建Hibernate Mapping 文件
我们已经在数据库中创建了'Activitylog' 表和一个在应用层相应的Java类 class,我们需要创建Hibernate Mapping文件去把'Activitylog' 表映射到'Activitylog' Java 类,'Activitylog' 表的列名映射到'Activitylog' Java 类的变量,可使用ant工具或plug-in产生,让我们看看Hibernate Mapping文件:
Activitylog.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.xxxx.audit.pojo.activitylog" table=" activitylog ">
<id name="id" column="Id">
<generator class="assigned"/>
</id>
<property name="name">
<column name="Name"/>
</property>
<property name="taskcode">
<column name="Taskcode"/>
</property>
<property name="tasktime">
<column name="Tasktime"/>
</property>
</class>
</hibernate-mapping>
注意映射文件是一个Xml文件并且它的名字是Activitylog.hbm.xml. 文件名中'hbm' 代表它是Hibernate映射文件。 class 标记定义了数据库表和Java类之间的映射。 'name' 属性必须指向一个全路径的Java类名,反之表属性必须指向数据库表,接下来的标记定义了列名和对应java变量之间的映射,'id' 标记作为主键定义了一行的标识,property标记有一个属性叫'name' 指向Java变量名, 接下来的是它映射的数据库表的列名。
3.4.创立Spring配置文件
这部分处理配置各种Spring需要的信息。 在Spring全部的业务对象在Xml文件中配置,配置的业务对象叫做 Spring Beans.这些Spring Beans可通过IOC维护,让我们定义一个data source如下:
spring-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
?
</beans>
上面bean定义了一个类型'org.apache.commons.dbcp.BasicDataSource'的data-source. 更重要的是, 它定义了各种访问数据库所需要的连接属性。
关于如何进行Spring和Hibernate的集成问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。