Hibernate进阶

1、hibernate.cfg.xml常用配置

注意:hibernate的前缀可以省略,即:hibernate.dialect等同于dialect


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后,
设置其为自动提交事务模式。最后还需要flush()(注意:通常并不推荐这样做

public void testSaveUser()
	{
		//生成用户对象
		User user=new User(1,"txr","123");
		session.doWork(new Work(){

			@Override
			public void execute(Connection arg0) throws SQLException {
				// TODO Auto-generated method stub
				arg0.setAutoCommit(true);
			}
			
		});
		session.save(user);//保存对象
		session.flush();//必须添加flush才能添加进入数据库
	}

4、session详解

如何获得session对象?

1)、opensession
2)、getCurrentSession
如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</propertyname>
如果是全局事务(jta事务)
<property name = "hibernate.current_session_context_class">jta</propertyname>

     openSession与getCurrentSession的区别


1、getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要你手动关闭。
如果使用openSession而没有手动关闭,多次之后会导致链接池溢出。
2、openSession每次创建新的session对象,getCurrentSession使用现有的session对象。

5、对象关系映射(hbm)常用配置

schema表示设置模式的名字
catalog表示设置目录的名字
<class
name="ClassName" //对象关系映射映射的是哪个类
table="tableName" //把这个类映射成数据库的哪张表
batch-size="N"   //抓取策略
where="condition" //根据条件来抓取,where代表条件
entity-name="EntityName" //支持同一个类映射成多张表
/>

<id   //表示主键
name="propertyName" //表示要映射成为哪个属性
type="typename" //type表示数据类型
column="cloumn_name" //映射成表中字段的名称
length="length"
<generator class= "generatorClass"/>//主键生成策略
</id>
主键生成策略


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值