Hibernate 核心API

一.三种对象状态

transient:内存中有一个对象,没有id,缓存中也没有
persistent:内存中有,缓存中有,数据库中有(id)
detached:内存中有,缓存中没有,数据库中有id

二.CoreAPI

1.configure读取hibernate.cfg.xml文件
2.load与get功能都是从数据库中查找
区别:
1.load返回的时代理对象,等到真正的用到对象的内容时才会发出sql语句
2.get直接从数据库加载,不会延迟,直接发出sql语句。
3.clear方法:
无论时get还是load,都会首先查找缓存(一级缓存),如果没有,才会
从数据库查找,调用clear()方法可以强制清楚session缓存
4. flush方法:
强制缓存和数据库同步。
5.delete()
transient:内存中有一个对象,没有id,缓存中也没有
persistent:内存中有,缓存中有,数据库中有(id)
detached:内存中有,缓存中没有,数据库中有id
在拥有id号的时候据可以delete
5.update

/**
	 *persistent中的对象修改,如果和之前的值相同,不会发送update语句
	 *如果不同则会发送update语句,而且所有的字段都会更新。
	 *更新部分字段:
	 *1.在xml文件中设置property中update属性中设置false,或者annotation中设置
	 *  @Column的updatable属性(不灵活)
	 *2.修改hbm.xml文件在class标签中添加 dynamic-update
	 *  如果跨session的使用merge(合并)方法,merge通过对比数据库中是否更新,
	 *  会再一次select一个数据库很繁琐。
	 *3.使用sql语句,session调用crateQuery方法(方法中使用sql语句)创建一个Query对象,
	 *  再调用executeUpdate方法。(建议使用)
	 */
	@Test
	public void UpdateTest2(){
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Query q = session.createQuery("Update Teacher s set s.name='z5'where id =1");
		q.executeUpdate();
		
		session.getTransaction().commit();
		
		
	}

三.getSession和getCurrentSession

	openSession()永远创建新的session要close 而getCurrentSession();可能会打开新的也会拿
	原来已经存在的,session没提交的话就一直是原来那个。
	可以用来界定事务边界,事务提交自动close
	使用getCurrentSession()需要在hibernate.cfg.xml文件中配置
	<property name="hibernate.current_session_context_class">thread</property>
	thred值是在一个单独的需要进行JDBC连接的java application中运行hibernate
	jta值则是两个不同的数据库而且有application server时使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值