Hibernate查询语言
14.1. 批量插入(Batch inserts) 如果要将很多对象持久化,你必须通过经常的调用 flush() 以及稍后调用 clear() 来控制第一级缓存的大小。 Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); if ( i % 20 == 0 ) { //20, same as the JDBC batch size //20,与JDBC批量设置相同 //flush a batch of inserts and release memory: //将本批插入的对象立即写入数据库并释放内存 session.flush(); session.clear(); } } tx.commit(); session.close(); 14.2. 批量更新(Batch updates) 【Hibernate查询语言】是ORM框架Hibernate中用于操作数据库的重要组件,它提供了面向对象的查询机制,使得开发者可以更方便地处理数据库数据。本篇主要讨论批量插入和批量更新,以及HQL(Hibernate Query Language)的一些关键特性。 14.1. 批量插入(Batch Inserts) 批量插入是一种提高数据库操作效率的技术,特别是在处理大量数据时。在Hibernate中,可以通过控制Session的flush()和clear()方法来实现批量操作。以下是一个示例: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for (int i = 0; i < 100000; i++) { Customer customer = new Customer(.....); session.save(customer); if (i % 20 == 0) { // 每20条数据执行一次flush和clear session.flush(); // 将本批插入的对象写入数据库 session.clear(); // 清除缓存,释放内存 } } tx.commit(); session.close(); ``` 这里,每20个对象后调用一次flush()和clear(),以控制一级缓存大小并减少与数据库的交互次数,从而提高性能。需要注意的是,这里的20与JDBC的批量设置(batch size)相匹配。 14.2. 批量更新(Batch Updates) 批量更新与批量插入类似,不过涉及到的是对已存在数据的修改。批量更新的实现方式通常会结合HQL或者SQL语句,例如通过Session的createQuery()方法创建HQL更新语句,然后调用executeUpdate()执行更新操作。 15. HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它的语法类似于SQL,但更加面向对象,支持继承、多态和关联等特性。 15.1. 大小写敏感性 HQL对Java类和属性名称是大小写敏感的,但关键字和别名不区分大小写。推荐使用小写关键字以提高可读性,但当与Java代码混合时,大写关键字可能会显得不协调。 15.2. from子句 from子句用于指定要查询的类,可以使用别名简化查询。例如,`from Cat` 返回所有Cat实例,通常不需要类的全限定名,因为默认开启自动导入。可以指定别名如`from Cat as cat`,以便在后续查询中使用。 15.3. 关联(Association)与连接(Join) HQL支持多种类型的连接,如内连接(inner join)、左外连接(left outer join)、右外连接(right outer join)和全连接(full join)。例如: ```sql from Cat as cat inner join cat.mate as mate left outer join cat.kittens as kitten ``` `fetch`连接用于在查询中一次性加载关联的对象或集合,以替代延迟加载。例如: ```sql from Cat as cat inner join fetch cat.mate left join fetch cat.kittens ``` 这将确保在获取Cat对象的同时加载其mate和kittens属性,避免后续的额外查询。 Hibernate查询语言通过提供HQL和批量操作,使得在Java应用程序中进行数据库操作更加高效和便捷。理解并熟练掌握这些特性,能够极大地提升开发效率和应用性能。
剩余16页未读,继续阅读
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip