在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以优化生成的SQL语句,提高SQL执行效率,最终可以提高系统性能。
如,有一个User类。
public class User {
/** Creates a new instance of User */
public User() {
}
private long id;
private int age;
private String firstname;
private String lastname;
private Set emailAddresses;
//省略getter 和setter方法
}
Hibernate映射文件(User.hbm.xml,省略了文件头声明)定义为:
<hibernate-mapping>
<class name="model.User" table="Users" >
<id name="id" column="ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="firstname"/>
<property name="lastname"/>
<set name="emailAddresses" table="PERSON_EMAIL_ADDR">
<key column="PERSON_ID"/>
<element type="string" column="EMAIL_ADDR"/>
</set>
</class>
</hibernate-mapping>
我们写一个测试类进行测试UserTest。
public class UserTest extends TestCase {
public UserTest(String testName) {
super(testName);
}
private Session session;
private SessionFactory sessionFactory;
protected void setUp() throws Exception {
sessionFactory=HibernateUtil.getSessionFactory();
session=sessionFactory.openSession();
session.getTransaction().begin();
}
protected void tearDown() throws Exception {
session.getTransaction().commit();
session.close();
}
/**
* Test of getAge method, of class model.User.
*/
public void testSaveUser() {
System.out.println("================testSaveUser=================");
User user = new User();
user.setAge(29);
session.save(user);
assertNotNull("id is assigned !",user.getId());
}
public void testUpdateUser() {
System.out.println("================testUpdateUser=================");
User user = new User();
user.setAge(29);
session.save(user);
assertNotNull("id is assigned !",user.getId());
User _user=(User) session.get(User.class, user.getId());
_user.setFirstname("Array");
session.update(_user);
}
}
运行测试后,此时会生成完整的SQL语句(注意将hibernate属性show_sql设置成true)。
================testSaveUser=================
Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)
================testUpdateUser=================
Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)
Hibernate: update Users set age=?, firstname=?, lastname=? where ID=?
如果我们在<class ...>中加上 dynamic-insert="true" dynamic-update="true",变成如下。
<class name="model.User" table="Users" dynamic-insert="true" dynamic-update="true">
再次运行测试类,就会发现生成的SQL中涉及的字段只包含User类中修改的属性所对应的表字段。
================testSaveUser=================
Hibernate: insert into Users (age) values (?)
================testUpdateUser=================
Hibernate: insert into Users (age) values (?)
Hibernate: update Users set firstname=? where ID=?
如果一个表的结构很复杂,字段很多的情况下,使用dynamic-insert,dynamic-update能够性能上的少许提升。
分享到:
相关推荐
4. **HQL与SQL优化**:了解并熟练使用Hibernate查询语言(HQL)和Criteria API,以编写高效的查询。避免在查询中使用过于复杂的子查询,考虑使用JOINs来合并多个查询。 5. **实体设计与映射**:优化数据库表结构和...
掌握基本的SQL语法和高级查询技巧,如JOIN、子查询、存储过程等,对于理解和优化项目至关重要。 项目的实现流程大致如下: 1. 使用Hibernate4配置数据库连接,建立实体类并映射到对应的数据库表。 2. 设计Struts2 ...
2. 经典SQL语句的教程或参考手册:这些资料可能包含了SQL的基本语法、高级特性、性能优化技巧等,有助于提升开发者对SQL的掌握程度。 3. Hibernate的中文API文档:对于初学者或者非英语为母语的开发者来说,中文API...
【标题】"Hibernate使用技巧共2页.pdf.zip" 提供的文档主要聚焦于Hibernate这一流行的Java持久化框架的使用技巧。Hibernate是一个对象关系映射(ORM)工具,它简化了数据库与Java对象之间的交互,使得开发者可以使用...
#### 五、其他优化技巧 除了上述提到的方法外,还有一些其他的技巧可以帮助进一步优化Hibernate持久层的性能: 1. **事务管理**:合理配置事务边界,确保最小化不必要的数据库锁定时间。 2. **连接池配置**:正确...
在探讨Hibernate优化前的程序之前,我们先要理解Hibernate的核心概念和它的工作原理。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作,从而减轻了数据库编程的复杂...
除此之外,还有其他优化技巧,如减少实体类的瞬态属性,使用代理类而非实体类进行查询,优化HQL和 Criteria查询,避免过多的实体继承,以及使用批量操作等。同时,确保数据库索引的合理设计也是提高性能的重要一环。...
- **HQL优化技巧**:HQL的优化类似于SQL优化,可以通过减少不必要的联接、使用索引、避免在WHERE子句中使用函数等方式来提升查询效率。 - **使用索引**:为经常出现在WHERE子句或JOIN条件中的列创建索引,可以显著...
在Java的持久化框架Hibernate中,开发者经常需要根据特定需求查询数据库并返回对象。`Hibernate3` 提供了丰富的API来实现这样的功能...在实际开发中,理解并熟练掌握这些技巧对于优化性能、提升代码可读性都至关重要。
对于那些重视SQL优化、需要高度定制的项目,或者团队对SQL有深入理解的项目,IBatis可能是更好的选择。而如果追求开发效率,或者项目涉及到复杂的对象关系,Hibernate的ORM功能将提供很大的便利。无论选择哪个框架,...
9. **SQL生成与优化**: Hibernate可以自动生成SQL语句,但也可以手动定制。了解SQL可以帮助优化查询性能,尤其是在大数据量场景下。 10. **多对一、一对多、多对多关联映射**: Hibernate支持各种复杂的关联关系,如...
10. **性能优化**:教程可能涵盖如何优化Hibernate,例如批量操作、延迟加载、缓存策略调整、避免N+1查询问题等。 11. **实例分析**:通过实际项目案例,演示如何在Web应用(如Spring Boot)中整合Hibernate,解决...
**六、Hibernate的优化技巧** 1. **批处理**: 使用batch_size属性批量处理插入和更新,减少数据库交互次数。 2. **延迟加载**: 对于不立即使用的关联对象,使用懒加载以节省资源。 3. **缓存策略**: 合理使用二级...
5. SQL优化技巧,如避免全表扫描、合理使用索引和减少数据类型转换。 以上就是Java面试题大全中Struts、Hibernate、UML和SQL四大领域的核心知识点。理解和掌握这些内容,将有助于提升你在Java开发岗位上的竞争力。...
通过学习和掌握Hibernate的检索方式以及查询优化技巧,开发者能够更高效地与数据库交互,提高应用的性能。对于源码分析,理解Hibernate内部如何处理查询请求,以及如何通过工具(如Eclipse或IntelliJ IDEA的插件)...
在开发过程中,有时我们需要查看 Hibernate 执行的 SQL 语句以便于调试或优化。可以通过以下两种方式来实现: 1. **Struts + Hibernate**:修改 `hibernate.cfg.xml` 文件中的配置。 ```xml <hibernate-...
**Hibernate参考手册中文...通过阅读《Hibernate参考手册中文版》和《Hibernate开发指南》,你可以掌握Hibernate的使用技巧,提升Java应用程序的数据处理能力。这两个文档将帮助你理解和实践ORM,为项目开发带来便利。
7. **性能优化**:讲解如何针对特定场景优化Hibernate的使用,如延迟加载、批处理、连接池配置,以及避免N+1查询问题等。 8. **Hibernate与其他技术的整合**:介绍Hibernate如何与Spring框架、EJB、Web应用等进行...
### Hibernate电子书(全)- 关键知识点解析 #### Hibernate简介 Hibernate是一种“对象/关系映射”...通过深入理解上述知识点,初学者可以快速掌握Hibernate的核心概念和使用技巧,为进一步的开发打下坚实的基础。
通过《Hibernate4.1.11中文手册》,开发者不仅可以深入理解Hibernate的工作原理,还能掌握其在实际项目中的应用技巧,从而提高开发效率和软件质量。这份资源对于任何使用Java进行数据库开发的人来说,都是一份宝贵的...