dynamic-insert和dynamic-update属性
dynamic-insert
作用:设置对象中没有值的字段 insert并不会对其进行插入.
实体类映射配置如下
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name实体类路径 table数据库表名 schema表的拥有者-->
<class name="entity.Emp" table="emp" schema="scott">
<!-- 此id属性表示 持久化的OID和表的主键映射
name为实体类中的属性名称 type为数据类型 column为数据库中的列名 -->
<id name="empno" type="java.lang.Integer" column="empno">
<!-- 此属性用于指定具体注解生成策略 assigned策略,就是不使用主键生成策略,由手工输入ID. -->
<generator class="assigned"/>
</id>
<!-- name为实体类中的属性名称 type为数据类型 column为数据库中的列名 not-null="true"表示不允许为空 -->
<property name="ename" type="string" not-null="true" column="ename"/>
<property name="deptNo" type="java.lang.Integer" column="deptNo"/>
<property name="job" type="string" column="job"/>
<property name="MGR" type="java.lang.Double" column="MGR"/>
<property name="hiretDate" type="java.sql.Date" column="hireDate"/>
<property name="sal" type="java.lang.Double" column="sal"/>
<property name="comm" type="java.lang.Double" column="comm"/>
</class>
</hibernate-mapping>
首先是设置了dynamic-insert属性的
public static void main(String[] args){
        EmpSerivce empSerivce = new EmpSerivce();
        Emp emp = new Emp();
        emp.setEmpno(7903);
        emp.setEname("张三");
        empSerivce.add(emp);
    }

结果如上,可以看到string类型未赋值的属性都没有对其进行插入,数值类型因为默认值是0所以会进行插入,deptNo因为是外键所以没有进行插入

没设置dynamic-insert属性的
public static void main(String[] args){
        EmpSerivce empSerivce = new EmpSerivce();
        Emp emp = new Emp();
        emp.setEmpno(7905);
        emp.setEname("张三");
        empSerivce.add(emp);
    }

结果如上 全部字段都进行了插入

dynamic-update
作用:设置对象空字段不对其进行更新
不设置dynamic-update
 public void updateEmp(){
        Transaction tx = null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            Emp empUpdate = empDao.update(7900);
            empUpdate.setSal(9999);
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            if(tx!=null)
                tx.rollback();  //回滚事务
        }
    }
可以看到在代码中我只更新了sal列

可以看到,对全部的列进行了更新

sal 列也变成了 9999
设置了dynamic-update

设置了之后只对我们更新过的列进行更新
总结
- dynam-insert:设置了此属性对中的空值并不会进行insert,数值型除外
- dynam-update:设置了此属性只对进行了改变的值进行更新
dynamic-insert和dynamic-update属性的更多相关文章
- 【MyBatis源码分析】insert方法、update方法、delete方法处理流程(下篇)
		Configuration的newStatementHandler分析 SimpleExecutor的doUpdate方法上文有分析过: public int doUpdate(MappedState ... 
- 【C# 基础概念】C# 4 dynamic - var, object, dynamic的区别以及dynamic的使用
		阅读目录: 一. 为什么是它们三个 二. 能够任意赋值的原因 三. dynamic的用法 四. 使用dynamic的注意事项 一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似.你 ... 
- MongoDB中insert方法、update方法、save方法简单对比
		MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ... 
- MySQL优化--INSERT ON DUPLICATE UPDATE死锁
		INSERT ON DUPLICATE UPDATE与死锁 在MySQL中提供两种插入更新的方式:REPLACE INTO和INSERT ON DUPLICATE UPDATE,简化了“存在则更新,不 ... 
- sqlalchemy insert on duplicate update
		sqlalchemy insert on duplicate update from sqlalchemy.dialects.mysql import insert insert_stmt = ins ... 
- C#动态对象(dynamic)示例(实现方法和属性的动态)
		C#的动态对象的属性实现比较简单,如果要实现动态语言那种动态方法就比较困难,因为对于dynamic对象,扩展方法,匿名方法都是不能用直接的,这里还是利用对象和委托来模拟这种动态方法的实现,看起来有点J ... 
- 8.INSERT INTO 语句 UPDATE 语句
		1. INSERT INTO 语句 INSERT INTO 语句用于向表格中插入新的行. 语法 INSERT INTO 表名称 VALUES (值1, 值2,....) INSERT INTO Per ... 
- MyBatis从入门到精通(第2章):MyBatis XML方式的基本用法【insert用法、update用法、delete用法】
		2.4 insert 用法 2.4.1 简单的 insert方法 在接口 UserMapper.java 中添加如下方法. /** * 新增用户 * @param sysUser * @retur ... 
- php +mysql 添加 删除 修改 insert into delete update
		INSERT INTO 插入数据库 $sql = "INSERT INTO subject (uid,fun,title) VALUES (3,88,'语文')"; $query ... 
- SQL Insert  Case When Update
		CREATE TABLE LoadTestTable ( ID INT IDENTITY(1,1), FIRSTNAME VARCHAR(50), LASTNAME VARCHAR(50), GEND ... 
随机推荐
- js数组的sort排序的原理和应用
			1.js sort()方法的应用: 首先:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串( ... 
- LotusScript_文档查询循环方法整理
			1. 视图(View)查询 ... Set view = db.GetView("ViewName") Set doc = view.GetFirstDocument While ... 
- import模块后查找模块的绝对路径
			>>> import bsddb3>>> bsddb3.__file__'/usr/local/lib/python2.6/site-packages/bsddb3 ... 
- Java性能调优实践
			1 导论 JVM主要有两类调优标志:布尔标志和附带参数标志 布尔标志:-XX:+FlagName表示开启,-XX:-FlagName表示关闭. 附带参数标志:-XX:FlagName=somethi ... 
- IOS 社交分享
			#import <Social/Social.h> @interface HMViewController () @end @implementation HMViewController ... 
- IOS  即时通讯的框架 配置环境
			一.了解XMPP 协议(标准)XMPP 即时通讯协议SGIP 短信网关协议 这手机发短信 移动支付和网页支付 0x23232[0,1] 0x23232 0x23232 0x23232 只有协议,必须会 ... 
- sql server 数据库还原后sa连接不上原因
			手动创建了一个同名数据库,然后还原以前或者别人的备份,还原虽然成功了,但是在VS中连接不上,原因可能是: 数据库的所有者中没有添加sa,方法即在数据库名上右击,然后选择文件,在所有者中添加上sa,应该 ... 
- Android(java)学习笔记50:通过反射获取成员变量和成员方法并且使用
			1. 反射获取成员变量并且使用: (1)获取字节码文件对象: Class c = Class.forName("cn.itcast_01.Person"); (2) ... 
- bzoj 3339 莫队
			题意: 求任意一个区间的SG函数. 想到线段树,但是线段树合并很麻烦. 线段树——分块. 分块的一个应用就是莫队算法. 怎么暴力递推呢? 从一个区间到另一个区间,Ans 取决于 Ans 和 加入和删除 ... 
- 贪心,Gene Assembly,ZOJ(1076)
			题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=76 解题报告: 1.类似活动安排问题. 2.输出格式要注意. #inc ... 
