Spring整合Hibernate的方式比较灵活比较多样主要是在Spring提供的orgspringframeworkormhibernateLocalSessionFactoryBean中进行整合这个Bean提供了多种整合的方法
可以通过<property name=hibernateProperties>标签将hibernate的配置信息以property的方式写入
<property name=hibernateProperties>
<props>
<prop key=hibernatedialet>orghibernatedialectMySQLDialect</prop>
<prop key=nnectiondriver_class>commysqljdbcDriver</prop>
<prop key=nnectionurl>jdbc:mysql://localhost:/book</prop>
<prop key=nnectionusername>yuan</prop>
<prop key=nnectionpassword>hanyuan</prop>
<prop key=hibernateshow_sql>true</prop>
<prop key=nnectionautocommit>true</prop>
</props>
</property>
可以通过<property name=configLocation>标签直接读取hibernatecfgxml配置信息
<property name=configLocation>
<value>classpath:hibernatecfgxml</value>
</property>
可以通过<property name=dataSource>标签指定连接池连接池中有连接数据库的信息
<property name=dataSource>
<ref bean=myDataSource />
</property>
Spring整合Hibernate的步骤
一用以上三种方法之一配置Hibernate信息装配LocalSessionFactoryBean
<bean id=sessionFactory
class=orgspringframeworkormhibernateLocalSessionFactoryBean>
<property name=hibernateProperties>
<props>
<prop key=hibernatedialet>orghibernatedialectMySQLDialect</prop>
<prop key=nnectiondriver_class>commysqljdbcDriver</prop>
<prop key=nnectionurl>jdbc:mysql://localhost:/book</prop>
<prop key=nnectionusername>yuan</prop>
<prop key=nnectionpassword>hanyuan</prop>
<prop key=hibernateshow_sql>true</prop>
<prop key=nnectionautocommit>true</prop>
</props>
</property>
<property name=mappingResources>
<list>
<value>com/sunflower/entity/Sutdenthbmxml</value>
</list>
</property> </bean>
其中<property name=mappingResources>属性是配置映射文件的如果有很多映射文件要配置用这种方法就要为每个映射文件书写配置信息这样将会非常麻烦Spring的orgspringframeworkormhibernateLocalSessionFactoryBean提供了一个<property name=mappingDirectoryLocations>属性将所有配置文件放置到一个统一的地方就能一次性进行配置例如
<property name=mappingDirectoryLocations>
<list>
<value>classpath:com/sunflower/entity</value>
</list>
</property>
将一次性配置comsunflowerentity包下的所有映射文件
二装配orgspringframeworkormhibernateHibernateTemplate
<bean id=hibernateTemplate class=orgspringframeworkormhibernateHibernateTemplate>
<property name=sessionFactory>
<ref bean=sessionFactory />
</property>
</bean>
HibernateTemplate类是Spring提供给我们进行Hibernate持久层操作的类它对增删查改方法进行了封装通过这个类我们很方便就能操作数据库<property name=sessionFactory>标签配置LocalSessionFactoryBean
三装配自定义DAO
<bean id=studentDao class=comsunflowerdaoimpStudentDaoImp>
<property name=hibernateTemplate>
<ref bean=hibernateTemplate />
</property>
</bean>
为每个Dao的实现类配置一个HibernateTemplate然后在Spring配置文件中进行装配这样就可以使用这个HibernateTemplate进行持久层的操作了
StudentDaoImpjava:
public class StudentDaoImp extends StudentDaoAdapter {
@Override
public void saveStudent(Student student) {
thishibernateTemplatesave(student)
}
@Override
public Student getStudent(Student student) {
return thishibernateTemplateget(Studentclass studentgetSno())
} }
进行测试Testjava:
public class Test {
@orgjunitTest
public void saveStudent() {
ApplicationContext context = new ClassPathXmlApplicationContext(
applicationContextxml)
StudentDao studentDao = (StudentDao) contextgetBean(studentDao)
Student student = new Student()
studentsetCno()
studentsetName(喜爱啸)
studentsetScore()
studentDaosaveStudent(student)
} //
@orgjunitTest
public void getStudent() {
ApplicationContext context = new ClassPathXmlApplicationContext(
applicationContextxml)
StudentDao studentDao = (StudentDao) contextgetBean(studentDao)
Student student = new Student()
studentsetSno()
Student s = studentDaogetStudent(student)
Systemoutprintln(name: + sgetName())
} }
这里需要注意的是因为这里没有用到事务处理Hibernate默认是不会自动提交事务的所以刚开始测试的时候出现数据插入不了数据库的情况后来查了资料知道要将事务设置为自动提交才能将数据插入到数据库中这里只是为了测试就改了过来如顶上所写<prop key=nnectionautocommit>true</prop>