Hibernate SQL优化技巧

在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提取的SQL格式化功能(JAVA代码) 从Hibernate中提取的SQL格式化功能,去除了没用的功能,没有第三方jar包 立即下载

相关推荐

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1867

Hibernate SQL优化小技巧使用dynamic-insert="true" dynamic-update="true"

在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以优化生成的SQL语句,提高SQL执行效率,最终可以提高系统性能。 如,有一个User类。 public class User { /** Creates a new instance of User */ public User() { ...

sun_gufeng的专栏 213

手把手教你为Multisim 14.0创建自定义元件:以SPICE模型导入为例

本文详细介绍了如何在Multisim 14.0中创建自定义元件,重点讲解了SPICE模型的导入与应用。通过系统性的步骤指南,包括元件符号设计、引脚定义、SPICE模型关联及验证测试,帮助工程师高效扩展元件库,满足特定设计需求。文章还提供了故障排除和性能优化的实用技巧,确保自定义元件在实际仿真中的可靠性。

weixin_42531163的博客 284

dynamic-update="true".dynamic-insert="true"的使用情况。

对于dynamic-insert的理解是当需要进行插入或保存操作的持久化实体时,如果该实体中的某一个属性为NULL,那么在插入语句中就不包括该属性,比  如一个Person有两个属性,一个是name,一个是description,那么当实例化一个Person时,如果description为NULL,那么Hibernate向数据库发送的sql语句就是insert into person(name

u014492098的专栏 3134

Arduino平台软硬件原理及使用——Arduino Uno板卡的使用

Arduino Uno板卡的基本使用

洪博hopes的博客 4173

【SOC估计】基于EKF与二阶RC等效电路模型的锂电池SOC在线估计算法实现与仿真分析

本文详细介绍了基于扩展卡尔曼滤波(EKF)与二阶RC等效电路模型的锂电池SOC在线估计算法。通过Matlab仿真分析,展示了该算法如何实现高精度SOC估计,相比传统方法显著提升估计精度与鲁棒性,适用于电动汽车、储能系统等关键领域。

1098

dynamic-insert="true" dynamic-update="true",插入默认值的情况

今天在做一个OA的简单增删除该查的时候,有一个时间类型的字段(数据插入时间),本身想着,这个字段直接中Oracle数据库设置一个Default Value ,就不用再前台install这个字段的值了,但是后时间操作中发现插入的时候如果不通过hql去写代码的话,而是通过hibernate的接口getHibernateTemplate().saveOrUpdate(entity);的话,就出现问题,插

涂作权的博客 3408

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 445

hibernate mysql 优化_MySQL性能优化(六):常见优化SQL的技巧

前期回顾:在面对不够优化、或者性能极差的SQL语句时,我们通常的想法是将重构这个SQL语句,让其查询的结果集和原来保持一样,并且希望SQL性能得以提升。而在重构SQL时,一般都有一定方法技巧可供参考,本文将介绍如何通过这些技巧方法来重构SQL。一、分解SQL有时候对于一个复杂SQL,我们首先想到的是是否需要将一个复杂SQL分解成多个简单SQL,来完成相同业务处理结果。在以前,大家总是强调需要数...

weixin_35000379的博客 273

ESP32-S3驱动OV3660摄像头原理图设计,已量产

本文重点拆四条主线:多来源输入电源如何收敛到 3V3,摄像头三路供电如何拆分,ESP32-S3 如何接住 DVP 数据流与外部存储,以及音频/补光/传感外围怎样挂到主控边上。至于最终图像帧率、算法策略和软件时序,当前原理图未体现。

不脱发的程序猿 981

JavaScript - Blob / File / base64 使用场景介绍与相互转换

前言 本文首先介绍一下这三种对象使用场景,最后介绍下它们之间互转格式的解决方案。 您前端一旦涉及到文件或图片上传到服务器, 就势必离不了Blob/File/base64三种主流的类型。 Blob MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 您可以观察到,像一些图片处理插件(例如有名的vue-cropper)图片裁剪插件, 它们将图片处理完毕后,都将使用blob对象返回处理好的图片,供开发者用于上传服务器。

🏆 前端领域优质创作者 4493

Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"

在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以优化生成的SQL语句,提高SQL执行效率,最终可以提高系统性能。 如果一个表的结构很复杂,字段很多的情况下,使用dynamic-insert,dynamic-update能够性能上的少许提升。 Hibernate的映射文件中,class元素中可以定义 dynami

u012038649的专栏 643

告别调参难!YOLO超参数优化指南(网格搜索+贝叶斯优化实战)

YOLO超参数优化的本质,不是“试遍所有参数”,而是“用工具化方法,在场景约束内找到最优平衡”——网格搜索稳、贝叶斯优化快,两者结合(先粗搜再精调)是工业场景的最优解。先定范围:基于工业场景(小目标/边缘设备/多类别)缩小参数搜索范围,避免无效探索。先调核心:优先优化数据增强、学习率、输入尺寸,这些参数对精度影响最大。工具赋能:用网格搜索+贝叶斯优化替代人工试错,再用TensorBoard监控,让调参“有据可依”。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 698

Hibernate SQL优化小技巧使用dynamic-insert="true" insert="true"

================testSaveUser================= Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?) ================testUpdateUser================= Hibernate: insert into Users (age...

weixin_30398227的博客 125

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

一文详解Hibernate

Configration接口。

优快云博客技术,java高级工程师,业务层架构师,高级管理认证,毕业设计可以联系我 1636

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MyBatis深度解析:特性、优缺点、适用场景与Hibernate对比

MyBatis 是一个开源的Java持久层框架,最初是Apache的iBatis项目,后于2010年迁移到Google Code并更名为MyBatis,现由GitHub维护。它通过XML或注解方式将SQL语句与Java对象映射,简化了数据库操作,同时保留了对SQL的完全控制。MyBatis作为一款轻量级、灵活的持久层框架,以其对SQL的完全控制和高性能在Java开发中占据重要地位。其优点包括灵活性、高性能和易集成,缺点在于SQL编写负担和动态SQL复杂性。

lssffy的博客 1414

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

使用Hibernate实现复杂数据库查询优化策略

使用Hibernate实现复杂数据库查询优化策略大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代的应用开发中,复杂数据库查询的优化是提升应用性能和响应速度的关键。Hibernate作为一个强大的ORM框架,不仅简化了数据持久化的操作,还能通过合理的配置和优化策略来提升复杂查询的执行效率...

weixin_36844141的博客 146

Hibernate优化方法

Hibernate优化方法一:批量修改和删除 在Hibernate 2中,如果需要对任何数据进行修改和删除操作,都需要先执行查询操作,在得到要修改或者删除的数据后,再对该数据进行相应的操作处理。在数据量少的情况下采用这种处理方式没有问题,但需要处理大量数据的时候就可能存在以下的问题: ◆占用大量的内存。 ◆需要多次执行update/delete语句,而每次执行只能处理一条数据。 以上两个...

guo_zifeng的专栏 183

Hibernate的优化方案

  使用参数绑定    使用绑定参数的原因是让数据库一次解析SQL,对后续的重复请求可以使用生成好的执行计划,这样做节省CPU时间和内存。    避免SQL注入。    尽量少使用NOT    如果where子句中包含not关键字,那么执行时该字段的索引失效。    尽量使用where来替换having    having在检索出所有记录后才对结果集进行过滤,这个处理需要一定的开销,而where子...

weixin_30505225的博客 85

Hibernate查询性能优化技巧

数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的。 SQL语句的优化        使用正确的SQL语句可以在很大程度上提高系统的查询性能。获得同样数据而采用不同方式的SQL语句在性能上的差距可能是十分巨大的。        由于Hibernate是对JDBC的封装,SQL语句的产生都是动态由Hibernate自动完成的。Hib

逍遥飞鹤的专栏 1万+

Hibernate 性能优化

一、应用 标签的 和 属性      问题:没有使用 和 属性,update或者insert 发起的hql 默认会更新所有的字段。              比如:Book book = hibernateDao.load(id);        book.setName("chen");       后台HQL  update book set name=?,price=?,date=?

忧郁王子的专栏 881
上一篇: hibernate去掉重复记录
下一篇: Hibernate Query的list()和iterate()的区别
moonights
博客等级 码龄20年 0粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值