`

Hibernate SQL优化技巧

    博客分类:
  • SSH
阅读更多

在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能够性能上的少许提升。

 

 


 

分享到:
评论

相关推荐

    Hibernate性能优化共9页.pdf.zip

    4. **HQL与SQL优化**:了解并熟练使用Hibernate查询语言(HQL)和Criteria API,以编写高效的查询。避免在查询中使用过于复杂的子查询,考虑使用JOINs来合并多个查询。 5. **实体设计与映射**:优化数据库表结构和...

    Hibernate4+Struts2+SQL写的简单的用户通讯录

    掌握基本的SQL语法和高级查询技巧,如JOIN、子查询、存储过程等,对于理解和优化项目至关重要。 项目的实现流程大致如下: 1. 使用Hibernate4配置数据库连接,建立实体类并映射到对应的数据库表。 2. 设计Struts2 ...

    spring_Framework+经典SQL语句大全+Hibernate中文API

    2. 经典SQL语句的教程或参考手册:这些资料可能包含了SQL的基本语法、高级特性、性能优化技巧等,有助于提升开发者对SQL的掌握程度。 3. Hibernate的中文API文档:对于初学者或者非英语为母语的开发者来说,中文API...

    Hibernate使用技巧共2页.pdf.zip

    【标题】"Hibernate使用技巧共2页.pdf.zip" 提供的文档主要聚焦于Hibernate这一流行的Java持久化框架的使用技巧。Hibernate是一个对象关系映射(ORM)工具,它简化了数据库与Java对象之间的交互,使得开发者可以使用...

    hibernate 持久层优化

    #### 五、其他优化技巧 除了上述提到的方法外,还有一些其他的技巧可以帮助进一步优化Hibernate持久层的性能: 1. **事务管理**:合理配置事务边界,确保最小化不必要的数据库锁定时间。 2. **连接池配置**:正确...

    hibernate优化前的程序

    在探讨Hibernate优化前的程序之前,我们先要理解Hibernate的核心概念和它的工作原理。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作,从而减轻了数据库编程的复杂...

    hibernate优化

    除此之外,还有其他优化技巧,如减少实体类的瞬态属性,使用代理类而非实体类进行查询,优化HQL和 Criteria查询,避免过多的实体继承,以及使用批量操作等。同时,确保数据库索引的合理设计也是提高性能的重要一环。...

    Hibernate程序性能优化.doc

    - **HQL优化技巧**:HQL的优化类似于SQL优化,可以通过减少不必要的联接、使用索引、避免在WHERE子句中使用函数等方式来提升查询效率。 - **使用索引**:为经常出现在WHERE子句或JOIN条件中的列创建索引,可以显著...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    在Java的持久化框架Hibernate中,开发者经常需要根据特定需求查询数据库并返回对象。`Hibernate3` 提供了丰富的API来实现这样的功能...在实际开发中,理解并熟练掌握这些技巧对于优化性能、提升代码可读性都至关重要。

    IBatisVSHibernate

    对于那些重视SQL优化、需要高度定制的项目,或者团队对SQL有深入理解的项目,IBatis可能是更好的选择。而如果追求开发效率,或者项目涉及到复杂的对象关系,Hibernate的ORM功能将提供很大的便利。无论选择哪个框架,...

    hibernate中文帮助文档

    9. **SQL生成与优化**: Hibernate可以自动生成SQL语句,但也可以手动定制。了解SQL可以帮助优化查询性能,尤其是在大数据量场景下。 10. **多对一、一对多、多对多关联映射**: Hibernate支持各种复杂的关联关系,如...

    hibernate教程打包下载,史上最全的HIBERNATE

    10. **性能优化**:教程可能涵盖如何优化Hibernate,例如批量操作、延迟加载、缓存策略调整、避免N+1查询问题等。 11. **实例分析**:通过实际项目案例,演示如何在Web应用(如Spring Boot)中整合Hibernate,解决...

    传智Hibernate框架资料

    **六、Hibernate的优化技巧** 1. **批处理**: 使用batch_size属性批量处理插入和更新,减少数据库交互次数。 2. **延迟加载**: 对于不立即使用的关联对象,使用懒加载以节省资源。 3. **缓存策略**: 合理使用二级...

    java面试题大全(struts+hibernate+uml+sql)

    5. SQL优化技巧,如避免全表扫描、合理使用索引和减少数据类型转换。 以上就是Java面试题大全中Struts、Hibernate、UML和SQL四大领域的核心知识点。理解和掌握这些内容,将有助于提升你在Java开发岗位上的竞争力。...

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    通过学习和掌握Hibernate的检索方式以及查询优化技巧,开发者能够更高效地与数据库交互,提高应用的性能。对于源码分析,理解Hibernate内部如何处理查询请求,以及如何通过工具(如Eclipse或IntelliJ IDEA的插件)...

    Hibernate3使用经验

    在开发过程中,有时我们需要查看 Hibernate 执行的 SQL 语句以便于调试或优化。可以通过以下两种方式来实现: 1. **Struts + Hibernate**:修改 `hibernate.cfg.xml` 文件中的配置。 ```xml &lt;hibernate-...

    hibernate参考手册中文版

    **Hibernate参考手册中文...通过阅读《Hibernate参考手册中文版》和《Hibernate开发指南》,你可以掌握Hibernate的使用技巧,提升Java应用程序的数据处理能力。这两个文档将帮助你理解和实践ORM,为项目开发带来便利。

    hibernate in action 中文版书籍

    7. **性能优化**:讲解如何针对特定场景优化Hibernate的使用,如延迟加载、批处理、连接池配置,以及避免N+1查询问题等。 8. **Hibernate与其他技术的整合**:介绍Hibernate如何与Spring框架、EJB、Web应用等进行...

    Hibernate电子书(全)

    ### Hibernate电子书(全)- 关键知识点解析 #### Hibernate简介 Hibernate是一种“对象/关系映射”...通过深入理解上述知识点,初学者可以快速掌握Hibernate的核心概念和使用技巧,为进一步的开发打下坚实的基础。

    Hibernate4.1.11中文手册

    通过《Hibernate4.1.11中文手册》,开发者不仅可以深入理解Hibernate的工作原理,还能掌握其在实际项目中的应用技巧,从而提高开发效率和软件质量。这份资源对于任何使用Java进行数据库开发的人来说,都是一份宝贵的...

Global site tag (gtag.js) - Google Analytics