利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
来源:互联网 发布:sql 查询年龄最大的人 编辑:程序博客网 时间:2024/06/06 20:31
最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate
如果是在配置文件的话那就是dynamic -insert 和 dynamic-update
这两个注解在一定程度上可以增加与数据库操作相关的速度,可以节省SQL语句的执行时间,提高程序的运行效率。
使用这两个注解只需要在实体类上加入即可,或者在*.hbm.xml配置。这两个注解是boolean值,true或者false。
1.首先使用false来看一下执行的结果,我们就拿更新来举例:
a.数据库的数据是这样的:
b、实体类的代码
C、测试类代码:
执行测试方法后大家可以看到:
我只更新了Description这个属性,但是却把整个对象的属性都更新了,这在一定程度是影响了效率。而且可能并不是我们希望的结果,我们希望的结果是我更改了哪些
字段就只要更新我修改的字段就可以了,接下来我们把@DynamicUpdate(false)改为@DynamicUpdate(true) 测试一下 ,结果如下
神奇了,这就是见证奇迹的时刻,达到了我们的目的,只更新我们修改过的字段。@DynamicInsert我就不举例了。
测试之后可以知道:
在hibernate中可以利用@DynamicInsert和@DynamicUpdate生成动态SQL语句,即在插入和修改数据的时候,语句中只包括要插入或者修改的字段。
当然还有其他的方式达到这种效果,比如使用session为我们提供的merge方法,也是可以的。
-------------------------------------------------------------------------------------------
最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate
如果是在配置文件的话那就是dynamic -insert 和 dynamic-update
这两个注解在一定程度上可以增加与数据库操作相关的速度,可以节省SQL语句的执行时间,提高程序的运行效率。
使用这两个注解只需要在实体类上加入即可,或者在*.hbm.xml配置。这两个注解是boolean值,true或者false。
1.首先使用false来看一下执行的结果,我们就拿更新来举例:
a.数据库的数据是这样的:
b、实体类的代码
C、测试类代码:
执行测试方法后大家可以看到:
我只更新了Description这个属性,但是却把整个对象的属性都更新了,这在一定程度是影响了效率。而且可能并不是我们希望的结果,我们希望的结果是我更改了哪些
字段就只要更新我修改的字段就可以了,接下来我们把@DynamicUpdate(false)改为@DynamicUpdate(true) 测试一下 ,结果如下
神奇了,这就是见证奇迹的时刻,达到了我们的目的,只更新我们修改过的字段。@DynamicInsert我就不举例了。
测试之后可以知道:
在hibernate中可以利用@DynamicInsert和@DynamicUpdate生成动态SQL语句,即在插入和修改数据的时候,语句中只包括要插入或者修改的字段。
当然还有其他的方式达到这种效果,比如使用session为我们提供的merge方法,也是可以的。
@DynamicUpdate(true) @DynamicInsert(true)使用的环境
3.1 getCurrentSession ()
注意:1,使用 SessionFactory.getCurrentSession() 需要在hibernate.cfg.xml 中如下配置:
2,使用的是
3.2 openSession()
注意:1,使用的是
在应用程序中,如果 DAO 层使用 Spring 的 hibernate 模板,通过 Spring 来控制 session的生命周期,则应该 getCurrentSession ()。
http://blog.csdn.net/u010161082/article/details/46469753
最近新搭了个项目,是用maven构建springmvc+hibernate+junit+easyui。是用注解的方式。
前几天在一个博客(http://www.cnblogs.com/quanyongan/p/3152290.html)上看到@DynamicInsert(true) @DynamicUpdate(true)的用法,达到了只更新我们修改过的字段,故引入这两个注解。但直到今天才开始进行测试,单元测试代码如下:
测试之后发现,无论是插入的值,还是更新的值都没有同步到数据表中,经过百度一下,才知道问题所在:单元测试是用AbstractTransactionalJUnit4SpringContextTests进行的,而AbstractTransactionalJUnit4SpringContextTests执行默认是会回滚,可能是为了避免出现脏数据吧!故加@Rollback(false)即可!!!
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- 在webstorm中配置sass环境
- c语言实现扫雷
- curl get and post sample(转)
- [IMWeb训练营作业]vuejs仿写朋友圈
- 线性表
- 利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Matlab绘制箱线图
- STM32-USB模块
- android 7.0 Settings 省电模式
- 如何理解指向指针的指针?
- java.lang.String.contains包
- java 代码优化
- wampserver 更改端口仍然无法访问的解决方法
- 关于c++map