hibernate.cfg.xml的常用的配置

  • hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码阶段便于测试,为true的好

-hibernate.format_sql:输出到控制台的SQL语句是否进行排版,便于阅读。建议设置为true。它好我也好嘛。

  • hbm2ddl.auto:可以帮助由java代码生成数据库脚本,进而生成具具体的表结构。create | update | create_drop | validate

    • create: 每次都会创建一个新的表结构(慎用)
    • update: 更新变化的部分,会维持原有的测试数据的存在
    • create_drop: 如果有就删掉再重新生成(慎用)
    • validate: 验证表结构有无冲突,有冲突则不进行操作
  • hibernate.default_schema: 默认的数据库。在创建数据库表结构的时候会加上此前缀

  • hibernate.dialect:配置Hibernate数据库的方言,Hibernate可以针对特殊的数据库进行优化!

session的简介

先看一下,hibernate的执行流程吧。

  • 首先是Configuration(hibernate.cfg.xml)

  • 然后是SessionFactory(Beans.hbm.xml):创建和销毁都相当的耗费资源,通常一个系统内一个数据库只创建一个这样的对象

  • Session: 相当于传统的JDBC中的Connection(但是session与connection是多对一的关系。开发的时候尽量不要使用connection):

    -开启一个事务(Transaction)

    • 利用session进行CRUD操作
    • 事务提交(transaction。commit())
    • 关闭会话(session.close())
    • 关闭sessionFactory(如果需要的话,一般不需要)
  • 如何获取session对象:

    • openSession的方式:针对的是sessionFactory而言。
    • getCurrentSession的方式():需要在hibernate.cfg.xml中实现对name为hibernate.current_session_context_class的属性的配置。值为thread代表本地事务。jta 代表全局事务。
    • 这二者的区别:后者事务提交或者回滚后悔自动的关闭,前者需要手动的关闭;后者使用的是单例模式,即只是对同一个底层的session的操作,前者则是每次创建一个新的session进行操作。

Transaction的简单的叙述

Hibernate对数据库的操作都是封装在事务中的,并且默认是非自动提交的方式。所以,用Session保存对象时,如果不开启事务,并且手动的提交事务,对象并不会真正的保存到数据库中。

但是如果你想让Hibernate像JDBC那样自动的提交事务,必须调用session的对象的doWork()方法,获得JDBC的connection后,设置其为自动提交事务模式。

通常来说,不建议采用自动提交的方式。因为要实现session的doWork方法,里面是一个匿名的类,。

hbm.xml配置文件常用的设置

<hibernate-mapping
    schema="schemaName"
    catalog="catalogName"
    default-cascade="cascade_style"//级联风格
    default-access="field|property|ClassName"//访问策略
    default-lazy="true|false"//加载的策略
    package="packageName"
    />

<class
    name="ClassName"
    table="tableName"
    batch-size="N"//抓取策略,一次抓取多少数据
    where="condition"
    entity-name="EntityName"
    />

<id  // 表示此属性在数据库中是做为主键出现的
    name="propertyName"
    type="typeName"
    column="column_name"
    length="length"
    <generator class ="generatorClass" />
    />

Hibernate进阶知识点必备的更多相关文章

  1. (Hibernate进阶)Hibernate系列——总结篇(九)

    这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

  2. JS 进阶知识点及常考面试题

    将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及 ...

  3. Java进阶知识点: 枚举值

    Java进阶知识点1:白捡的扩展性 - 枚举值也是对象   一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...

  4. 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)

    [SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...

  5. Hibernate进阶学习4

    Hibernate进阶学习4 深入学习hibernate的查询语句 测试HQL查询 package com.hibernate.test; import com.hibernate.domain.Cu ...

  6. Hibernate进阶学习3

    Hibernate进阶学习3 测试hibernate的多表关联操作(一对多,多对一,多对多) 表之间的关系主要在类与元数据配置文件中体现 package com.hibernate.domain; i ...

  7. Hibernate初探之单表映射——第二章:Hibernate进阶

    第二章:Hibernate进阶 1.hibernate.cfg.xml常用配置 2.session 简介 3.transaction简介 4.session详解 5.对象关系映射常用配置 1.hibe ...

  8. JavaScript进阶知识点——函数和对象详解

    JavaScript进阶知识点--函数和对象详解 我们在上期内容中学习了JavaScript的基本知识点,今天让我们更加深入地了解JavaScript JavaScript函数 JavaScript函 ...

  9. javascript进阶高手必备知识

    不想当将军的士兵不是好士兵,想当将军那就意味着要学习更多的技能,进阶前端高手必备知识点都有哪些? 你知道作用域.原型.继承.作用域链.闭包等概念吗? 从浏览器多进程到JavaScript单进程你又理解 ...

随机推荐

  1. hdu 3247 AC自动+状压dp+bfs处理

    Resource Archiver Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Ot ...

  2. 51Nod 1125 交换机器的最小代价

    题目描述: 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增.移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和.例如:3 2 1,交换1 ...

  3. [bzoj1187][HNOI2007]神奇游乐园

    来自FallDream的博客,未经允许,请勿转载,谢谢, 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一 ...

  4. VM11 CentOS6.7 i386 安装 oracle 11g r2

    CentOS 6.7 i386:最小桌面版本--中文1.网络配置 ifup eht0 vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改:NBOOT=ye ...

  5. C语言程序设计第三次作业——选择结构(一)

    (一)改错题 错误信息: 错误原因:y=1/x后没加分号 改正方法:在其后加上分号 错误信息: 错误原因:if语句后接了:,使else语句找不到对应的if 改正方法:删掉if后的分号 错误信息: 错误 ...

  6. 《Java技术》的第二次作业

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? (1) 构造方法用于在创建对象时对其进行初始化,且方法名与类名相同,方法名前面没有返回值类型的声明,不能 ...

  7. java中如何在代码中判断时间是否过了10秒

    long previous = 0L; ... { Calendar c = Calendar.getInstance(); long now = c.getTimeInMillis(); //获取当 ...

  8. substr和substring的区别

    substr和substring两个都是截取字符串的. 两者有相同点,如果只是写一个参数,两者的作用都是一样的:就是截取字符串当前下标以后直到字符串最后的字符串片段. 例如:`var a=”abcde ...

  9. c# error

    部署iis c# 连sqlserver 用IIS发布之后,网页出错.提示为:异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\I ...

  10. 线性表 linear_list 顺序存储结构

    可以把线性表看作一串珠子 序列:指其中的元素是有序的 注意last和length变量的内在关系 注意:将元素所占的空间和表长合并为C语言的一个结构类型 静态分配的方式,分配给一个固定大小的存储空间之后 ...