6.Session 接口
session 管理数据库的一个任务单元
常用的方法(CURD):
save()
delete():从数据库删除数据,缓存中也同时删掉
update():数据库有记录 才可以更新,不然出错
只更新部分字段,该如何设置?
方法1:在对应的字段的getter方法上进行注解@Column(updatable=false),或者在映射文件的<property name="property_name" update="false" />中进行设定,不够灵活
方法2:在xml映射文件(User.hbm.xml)对应的class标签添加dynamic-update="true": <class name="User" table="user" dynamic-update="true" >...</class>
方法3:直接使用HQL(推荐使用)
merge():跨session更新,较少使用
saveOrUpdate()
load()
get()
get/load方法的区别:
1.不存在对应记录时,表现不一样。get找不到记录是,会报错,load不会报错
2.load返回的是代理对象,等到真正用到了这个对象,才会发出sql语句,进行查询
3.get直接从数据库加载,不会延迟
clear():清除session缓存
无论load还是个体,都会首先查找缓存(一级缓存),若没有,再查找数据库。clear()会清除缓存里面的数据
flush():强制缓存与数据库数据做同步
SchemaExport是org.hibernate.tool.hbm2ddl包下的一个类,可以以程序的方式(相对以配置文件<property name="hbm2ddl.auto">create</property>)自动创建建表语句,在测试中很好用