• 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);
         }
    }
     
     
     
     
     
     
  • 相关阅读:
    USACO2.24 Party Lamps
    hdu3811 Permutation
    局部视图Partial
    动态修改a标签的css样式
    .net 记住用户名和密码
    C#枚举
    学习存储过程的时候参看的两个DVBBS的存储过程和两个初步了解后自己写的存储过程(带分页的)
    js 几种常用的表单输入判断
    AJAX+.net实现无刷新搜索,无须提交,边输边查
    ifream中的数据传递
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/11065073.html
Copyright © 2020-2023  润新知