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匿名函数使用&传参
function () { alert("error"); } //报错:匿名函数不能直接调用 使用 0x01 (function () { alert("Success ...
- Java开发中代码规范有哪些?
Java开发中所要遵守的编码规范大体上有如下7点.命名规范.注释规范.缩进排版规范.文件名规范.声明规范.语句规范以及编程规范. 1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z) ...
- SharePoint 2013 - Add-ins
1. App Web & Host Web The special website to which the app is deployed is called an App Web. The ...
- spring对数据库的操作、spring中事务管理的介绍与操作
jdbcTemplate的入门 创建maven工程 此处省略 导入依赖 <!-- https://mvnrepository.com/artifact/org.springframework/s ...
- 基于iframe的CFS(Cross Frame Script)和Clickjacking(点击劫持)攻击
攻击原理: CFS攻击(Cross Frame Script(跨框架脚本)攻击)是利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码 中加入scirpt,监视.盗取用户输入 ...
- [Err] 1214 - The used table type doesn't support FULLTEXT indexes
-- -- Table structure for table `film_text` -- -- InnoDB added FULLTEXT support in 5.6.10. If you us ...
- laravel5.4学习笔记
1.安装laravel可以直接用composer安装,然后用laravel new xxx来新建项目 服务器上安装了composer(php包管理工具)以后, composer global requ ...
- pip pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool
设置超时时间: pip --default-timeout=100 install Pillow
- 使用describe命令进行Kubernetes pod错误排查
我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段. 使用kubectl describe命令检查: 从错误消息 ...
- One Order行项目里Item Category是怎么计算出来的
One Order的行项目里有个字段叫Item Category,我们在行项目里加入一个product后,就会自动带出Item Category来.这个值是怎么计算出来的? 检查CRMD_ORDERA ...