Spring5整合Hibernate5

一、概述

  Spring整合Hibernate有什么好处?
     1、由IOC容器来管理Hibernate的SessionFactory
     2、让Hibernate使用上Spring的声明式事务

二、整合步骤:

  步骤一:导包
    创建Maven项目SpringHibernate,并导入数据库驱动包、Hibernate开发包以及Spring开发包,完成后项目的pom.xml文件内容如下:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
   
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.3.6.Final</version>
</dependency>
   
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.3.6.Final</version>
</dependency>
   
<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc6</artifactId>
  <version>11.2.0.4</version>
</dependency>
   
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
步骤二:创建Hibernate配置文件
   <session-factory>
        <!-- 配置Hibernate的基本属性:方言,SQL显示及格式化,生成数据表的策略以及二级缓存 -->
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
    </session-factory>
 
注意:   <!-- 1.数据源配置到Spring的IOC容器中 -->
        <!-- 2.关联的.hbm.xml也在IOC容器配置SessionFactory实例 -->
步骤三:创建实体类及其映射文件:
       
    package com.cn.pojo;
   public class Book {
     private Integer id;
     private String bookName;
     private String isbn;
     private int price;
     private int stock;
        ...省略set/get方法...
  }
Book.hbm.xml文件
  <hibernate-mapping>
    <class name="com.cn.pojo.Book" table="TB_BOOK">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="bookName" type="java.lang.String">
            <column name="BOOKNAME" />
        </property>
        <property name="isbn" type="java.lang.String">
            <column name="ISBN" />
        </property>
        <property name="price" type="int">
            <column name="PRICE" />
        </property>
        <property name="stock" type="int">
            <column name="STOCK" />
        </property>
    </class>
</hibernate-mapping>
 
步骤四:创建DAO层、Service层
  1、DAO层接口:
      package com.cn.dao;
       import java.util.List;
       import com.cn.pojo.Book;
       public interface IBookDao {
          public List<Book> findAll();
          public String findBookById(int id);
          public void save(Book book);
          public void update(Book book);
          public void delete(int id);
      }
  2、DAO层接口实现类:
       package com.cn.dao;
      public class BookDaoImpl implements IBookDao {
       private SessionFactory sessionFactory;
       public SessionFactory getSessionFactory() {
          return sessionFactory;
        }
       public void setSessionFactory(SessionFactory sessionFactory) {
          this.sessionFactory = sessionFactory;
       }
    //获取和当前线程绑定的Seesion
    private Session getSession()
    {
        return sessionFactory.getCurrentSession();
    }
    @Override
    public List<Book> findAll() {
        String hql = "from Book";
        Query<Book> query = this.getSession().createQuery(hql);
        return query.list();
    }
    @Override
    public String findBookById(int id) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void save(Book book) {
        this.getSession().save(book);
    }
    @Override
    public void update(Book book) {
        // TODO Auto-generated method stub
    }
    @Override
    public void delete(int id) {
        // TODO Auto-generated method stub
    }
}
3、服务层接口:
  public interface IBookService {
         public String findBookById(int id);
         public void saveBook(Book book);
         public List<Book> findAll();
   }
4、服务层实现类:
  public class BookServiceImpl implements IBookService {
     private IBookDao dao;
     public IBookDao getDao() {
          return dao;
     }
     public void setDao(IBookDao dao) {
          this.dao = dao;
     }
     @Override
     public String findBookById(int id) {
          return null;
     }
     @Override
     public void saveBook(Book book) {
            dao.save(book);
     }
     @Override
     public List<Book> findAll() {
          return dao.findAll();
     }
}
步骤五:创建Spring配置文件
  1、applicationContext.xml文件:
     
 <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
      
         <!-- 配置连接参数 -->
         <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
         <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
         <property name="user" value="scott"/>
         <property name="password" value="root"/>
        
         <!-- 配置连接池 -->
         <property name="initialPoolSize" value="3"/>
         <property name="maxPoolSize" value="10"/>
         <property name="minPoolSize" value="1"/>
         <property name="acquireIncrement" value="3"/>
         <property name="maxIdleTime" value="60"/>
    </bean>
   
    <!-- 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" lazy-init="false">
       
         <!-- 注入datasource,给sessionfactoryBean内setdatasource提供数据源 -->
         <property name="dataSource" ref="dataSource"/>
         <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
       
         <!-- 加载实体类的映射文件位置及名称 -->
        <property name="mappingLocations" value="classpath:com/cn/pojo/*.hbm.xml"/>
    </bean>
   
    <!-- 导入外部的配置文件 -->
    <import resource="classpath:applicationContext-beans.xml"/>
   
    <!-- 配置Spring声明式事务,采用AOP形式切入 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
       <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 配置事务属性 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
   
    <!-- 配置事务切点,并把切点和事务属性关联起来 -->
    <aop:config proxy-target-class="true">
      <aop:pointcut expression="execution(* com.cn.dao.*.*(..))" id="txPointcut"/>
      <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>
 
2、applicationContext-beans.xml
      <bean id="bookDao" class="com.cn.dao.BookDaoImpl">
         <property name="sessionFactory" ref="sessionFactory"></property>
      </bean>
   
      <bean id="bookService" class="com.cn.dao.BookServiceImpl">
         <property name="dao" ref="bookDao"></property>
      </bean>
 
测试:
          public class Test {
            private static  String conf = "applicationContext.xml";
            private static ApplicationContext context = null;
            private static IBookService bookService = null;
   
     public static void main(String[] args) {
          context = new ClassPathXmlApplicationContext(conf);
          bookService = context.getBean(BookServiceImpl.class);
          Book book = new Book();
          book.setId(2);
          book.setBookName("Java程序设计");
          book.setPrice(48);
          book.setStock(78);
          book.setIsbn("ISBN-001-0980");
          
          bookService.saveBook(book);
     }
}
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/lone5wolf/p/11065073.html