• 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微信公众平台开发(9) 关键字回复以及客服接口实现
  • 2017-05-28java连接数据库(代码分享)
  • 2017-05-28详解Spring Aop实例之xml配置
  • 2017-05-28Spring Boot整合RabbitMQ实例(Topic模式)
  • 2017-05-28Intellij IDEA 配置Subversion插件实现步骤详解
  • 2017-05-28Java中双向链表详解及实例
  • 2018-08-06反应式编程(Reactive Programming)
  • 2017-05-28java中 Set与Map排序输出到Writer详解及实例
  • 2017-08-27Java中的内部类
  • 2017-05-28Java中的SimpleDateFormat使用详解

文章分类

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

最近更新的内容

    • Kotlin 基础语法详细介绍
    • 详谈java线程与线程、进程与进程间通信
    • 详解hibernate双向多对多关联映射XML与注解版
    • mybatis中的缓存问题解析
    • JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建
    • Java内部类_动力节点Java学院整理
    • 详解Spring MVC自动为对象注入枚举类型
    • 详解springboot + profile(不同环境读取不同配置)
    • Java线程中的notifyAll唤醒操作(推荐)
    • Java使用join方法暂停当前线程

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

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