这一篇记录Spring与Hibernate结合使用的例子
还是以一个demo来说明:
1、首先建立数据库,新建数据库,名称为hibernate_spring,然后在数据库中建表person,包含两个字段:id与name,person表的结构如下图所示:
2、建立Java工程,由于这里暂时没有整合struts2,所以建立普通的Java工程就行了,这里我们给工程取名为HibernateSpring03
3、给工程加入Spring,在工程上右键--->MyEclipse--->Add Spring Capabilities...,出现如下所示界面:
这里我们选择上图中的三个库,然后next,如下图所示:
直接finish,Spring的添加就告一段落了
4、给工程加入Hibernate支持,还是在工程上右键--->MyEclipse--->Add Hibernate Capabilities...,出现如下图所示界面:
这里我们直接next,如下图所示:
注意这里选择Spring的配置文件,而不选Hibernate的配置文件,因为Hibernate和Spring整合了之后,Hibernate的配置文件就不需要了,直接在Spring的配置文件里配置相关的数据库信息就可以了,选择next后如下图所示:
这里我们选择已存在的Spring配置文件,然后next,如下图所示:
在上图中填入数据库的相关配置,MySQL的配置信息就是上面这些了,然后next,如下图所示:
取消勾选后点击finish,这时候Hibernate和Spring的添加算是完成了,但是工程里会报错,如下图所示:
这是由于Spring依赖的两个jar包还没有导入进来,分别是commons-dbcp-1.4.jar和commons-pool-1.6.jar,我们在工程上右键,build path,configure build path,然后在下图所示的界面中,加入这两个包
注意,除了上面两个jar包外,还有一个数据库的驱动jar包,也要加入进来,都添加完成后,我们clean一下工程,就不会报错了,现在的项目结构如下图所示:
5、编写代码。
首先是Person类的代码,Person类是一个标准的Java bean,代码很简单,如下所示:
package com.test.model;
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}
}
然后是dao的代码,对于Person的操作,有插入数据库和从数据库获取这两个,PersonDao接口里声明了这两个操作方法,如下代码所示:
package com.test.dao;
import com.test.model.Person;
public interface PersonDao {
void insertPerson(Person person);
Person getPerson(int id);
}
下面为PersonDao编写实现类PersonDaoImpl,代码如下:
package com.test.dao.impl;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.test.dao.PersonDao;
import com.test.model.Person;
public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {
@Override
public void insertPerson(Person person) {
this.getHibernateTemplate().save(person);
}
@Override
public Person getPerson(int id) {
return this.getHibernateTemplate().get(Person.class, id);
}
}
上面的代码需要注意的是,PersonDaoImpl类不仅实现了PersonDao接口,而且继承了HibernateDaoSupport类,该类中的getHibernateTemplate()方法返回一个HibernateTemplate对象,可以使用该对象实现对数据库的访问,而不是像Hibernate中,通过Session和Transaction来访问了
下面要为Person类编写hbm文件,Person.hbm.xml的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.test.model.Person" table="person">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="string"></property>
</class>
</hibernate-mapping>
这里跟之前在Hibernate中的没什么区别。
下面要编写applicationContext.xml配置文件,在之前,MyEclipse已经为我们生成了部分applicationContext.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" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/hibernate_spring">
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/test/model/Person.hbm.xml</value>
</list>
</property>
</bean>
<bean id="personDao" class="com.test.dao.impl.PersonDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
在上面的代码中,我们自己添加的内容主要是下图中标注的部分:
然后可以编写测试代码了,如下所示:
package com.test;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.test.dao.PersonDao;
import com.test.model.Person;
public class Test {
public static void main(String[] args) {
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(
"src\applicationContext.xml");
PersonDao personDao = (PersonDao) context.getBean("personDao");
Person person = new Person();
person.setName("Jack");
personDao.insertPerson(person);
}
}
测试代码通过加载配置文件,然后取出了配置文件中名称为personDao的类,通过该类保存了一个Person对象,控制台打印如下:
可以看到,数据插入到了数据库中,到这里基本上就是Hibernate和Spring整合的demo的全部过程了,下面我总结在整合过程中注意的问题:
①整合时要注意不能忘了添加三个jar包,分别是:
MySQL数据库驱动jar包、commons-dbcp-1.4.jar、commons-poor-1.6.jar
②applicationContext.xml配置文件中,对Person.hbm.xml文件的映射,应该写全路径,因为我们的Person.hbm.xml文件放在com.test.model下,所以映射标签写法为:
<property name="mappingResources">
<list>
<value>com/test/model/Person.hbm.xml</value>
</list>
</property>
③applicationContext.xml文件放在src目录下,所以在测试代码中,读取配置文件应该传"src\\applicationContext.xml"
以上就是我学习Hibernate与Spring整合的笔记
源代码及jar包下载