文档章节

java优化Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

Ld_kaiyuan
 Ld_kaiyuan
发布于 2017/02/15 11:27
字数 599
阅读 21
收藏 0

最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate

如果是在配置文件的话那就是dynamic -insert 和 dynamic-update 例如:“<</SPAN>class name="model.User" table="Users" dynamic-insert="true" dynamic-update="true">”

这两个注解在一定程度上可以增加与数据库操作相关的速度,可以节省SQL语句的执行时间,提高程序的运行效率。

使用这两个注解只需要在实体类上加入即可,或者在*.hbm.xml配置。这两个注解是boolean值,true或者false

1.首先使用false来看一下执行的结果,我们就拿更新来举例:

  a.数据库的数据是这样的:

  

B.实体类的代码 :

C、测试类代码:

D. 执行测试方法后大家可以看到:

  E.我只更新了Description这个属性,但是却把整个对象的属性都更新了,这在一定程度是影响了效率。而且可能并不是我们希望的结果,我们希望的结果是我更改了哪些,字段就只要更新我修改的字段就可以了,接下来我们把@DynamicUpdate(false)改为@DynamicUpdate(true) 测试一下 ,结果如下

神奇了,这就是见证奇迹的时刻,达到了我们的目的,只更新我们修改过的字段。@DynamicInsert我就不举例了。

 测试之后可以知道:

在Hibernate中可以利用@DynamicInsert和@DynamicUpdate生成动态SQL语句,即在插入和修改数据的时候,语句中只包括要插入或者修改的字段。


dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
请注意dynamic-update和dynamic-insert的设置并不会继承到子类, 所以在或者元素中可能 需要再次设置

性能问题:SQL update语句是预先生成的,如果加上dynamic的话,每次update的时候需要扫描每个属性的更改,然后生成update,效率会稍微有点影响。

当然还有其他的方式达到这种效果,比如使用session为我们提供的merge方法,也是可以的

© 著作权归作者所有

共有 人打赏支持
Ld_kaiyuan
粉丝 3
博文 43
码字总数 7079
作品 0
朝阳
程序员
私信 提问
MyBatis源码窥探:MyBatis整体架构解析

Mybatis的使用这里就不介绍了,不知道怎么使用的朋友可以点击 http://www.mybatis.org/mybatis-3/zh/index.html 这里面的教程很详细,包括xml的配置、映射、动态sql都有介绍,可以学习和使用...

java邵先生
01/15
0
0
Hibernate4实战 之第六部分:基本实现原理

整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Session打开事务 5:通过session的api操作数据库 6:事务提...

jinnianshilongnian
2012/06/29
0
0
hibernate xml配置文件参数详解

Hibernate 参数设置一览表 表 3.4. Hibernate JDBC和连接(connection)属性 表 3.5. Hibernate缓存属性 表 3.6. Hibernate事务属性 表 3.7. 其他属性 你应当总是为你的数据库将hibernate.dia...

laigous
2013/01/17
0
0
让Hibernate输出SQL语句参数配置

在J2ee应用中,如果采用Hibernate框架,可以自动建立数据库实体与Java实体类的映射关系,大大方便Java程序进行持久化对象访问和操作,从而明显提高企业应用开发效率,减轻Java程序与后台数据...

java-苦苦甜甜
2013/06/04
0
0
【Hibernate系列】Hibernate 参数设置一览表

属性名 用途 表 3.4. Hibernate JDBC和连接(connection)属性 表 3.5. Hibernate缓存属性 表 3.6. Hibernate事务属性 表 3.7. 其他属性 你应当总是为你的数据库将hibernate.dialect属性设置成...

磊神Ray
2012/02/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
31分钟前
0
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
32分钟前
0
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
49分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
53分钟前
2
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部