hibernate优化

1、使用双向一对多关联,不使用单向一对多
2、在one-to-many 关系中,将many一方设为主动方(inverse=false)将有助性能的改善。
3、ibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。
    fetch_size:
    对于Oracle的JDBC驱动来说,是不会1次性把1万条取出来的,而只会取出Fetch Size条数,当纪录集遍历完了这些记录以后,
    再去数据库取Fetch Size条数据。因此大大节省了无谓的内存消耗。
    当然Fetch Size设的越大,读数据库的次数越少,速度越快;Fetch Size越小,读数据库的次数越多,速度越慢。
    batch_size:
    Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。
    Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。
    测试结果是当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size = 50的时候,删除仅仅需要5秒!!!
4、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会 严重显示性能,
    所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session.evict(Object)来清除全部或单个的缓存。
5、使用二级缓存
6、查询时:
    get()和load方法得到单个对象
    list()和iterator()方法得到结果集

    load()方法会使用二级缓存,
    get()方法在一级缓存没有找到的情况下会直接查询数据库,不会去二级缓存中查找。
    对使用了二级缓存的对象进行查询时最好使用load()方法,以充分利用二级缓存来提高检索的效率。

    list()方法会一次获得所有的结果集对象,而且它会依据查询的结果初始化所有的结果集对象。
    这在结果集非常大的时候会非常占内存。
    list()方法只能使用二级缓存中的查询缓存,而无法使用二级缓存对单个对象的缓存,
    所以,除非重复执行相同的查询操作,否则无法利用缓存的机制来提高查询的效率。
    iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。
    iterator()方法则可以充分利用二级缓存,根据ID检索对象的时候会首先到缓存中查找,
    只有在找不到的情况下才会执行相应的查询语句,

    所以,缓存中对象的存在与否会影响到SQL语句的执行数量。


参考:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763104080224e0add216b97c71508d39019d5394c413037bee43a715042cec57e650aad4d41e9f03d75360837b7ec92ce15c9fecf6879877d6f204bc61d41954eb8cb3732b721872beeb86997ad8346&p=c064c54ad6c04bf203a7cd2d02148c&newp=803be715d9c342a54ebe9b7c4f0d89231610db2151ddd01569&user=baidu&fm=sc&query=hibernate+%D3%C5%BB%AF&qid=&p1=1

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 缓存优化Hibernate提供了一些缓存机制,可以有效地减少数据库的访问次数,提高性能。可以使用一级缓存和二级缓存。 2. 使用延迟加载:Hibernate可以使用延迟加载来减少查询的数据量,提高性能,可以使用懒加载和延迟加载两种方式。 3. 批量操作:在使用Hibernate进行批量操作时,可以使用批处理操作,将多个操作合并成一个批次执行,减少数据库的访问次数,提高性能。 4. 使用原生SQL:在某些情况下,使用原生SQL语句可以提高性能,特别是在进行复杂查询时。 5. 使用连接池:Hibernate可以使用连接池来管理数据库连接,减少连接的创建和销毁,提高性能。 6. 使用分页查询:在查询大量数据时,可以使用分页查询来减少数据的传输量,提高性能。 7. 避免使用N+1查询:在使用Hibernate进行关联查询时,要避免使用N+1查询方式,可以使用Fetch策略或关联查询来减少查询次数。 8. 优化关联关系:要根据实际情况对关联关系进行优化,可以使用双向关联、单向关联、级联操作等方式来提高性能。 9. 避免过度使用ORM框架:在使用Hibernate进行开发时,要避免过度使用ORM框架,要根据实际情况进行选择,以提高性能。 10. 使用合适的数据类型:在定义实体类属性时,要选择合适的数据类型,避免使用过大或过小的数据类型,以提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值