文档章节

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

Ld_kaiyuan
 Ld_kaiyuan
发布于 2017/02/15 11:27
字数 599
阅读 19
收藏 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
粉丝 2
博文 43
码字总数 7079
作品 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 properties详解

Hibernate properties Hibernate配置属性 属性名 用途 hibernate.dialect ;一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect hi...

7788
2014/04/02
0
0
SQL--( 初识 MyBatis)

MyBatis介绍 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手...

姜白告
08/06
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 参数设置一览表

属性名 用途 hibernate.dialect 一个HibernateDialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect hibernate.show_sql 输出所有SQL语句到控制台....

Zhao-Qian
2015/03/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

造谣造到t-io老巢了

只发当事人的截图,不发表评论,以免有引导嫌疑 PS1:截图是由不同的人发过来的 PS2:本人已经不在此微信群 PS3:图3是2018-09-23的t-io官方群的一个发言小统计,有助于让人认识到他们的其中...

talent-tan
22分钟前
31
0