当Spring遇到Hibernate的时候

开发 后端
本文介绍了Spring和Hibernate的简介,Spring和Hibernate基础和集成Sample。

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类完整的代码列举如下:

  1. package com.xxx.audit.pojo;  
  2. public class Activitylog {  
  3.     private String id;  
  4.     private String name;  
  5.     private String taskcode;  
  6.     private Timestamp tasktime;  
  7.     public Activitylog () {  
  8.     }  
  9.     public String getId(){   
  10.          return id;  
  11.     }  
  12.     public void setId(String id){  
  13.         this.id = id;  
  14.     }  
  15.     public String getName(){  
  16.         return name;  
  17.     }  
  18.     public void setName(String name){  
  19.         this.name = name;  
  20.     }  
  21.     public String getTaskcode(){  
  22.         return taskcode;  
  23.     }     
  24.     public void setTaskcode(String taskcode){  
  25.         this.taskcode = taskcode;  
  26.     }  
  27.     public Timestamp getTasktime(){  
  28.         return tasktime;  
  29.     }  
  30.     public void setTasktime(Timestamp tasktime){  
  31.         this.tasktime = tasktime;  
  32.     }  
  33.     public String toString(){  
  34.         return "Id = " + id + "Name = " + name + "Taskcode = "   
  35.             + taskcode + ", Tasktime = " + tasktime;  
  36.     }  

3.3.创建Hibernate Mapping 文件

我们已经在数据库中创建了'Activitylog' 表和一个在应用层相应的Java类 class,我们需要创建Hibernate Mapping文件去把'Activitylog' 表映射到'Activitylog' Java 类,'Activitylog' 表的列名映射到'Activitylog' Java 类的变量,可使用ant工具或plug-in产生,让我们看看Hibernate Mapping文件:

  1. Activitylog.hbm.xml   
  2. <?xml version="1.0"?> 
  3. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  5. <hibernate-mapping> 
  6.     <class name="com.xxxx.audit.pojo.activitylog" table=" activitylog "> 
  7.     <id name="id" column="Id"> 
  8.         <generator class="assigned"/> 
  9.     </id> 
  10.     <property name="name"> 
  11.         <column name="Name"/> 
  12.     </property> 
  13.     <property name="taskcode"> 
  14.         <column name="Taskcode"/> 
  15.     </property> 
  16.     <property name="tasktime"> 
  17.         <column name="Tasktime"/> 
  18.     </property> 
  19. </class> 
  20. </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如下:

  1. spring-hibernate.xml   
  2. <?xml version="1.0" encoding="UTF-8"?> 
  3. <beans xmlns="http://www.springframework.org/schema/beans" 
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6. http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
  7. <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" > 
  8.     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
  9.     <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> 
  10.     <property name="username" value="root"/> 
  11.     <property name="password" value="root"/> 
  12. </bean> 
  13. ?  
  14. </beans> 

上面bean定义了一个类型'org.apache.commons.dbcp.BasicDataSource'的data-source. 更重要的是, 它定义了各种访问数据库所需要的连接属性。

4.总结

    本文讨论了Spring 和Hibernate的集成。 既讨论了需求也讨论了它带来的好处。 通过一个详细的实例一步步清晰地演示了集成工作。

【编辑推荐】

  1. Spring.NET1.1.2发布
  2. Java的Spring框架概述
  3. 对于Struts和Spring两种MVC框架的比较
  4. Spring创始人:看衰Java EE
  5. 将Flex与Spring集成框架
责任编辑:佚名 来源: 中国IT实验室
相关推荐

2023-04-27 07:40:08

Spring框架OpenAI

2015-07-10 15:31:42

ITIoT物联网

2015-09-18 15:22:56

DCIMITSM

2020-05-19 07:57:20

PythonExcel大数据

2011-03-01 10:58:00

2014-04-14 10:21:15

开发运维DevOps

2010-09-01 15:42:39

DHCP SnoopiARP

2012-03-16 15:35:21

.netJava

2022-02-23 12:01:41

内部威胁数据泄露

2018-02-27 13:59:52

春节互联网直播

2010-04-29 14:33:01

Unix系统

2013-07-26 11:17:34

AdTime游戏大数据

2011-04-12 11:34:17

友元虚函数

2015-10-13 09:32:38

WiFi打卡考勤

2017-01-13 10:33:39

华为大数据

2024-06-11 12:38:12

2015-12-31 15:19:14

雾霾高性能英特尔

2019-06-24 16:30:33

区块链零知识证明比特币

2015-01-06 09:43:55

编程语言

2009-09-24 09:52:20

Spring Hibe
点赞
收藏

51CTO技术栈公众号