当前位置: 首页 > news >正文

Hibernate SQL优化小技巧使用dynamic-insert=true insert=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允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中<property 元素中的update属性设置成为false,那么这个字段,将不被包括在基本的update语句中,修改的时候,将不包括这个字段了.insert同理.dynamic动态SQL语句的配置也是很常用的.下面介绍配置SQL语句的具体属性:       1)<property>元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true       2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true       3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true       4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false       5)<property>元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false       6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false       7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false

      Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.

转载于:https://www.cnblogs.com/xigua1hao/p/Hibernate.html

相关文章:

  • mui页面传值
  • js中for循环的研究
  • HDU 3709 Balanced Number(数位DP)题解
  • 【笔记】最长递增子序列 Longest increasing subsequence(LIS)
  • c# 修改xml格式config文件
  • 【知识碎片】第三方登录弹窗效果
  • VMware虚拟机中为Linux 添加虚拟硬盘(VirtualBox方法类似)
  • Robot Framwork 问题小记
  • 给MySQL增加一个表示例
  • 复变函数:复函数的空间与Montel定理
  • sed使用命令记录
  • db2模式
  • 配置企业库5.0管理
  • SuperMicro(超微)IPMI安装操作系统KVM教程-超微3U8刀服务器
  • Python cookbook笔记——求N个最大最小元素及lambda表达式
  • [译]前端离线指南(上)
  • 230. Kth Smallest Element in a BST
  • Angular数据绑定机制
  • CSS 专业技巧
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker 笔记(2):Dockerfile
  • Fastjson的基本使用方法大全
  • IDEA 插件开发入门教程
  • iOS 系统授权开发
  • js正则,这点儿就够用了
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Shadow DOM 内部构造及如何构建独立组件
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Yii源码解读-服务定位器(Service Locator)
  • 代理模式
  • 翻译--Thinking in React
  • 反思总结然后整装待发
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 嵌入式文件系统
  • 区块链共识机制优缺点对比都是什么
  • 使用SAX解析XML
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 2017年360最后一道编程题
  • Spring第一个helloWorld
  • 积累各种好的链接
  • 如何正确理解,内页权重高于首页?
  • 树莓派用上kodexplorer也能玩成私有网盘
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 透过事物看本质的能力怎么培养?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (1)(1.13) SiK无线电高级配置(六)
  • (Note)C++中的继承方式
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (简单) HDU 2612 Find a way,BFS。
  • ******之网络***——物理***
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 设计模式—适配器模式(Adapter Pattern)