Spring集成Hibernate步骤:

以Student对象为例:

1,编写domain;

Student类:

public class Student {
    private Long id;
    private String  name;
    private Integer age;
//此处省略getter和setter方法
}

2,编写映射文件;

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.gxxy.domain">
    <class name="Student">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
        <property name="age" />
    </class>
</hibernate-mapping>

3,编写Dao接口;

package com.gxxy.dao;

import java.util.List;

import com.gxxy.domain.Student;

public interface IStudentDAO {
    /**
     * 保存学生
     * 
     * @param st
     */
    void save(Student st);
    /**
     * 删除学生
     * 
     * @param st
     */
    void delete(Student st);
    /**
     * 更新学生信息
     * 
     * @param st
     */
    void update(Student st);
    /**
     * 获取单个学生信息
     * 
     * @param id
     */
    Student get(Long id);
    /**
     * 获取所有学生信息
     * 
     * @return
     */
    List<Student> list();

}

4,编写Dao实现   

①:拷贝jar包(hiberante中必须的包,数据库驱动,Spring的core,test,bean,context);

hibernate中所需要的包:

Spring中所需要的包:

②:Spring配置文件:

  1)-配置datasource;
    2)-添加并配置db.properties文件;

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        ">
    <!-- 加载配置文件内容 
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql:///test
    jdbc.username=root
    jdbc.password=root
    -->
    <context:property-placeholder location="db_propeties"/>
    <!-- 配置连接数据库的连接池   dataSource-->     
     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>     
</beans>

 3)配置sessionFactory
    1-导入Spring中的jar  jdbc/tx/orm;
    2-使用LocalSessionFactoryBean来创建SessionFactory;
      1.配置dataSource;
      2.配置hibernate的常规相关配置;
      3.配置映射文件(mappingDirectoryLocations)

    <!-- 配置一个SessionFactory -->   
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <!-- 配置连接数据库的信息 -->
        <property name="dataSource" ref="dataSource"></property>
    <!-- 配置hibernate的常规相关配置 -->
        <property name="hibernateProperties">
            <value>
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
            hibernate.hbm2ddl.auto=none
            hibernate.show_sql=true
            </value>
        </property>
    <!--
            配置*.hbm.xml的位置(告诉Spring我的*.hbm.xml在哪个包中) 
     注意:value值为路径
    -->
    <property name="mappingDirectoryLocations" value="com/gxxy/domain"></property>
    <!-- 配置多个映射文件的写法
    <property name="mappingDirectoryLocations">
            <list>
                <value>com/gxxy/ssh/proj/domain</value>
                <value>com/gxxy/ssh/proj/domain</value>
                <value>com/gxxy/ssh/proj/domain</value>
                <value>com/gxxy/ssh/proj/domain</value>
                <value>com/gxxy/ssh/proj/domain</value>
                <value>com/gxxy/ssh/proj/domain</value>
                <value>com/gxxy/ssh/proj/domain</value>
            </list>
    </property> -->
    </bean> 

 4)编写Dao:
     1,直接在Dao中注入一个SessionFactory;
     2,在Dao中直接使用SessionFactory.getCurrentSession()来得到我们需要的session;

package com.gxxy.dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.gxxy.dao.IStudentDAO;
import com.gxxy.domain.Student;

public class StudentDaoImpl implements IStudentDAO {

    private SessionFactory sessionFactory;

    // setter 注入
    public void setSessionFactory(SessionFactory session) {
        this.sessionFactory = session;
    }

    @Override
    public void save(Student st) {
        Session session = sessionFactory.getCurrentSession();
        session.save(st);
    }

    @Override
    public void delete(Student st) {
        Session session = sessionFactory.getCurrentSession();
        session.delete(st);
    }

    @Override
    public void update(Student st) {
        Session session = sessionFactory.getCurrentSession();
        session.update(st);
    }

    @Override
    public Student get(Long id) {
        Session session = sessionFactory.getCurrentSession();
        return (Student) session.get(Student.class, id);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Student> list() {
        Session session = sessionFactory.getCurrentSession();
        return session.createQuery("SELECT stu FROM Student stu").list();
    }

}

5)在Spring中配置Dao;

<!-- Dao -->    
    <bean id="dao" class="com.gxxy.dao.impl.StudentDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 

5,编写Service:
  1)编写service接口和实现;

  service 接口

package com.gxxy.service;

import java.util.List;

import com.gxxy.domain.Student;

public interface IStudentServiceDAO {
    /**
     * 保存学生
     * 
     * @param st
     */
    void save(Student st);
    /**
     * 删除学生
     * 
     * @param st
     */
    void delete(Student st);
    /**
     * 更新学生信息
     * 
     * @param st
     */
    void update(Student st);
    /**
     * 获取单个学生信息
     * 
     * @param id
     */
    Student get(Long id);
    /**
     * 获取所有学生信息
     * 
     * @return
     */
    List<Student> list();

}

service接口的实现

package com.gxxy.service.impl;

import java.util.List;

import com.gxxy.dao.IStudentDAO;
import com.gxxy.domain.Student;
import com.gxxy.service.IStudentServiceDAO;

public class StudnetServiceImpl implements IStudentServiceDAO {

    private IStudentDAO dao;

    // setter注入dao对象
    public void setDao(IStudentDAO dao) {
        this.dao = dao;
    }

    @Override
    public void save(Student st) {
        dao.save(st);
    }

    @Override
    public void delete(Student st) {
        dao.delete(st);

    }

    @Override
    public void update(Student st) {
        dao.update(st);
    }

    @Override
    public Student get(Long id) {
        return dao.get(id);
    }

    @Override
    public List<Student> list() {
        return dao.list();
    }

}

  2)在Spring中配置servicebean;

 <!-- service -->
    <bean id="service" class="com.gxxy.service.impl.StudnetServiceImpl">
        <property name="dao" ref="dao"></property>
    </bean>

  3)配置事务:
    1,配置transcationMaanager,使用HibernateTransactionManager,并传入一个sessionFactory;

<!-- 配置事务管理器 -->
    <bean id="txMgr" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    2,配置事务属性; 
    3,配置事务切面;

 <!-- 配置事务属性 -->
    <aop:config>
        <aop:pointcut expression="execution(* com.gxxy.service.*.*(..))" id="stuService"/>
        <aop:advisor advice-ref="advice" pointcut-ref="stuService"/>
    </aop:config>    
    <tx:advice id="advice" transaction-manager="txMgr">
        <tx:attributes>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="list*" read-only="true"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>

测试类:

package com.gxxy.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.gxxy.domain.Student;
import com.gxxy.service.IStudentServiceDAO;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml")
public class OperateStudentTest {
    @Autowired
    private IStudentServiceDAO service;
    @Test
    public void testSave() {
        service.save(new Student("张三", 18));
    }
    @Test
    public void testdelete() {
        Student student = new Student(5L);
        service.delete(student);
    }
    @Test
    public void testUpdate() {
        Student st = new Student("李四", 16);
        st.setId(8L);
        service.update(st);
    }
    @Test
    public void testget() {
        Student student = service.get(8L);
        System.out.println(student);
    }
    @Test
    public void testlist() {
        List<Student> list = service.list();
        System.out.println(list);
    }
}
原文地址:https://www.cnblogs.com/zhang-bo/p/6648569.html