1. Hibernate经常使用配置

使用hibernate.default_schema属性能够让全部生成的表都带一个指定的前缀。

2. session简单介绍

不建议直接使用jdbc的connection操作数据库,而是通过使用session操作数据库。

session能够理解为操作数据库的对象。session与connection是多对一的关系。每一个session都有一个与之相应的connection。一个connection不同一时候刻能够供多个session使用。把对象保存在关系数据库中须要调用session的各种方法,如save(),update(),delete(),createQuery()等。

3. transaction简单介绍

hibernate对数据的操作都是封装在事务其中,而且默认是非自己主动提交的方式。所以用session保存对象时。假设不开启事务,而且手工提交事务。对象并不会真正保存在数据库中。

假设想让hibernate像jdbc那样自己主动提交事务,必须调用session对象的doWork()方法。获得jdbc的connection后。设置其为自己主动提交事务模式。

比如:

		session.doWork(new Work() {

			@Override
public void execute(Connection conn) throws SQLException {
conn.setAutoCommit(true);
} });
session.save(s1); // 保存对象进入数据库
session.flush();

注意一定不能忘记flush()方法。

4. session具体解释

获取session对象的两种方式:

(1). SessionFactory的openSession()方法

(2) SessionFactory的getCurrentSession()方法

假设使用getCurrentSession须要在hibernate.cfg.xml文件里进行配置:

假设是本地事务(jdbc事务)

		<property name="hibernate.current_session_context_class">thread</property>

假设是全局事务(jta事务)

		<property name="hibernate.current_session_context_class">jta</property>

openSession和getCurrentSession的差别:

(1). getCurrentSession在事务提交或者回滚之后会自己主动关闭,而openSession须要你手动关闭。假设使用openSession而没有手动关闭。多次之后就会导致连接池溢出。

(2). openSession每次创建新的session对象,而getCurrentSession使用现有的session对象。

	@Test
public void testSaveStudentWithOpenSession() {
// 获得配置对象
Configuration config = new Configuration().configure();
// 获得服务注冊对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(config.getProperties()).buildServiceRegistry();
// 获得SessionFactory对象
SessionFactory sessionFactory = config
.buildSessionFactory(serviceRegistry);
// 获得Session对象
Session session1 = sessionFactory.openSession();
// 开启事物
Transaction transaction = session1.beginTransaction();
// 生成一个学生对象
Student s = new Student(1, "李四", "男", new Date(), "北京");
session1.doWork(new Work() { @Override
public void execute(Connection conn) throws SQLException {
System.out.println("Connection的hashCode:" + conn.hashCode());
}
});
session1.save(s);
// session1.close();
// 提交事务
transaction.commit(); // 新创建一个session提交
Session session2 = sessionFactory.openSession();
transaction = session2.beginTransaction();
s = new Student(2, "王五", "男", new Date(), "上海");
session2.doWork(new Work() { @Override
public void execute(Connection conn) throws SQLException {
System.out.println("Connection的hashCode:" + conn.hashCode());
}
});
session2.save(s);
transaction.commit();
} @Test
public void testSaveStudentWithGetCurrentSession() {
// 获得配置对象
Configuration config = new Configuration().configure();
// 获得服务注冊对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(config.getProperties()).buildServiceRegistry();
// 获得SessionFactory对象
SessionFactory sessionFactory = config
.buildSessionFactory(serviceRegistry);
// 获得Session对象
Session session1 = sessionFactory.getCurrentSession();
// 开启事物
Transaction transaction = session1.beginTransaction();
// 生成一个学生对象
Student s = new Student(1, "李四", "男", new Date(), "北京");
session1.doWork(new Work() { @Override
public void execute(Connection conn) throws SQLException {
System.out.println("Connection的hashCode:" + conn.hashCode());
}
});
session1.save(s);
// session1.close();
// 提交事务
transaction.commit(); // 新创建一个session提交
Session session2 = sessionFactory.getCurrentSession();
transaction = session2.beginTransaction();
s = new Student(2, "王五", "男", new Date(), "上海");
session2.doWork(new Work() { @Override
public void execute(Connection conn) throws SQLException {
System.out.println("Connection的hashCode:" + conn.hashCode());
}
});
session2.save(s);
transaction.commit();
}

通过样例我们能够看出在不关闭session的情况下,使用openSession每一次获得的都是新的session,而使用getCurrentSession获得的都是同一个session,所以在使用openSession获得的session操作完成后。须要手动close掉。

5. hbm配置文件经常使用设置

<hibernate-mapping>标签经常使用属性:

<class>标签经常使用属性:

<id>标签的经常使用属性:

常见主键生成策略:

【Hibernate】(2)Hibernate配置与session、transaction的更多相关文章

  1. Hibernate Session & Transaction详解

    Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持 ...

  2. Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration

    Session接口: Session接口 Session 接口对于Hibernate 开发人员来说是一个最重要的接口.然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都 ...

  3. hibernate学习笔记(3)hibernate常用配置以及session对象

    更改hibernate.cfg.xml的内容,常用配置有: <!--  把hibernate运行时的SQL语句显示到控制台  --> <property name="sho ...

  4. Hibernate二级缓存配置

    一.定义: 二级缓存是进程或集群范围内的缓存,可以被所有的Session共享,是可配置的插件 二.二级缓存原理图 解析:每次从二级缓存中取出的对象,都是一个新的对象. 三.配置步骤如下: 同理:以员工 ...

  5. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  6. hibernate进阶--一对多映射配置

    hibernate作为一款优秀的ORM框架,广受大家喜爱,也被Java社区公认为持久层的首选.虽然jdbc为Java数据库操 作带来了诸多便利,但是并没有统一SQL语句的写法,而且具体操作数据库的代码 ...

  7. Hibernate笔记——C3P0配置

    Hibernate作为持久层(ORM)框架,操作数据库,自然也就离不开数据库连接池了.其支持多种连接池,这里就用最熟悉的C3P0连接池. C3P0连接池前面已经介绍了并使用很多次了就不再详细说明了. ...

  8. Hibernate笔记——Hibernate介绍和初次环境配置

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...

  9. hibernate安装和配置和第一个Hibernate应用

    ssh的各个版本要搭配好,struts2.3一般搭配hibernate4.x,我下的是4.3. Hibernate4的改动较大只有spring3.1以上版本能够支持,Spring3.1取消了Hiber ...

随机推荐

  1. MySql压缩版安装及避免1055错误和msvcp120.dll丢失

    MySql压缩版安装及避免1055错误和msvcp120.dll丢失 MySQL压缩版的安装快速方便,5.7及最新的8版本安装方式大致相同. 在使用group by分组时,可能会遇到1055错误. 另 ...

  2. python--类的约束, 异常处理, MD5, 日志处理

    一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...

  3. 我的Python分析成长之路9

    pandas入门 统计分析是数据分析的重要组成部分,它几乎贯穿整个数据分析的流程.运用统计方法,将定量与定性结合,进行的研究活动叫做统计分析.而pandas是统计分析的重要库. 1.pandas数据结 ...

  4. 算法学习记录-排序——冒泡排序(Bubble Sort)

    冒泡排序应该是最常用的排序方法,我接触的第一个排序算法就是冒泡,老师也经常那这个做例子. 冒泡排序是一种交换排序, 基本思想: 通过两两比较相邻的记录,若反序则交换,知道没有反序的记录为止. 例子: ...

  5. adb 命令大全

    传送门 --> https://github.com/mzlogin/awesome-adb ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的 ...

  6. CMDB资源配置管理项目

    浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...

  7. LOGMNR分析redo log和archive log教程

    自Oracle 11g起,无需设置UTL_FILE_DIR就可以使用LOGMNR对本地数据库的日志进行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和归档日 ...

  8. 全库修改SQL Server现有排序规则

    近日,在项目Debug过程中发现了SQL Server排序规则冲突的问题. 由于原数据库是从英文环境的SQL中生成的,其排序规则为“SQL_Latin1_General_CP1_CI_AS”,备份到本 ...

  9. 【Luogu】P2331最大子矩阵(DP)

    题目链接 这题的状态转移方程真是粗鄙. f[i][j][k]表示前i行用了j个矩阵状态为k的时候的最大值. k=0:两列都不选. k=1:取左弃右. k=2:选右弃左. k=3:左右都选,但分属于两个 ...

  10. 刷题总结——魔术球问题(ssoj最小路径覆盖+网络流)

    题目: 题目描述 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2 ,3,… 的球.(1)每次只能在某根柱子的最上面放球.(2)在同一根柱子中,任何 2 个相邻球的编号之和为 ...