• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Spring4整合Hibernate5详细步骤

Spring4整合Hibernate5详细步骤

作者:GW_Cheng 字体:[增加 减小] 来源:互联网 时间:2017-05-28

GW_Cheng 通过本文主要向大家介绍了spring4 hibernate4,spring4 hibernate5,spring4 hibernate3,spring4 hibernate,spring4整合struts2等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Spring与Hiberante整合

通过hibernate的学习,我们知道,hibernate主要在hibernate.cfg.xml配置文件中

接下来我们看一下hibernate的一个配置文件

hibernate配置文件

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <!-- 指定连接数据库所用的驱动 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <!-- 指定连接数据库的url,其中hibernate是本应用连接的数据库名 -->
    <property name="connection.url">jdbc:mysql://localhost/hibernate_test</property>
    <!-- 指定连接数据库的用户名 -->
    <property name="connection.username">root</property>
    <!-- 指定连接数据库的密码 -->
    <property name="connection.password">cheng</property>
    <!-- 指定连接池里最大连接数 -->
    <property name="hibernate.c3p0.max_size">20</property>
    <!-- 指定连接池里最小连接数 -->
    <property name="hibernate.c3p0.min_size">1</property>
    <!-- 指定连接池里连接的超时时长 -->
    <property name="hibernate.c3p0.timeout">5000</property>
    <!-- 指定连接池里最大缓存多少个Statement对象 -->
    <property name="hibernate.c3p0.max_statements">100</property>
    <property name="hibernate.c3p0.idle_test_period">3000</property>
    <property name="hibernate.c3p0.acquire_increment">2</property>
    <property name="hibernate.c3p0.validate">true</property>
    <!-- 指定数据库方言 -->
    <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    <!-- 根据需要自动创建数据表 -->
    <property name="hbm2ddl.auto">update</property><!--①-->
    <!-- 显示Hibernate持久化操作所生成的SQL -->
    <property name="show_sql">true</property>
    <!-- 将SQL脚本进行格式化后再输出 -->
    <property name="hibernate.format_sql">true</property>
    <!-- 避免这个错误信息Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException -->
    <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
    <!-- 罗列所有持久化类的类名 -->
    <mapping class="com.wechat.entity.po.User"/>
    <mapping class="com.wechat.entity.po.Person"/>
  </session-factory>
</hibernate-configuration>

</div>

配置文件的作用

hibernate.cfg.xml文件的主要作用就是配置了一个session-factory

  1. 在session-factory中主要通过property配置一些数据库的连接信息,我们知道,spring通常会将这种数据库连接用dataSource来表示,这样一来,hibernate.cfg.xml文件中的所有跟数据库连接的都可以干掉了,直接用spring的dataSource,而dataSource也可以用c3p0、dbcp等。
  2. 在session-factory中通过property除了配置一些数据库的连接信息之外,还有一些hibernate的配置,比如方言、自动创建表机制、格式化sql等,这些信息也需要配置起来。
  3. 还有最关键的一个持久化类所在路径的配置

当不采用spring整合的时候,我们使用hibernate时主要是用hibernate从sessionFactory中去的session,然后用session来操作持久化对象,而sessionFactory来自于配置文件。像下面这样:

  StandardServiceRegistry registry = null;
  SessionFactory sessionFactory = null;
  Session session = null;
  Transaction transaction = null;
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  @Before
  public void init() {

    registry = new StandardServiceRegistryBuilder()
        .configure() // configures settings from hibernate.cfg.xml
        .build();
    sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
    session = sessionFactory.openSession();
    //开始事务
    transaction = session.getTransaction();
    transaction.begin();
  }

  @Test
  public void testSaveUser() {
    User user = new User();
    user.setUsername("张学友");
    user.setPassword("jacky");
    user.setRegistDate(sdf.format(new Date()));
    File file = new File("D:"+File.separator+"ubuntu.png");
    String fileName = file.getName();
    String prefix=fileName.substring(fileName.lastIndexOf(".")+1);
    System.out.println(prefix);
    InputStream input = null;
    try {
      input = new FileInputStream(file);

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }

    Blob image = null;
    try {
      image = Hibernate.getLobCreator(session).createBlob(input,input.available());
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    user.setUserPic(image);
    session.save(user);
  }

  @After 
  public void destroy(){
    transaction.commit();
    session.close();
    sessionFactory.close();
    StandardServiceRegistryBuilder.destroy( registry );
  }
</div>

Spring对hibernate的整合就是将上述三点通过spring配置起来,而hibernate最关键的sessionFactroy就是spring的一个bean

这些理解了整合就简单了,

SessionFactoryBean

spring的sessionFactroy像下面这样配置:

<!-- 加载配置文件 -->
  <context:property-placeholder location="classpath:jdbc.properties"
    file-encoding="utf-8" ignore-unresolvable="true" />

  <bean id="sessionFactory"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan">
      <list>
        <!-- 可以加多个包 -->
        <value>com.wechat.entity.po</value>
      </list>
    </property>
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
        <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
        <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
      </props>
    </property>
  </bean>

</div>

通过bean的配置可以看出该bean就是hibernate的sessionFactroy

因为它指向了org.springframework.orm.hibernate5.LocalSessionFactoryBean

在这个bean中主要配置了上面说的三点:

  1. 数据源dataSource
  2. hibernate的配置,包括方言,输出sql等
  3. 持久化类的位置,通过包进行扫描

下面给出数据源dataSource的配置

dataSource

<!-- 配置数据源 -->
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" p:driverClass="${jdbc.driverClassName}"
    p:jdbcUrl="${jdbc.url}" p:user="${jdbc.username}" p:password="${jdbc.password}"
    p:testConnectionOnCheckout="${jdbc.c3p0.testConnectionOnCheckout}"
    p:testConnectionOnCheckin="${jdbc.c3p0.testConnectionOnCheckin}"
    p:idleConnectionTestPeriod="${jdbc.c3p0.idleConnectionTestPeriod}"
    p:initialPoolSize="${jdbc.c3p0.initialPoolSize}" p:minPoolSize="${jdbc.c3p0.minPoolSize}"
    p:maxPoolSize="${jdbc.c3p0.maxPoolSize}" p:maxIdleTime="${jdbc.c3p0.maxIdleTime}" />
</div>

还有数据库的连接信息

jdbc.properties




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Spring4整合Hibernate5详细步骤
  • Spring4整合Hibernate5详细步骤

相关文章

  • 2017-05-28java IO 文件操作方法总结
  • 2017-05-28java 进制转换实例详解
  • 2017-05-28详解Spring MVC自动为对象注入枚举类型
  • 2017-05-28Java 简化正则表达式的使用
  • 2017-05-28Java微信公众平台开发(12) 微信用户信息的获取
  • 2017-05-28Java爬虫Jsoup+httpclient获取动态生成的数据
  • 2018-11-21com.arjuna.ats.arjuna.coordinator.TransactionReaper
  • 2017-05-28关于多线程常用方法以及对锁的控制(详解)
  • 2017-05-28Java基本数据类型与对应的包装类(动力节点java学院整理)
  • 2017-05-28Java 解决死锁的方法实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java数据结构和算法之冒泡排序(动力节点Java学院整理)
    • Mac Book中Java环境变量设置的方法
    • Java二分法查找_动力节点Java学院整理
    • 浅谈多线程中的锁的几种用法总结(必看)
    • Spring Boot开发Web应用详解
    • Spring Boot启动过程(四)之Spring Boot内嵌Tomcat启动
    • Java基本数据类型与对应的包装类(动力节点java学院整理)
    • 浅谈Java中几个常用集合添加元素的效率
    • java实现word文件转html文件
    • Java数据结构与算法之树(动力节点java学院整理)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有