性能优化是一个很大的话题,大到程序架构优化,数据库设计等,小到一个特定算法,甚至js优化等等。这里我们只简单谈一下hibernat
性能优化是一个很大的话题,大到程序架构优化,数据库设计等,小到一个特定算法,甚至js优化等等。这里我们只简单谈一下hibernate的性能优化。
在使用Hibernate的时候,通过正确的方法和策略,可以提高执行效率。
(一)抓取策略
抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明。
例如单端代理,集合代理,批量抓取等
设置方式通常为
*fetch="join",hibernate会通过一个select语句连接(内联/外联)抓取其关联对象或集合
*fetch="subselect",另外发送一条select语句抓取在前面查询到的所有实体的关联集合
*可以使用fetch预抓取Classes,解决N+1问题,hql中使用“join fetch ” ,select s from Student s join fetch s.classes where s.id in(:ids)
*batch-size属性,可以批量加载实体类
(二)缓存
缓存原则:通常读远远大于写的数据进行缓存
Hibernate的Session在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或JVM级别(SessionFactory级别)的缓存。 你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序对持久化仓库(数据库)可能进行的修改 (即使可以将缓存数据设定为定期失效)。
1、一级缓存
一级缓存生命周期很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存
* load/get/iterate查询实体对象时,,支持一级缓存
* 一级缓存是缓存实体对像的,对属性不缓存
*对于 大批量的数据添加
session.beginTransaction();
for (int i=0; i
Student student = new Student();
student.setName("张三" + i);
session.save(student);
//每20条更新一次
if (i % 20 == 0) {
session.flush();
//清除缓存的内容
session.clear();
}
}
session.getTransaction().commit();

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

本文討論了使用Drop Table語句在MySQL中放下表,並強調了預防措施和風險。它強調,沒有備份,該動作是不可逆轉的,詳細介紹了恢復方法和潛在的生產環境危害。

本文討論了在PostgreSQL,MySQL和MongoDB等各個數據庫中的JSON列上創建索引,以增強查詢性能。它解釋了索引特定的JSON路徑的語法和好處,並列出了支持的數據庫系統。

文章討論了使用準備好的語句,輸入驗證和強密碼策略確保針對SQL注入和蠻力攻擊的MySQL。(159個字符)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1
強大的PHP整合開發環境