Hibernate进阶知识点必备
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进阶知识点必备的更多相关文章
- (Hibernate进阶)Hibernate系列——总结篇(九)
这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...
- JS 进阶知识点及常考面试题
将会学习到一些原理相关的知识,不会解释涉及到的知识点的作用及用法,如果大家对于这些内容还不怎么熟悉,推荐先去学习相关的知识点内容再来学习原理知识. 手写 call.apply 及 bind 函数 涉及 ...
- Java进阶知识点: 枚举值
Java进阶知识点1:白捡的扩展性 - 枚举值也是对象 一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...
- 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
[SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...
- Hibernate进阶学习4
Hibernate进阶学习4 深入学习hibernate的查询语句 测试HQL查询 package com.hibernate.test; import com.hibernate.domain.Cu ...
- Hibernate进阶学习3
Hibernate进阶学习3 测试hibernate的多表关联操作(一对多,多对一,多对多) 表之间的关系主要在类与元数据配置文件中体现 package com.hibernate.domain; i ...
- Hibernate初探之单表映射——第二章:Hibernate进阶
第二章:Hibernate进阶 1.hibernate.cfg.xml常用配置 2.session 简介 3.transaction简介 4.session详解 5.对象关系映射常用配置 1.hibe ...
- JavaScript进阶知识点——函数和对象详解
JavaScript进阶知识点--函数和对象详解 我们在上期内容中学习了JavaScript的基本知识点,今天让我们更加深入地了解JavaScript JavaScript函数 JavaScript函 ...
- javascript进阶高手必备知识
不想当将军的士兵不是好士兵,想当将军那就意味着要学习更多的技能,进阶前端高手必备知识点都有哪些? 你知道作用域.原型.继承.作用域链.闭包等概念吗? 从浏览器多进程到JavaScript单进程你又理解 ...
随机推荐
- bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1033 Solved: 480[Submit][Status][ ...
- poj1741Tree 点分治
上午学习了点分治,写了1个半小时终于写出一个代码--poj1741,可以说是个模板题. 分治:对于每个儿子找出重心,分别处理 注意:1.每次处理一个重心后,ans减去对它儿子的处理 原因:因为统计方法 ...
- 树莓派超声波测距+蜂鸣器(c语言)
前边我们已经详细的讲解了树莓派控制超声波模块测距(http://www.cnblogs.com/yuemo/p/8888342.html)和超声波控制蜂鸣器模块发声(http://www.cnblog ...
- java开发笔记——表映射实体类代码示例
package com.special.ipmsdm; import java.io.Serializable; import javax.persistence.Column; import jav ...
- python设计模式浅析
今天简单聊聊python的设计模式,GOF设计模式(c++)和Head first design pattern(Java)是两本设计模式的经典,基本可以照搬在python上面,但是你会发现pytho ...
- 【.NET Core】docker Jenkins ASP.NET Core自动化部署
本文基于GitHub演示自动化部署,实际上你可以选择任意的Git托管环境. 使用的模式:DooD(Docker-outside-of-Docker). 本文所有内容均开源 链接 欢迎关注我的GitHu ...
- ConcurrentHashMap1.7和1.8的不同实现
ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为 ...
- 解释session
我理解的session就是,多个页面都要使用某一个或一些数据,这时就可以用session,将数据暂时保存起来,这样其他的页面开启session,就能将那些数据拿出来使用.
- eval和列表解析的一处陷阱
>>> def f(): a=1 return [i+a for i in range(3)] >>> f() [1, 2, 3] >>> def ...
- Android必知必会-Android Studio下配置和使用Lambda
移动端如果访问不佳,请访问–>Github版 背景 和朋友讨论 JAVA8 的新特性,聊到Lambda,正好在掘金上看到一篇相关的文章,结合资料,作一个总结,特别是记录下实际使用中遇到的问题. ...