动态插入
在映射文件里面,class上面设置dynamic_insert 为true
当我们插入一行数据中有null值时,hibernate不会爸null插入,提高效率
动态更新
在映射文件里面,class上面设置dynamic_update为true
hibernate发现更新前后的数据都是相同的,就不会更新数据库来提高效率
type:
指定字段类型,数据库中的数据类型。
指定长度可以添加length属性
抓取策略一般要与延迟加载一起用。
延迟加载:
lazy,懒加载。load。。。
类级别的延迟加载:通过load查询实体的时候用的。
关联级别的延迟:在查询到某个对象的时候,查询到某个关联对象的时候是否采##### 用延迟加载。
Customer cus = sseion.get(Customer.class, 1l);
customer.getLinkMans();这里是否要用延迟加载?
抓取策略往往会和关联级别联合使用。
抓取策略:
通过一个对象抓取关联对象需要发送的SQL语句,SQL语句如何发送,发送什么样格式通过策略进行配置。
通过<set>或者<many-to-one>上通过fetch属性进行设置
fetach和这些标签上的lazy如何设置优化发送SQL语句。
fetch:抓取策略,控制SQL语句格式
select 默认值,发送普通select语句,查询关联对象(一般采用)
join 发送迫切左外连接查询关联对象,这时lazy失效。(特殊需求,与数据库交互一次。可以减少与数据库交互的次数)
subselect 发送子查询来查询关联对象,查客户不能查一个,hibernate是非常智能的,当只查询一个客户的时候就会被直接转换成条件查询,IN 后接1个值效率很低。这时lazy是有用的。
lazy延迟加载,控制查询关联对象的时候是否要采用延迟加载?
true 默认 (一般采用)
false
extra 极其懒惰
配置:
批量抓取:
一次获取多了联系人的信息。一批关联对象一起进行抓取。 可以设置一次抓取多少条数据。
-
-
HQL也可以使用批量抓取策略。
面试:hibernate效率很低,项目中你是怎么优化的呀?
缓存
抓取策略