hibernate的智能优化、延迟加载、抓取策略(优化)

动态插入

  • 在映射文件里面,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语句如何发送,发送什么样格式通过策略进行配置。

    • 通过或者上通过fetch属性进行设置

    • fetach和这些标签上的lazy如何设置优化发送SQL语句。

  • fetch:抓取策略,控制SQL语句格式

    • select 默认值,发送普通select语句,查询关联对象(一般采用)

    • join 发送迫切左外连接查询关联对象,这时lazy失效。(特殊需求,与数据库交互一次。可以减少与数据库交互的次数)

    • subselect 发送子查询来查询关联对象,查客户不能查一个,hibernate是非常智能的,当只查询一个客户的时候就会被直接转换成条件查询,IN 后接1个值效率很低。这时lazy是有用的。

  • lazy延迟加载,控制查询关联对象的时候是否要采用延迟加载?

    • true 默认 (一般采用)

    • false

    • extra 极其懒惰

配置:

  • image.png
image.png

批量抓取:

  • 一次获取多了联系人的信息。一批关联对象一起进行抓取。 可以设置一次抓取多少条数据。

  • image.png

  • image.png

  • HQL也可以使用批量抓取策略。

面试:hibernate效率很低,项目中你是怎么优化的呀?

  • 缓存

  • 抓取策略

你可能感兴趣的:(hibernate的智能优化、延迟加载、抓取策略(优化))