mybatis的update使用选择
更新后台设置时,会分多个页面更新同一个表中的数据,愿想是尽量减少sql请求数据量并且减少重复代码.
比如博客园的:

假如只有一个用户信息表,这样的话每个页面只更新部分字段.
这种情况下的更新推荐在xml写多个udpate对应多个页面.
不能用自动生成的update也尽量不要用updateSelective.
首先要做的是不需要update的字段移出xml,比如createTime
1.普通update的适用场合
单页面更新全部字段,有需要为null时也进行更新的字段.
如果个人信息页面有个选填的生日字段
2.updateSelective的使用场合
单页面或者多页面,有为null时不进行更新的字段.
如果个人信息页面有个选填的生日字段,不填的话应该是null,因为datetime不能插入‘‘‘’’的.
这种情况下单页面可以用updateSelective,多页面不能用
因为单页面可以在updateSelective中加一个没有<if test>更新字段,这样可以在更新时决定插入null
但是多页面更新,即使加了一个没有if test的更字段,页面1更新birthday,页面2不更新,
页面2更新的时候一样会把birthday改成null
所以用updateSelective的时候需要考虑可为空并且不为外键的字段,如果这张表中只有外键可为空,那么使用updateSelective没问题.
一般来说,字符串类型的字段尽量设置为not null,datetime这种不能设置为空字符的,只能选择自定义update了.
3.多个自定义update的使用场合
场合:多页面更新且有为null时也进行更新的字段,比如生日.
缺点就是需要筛选出对应的字段到不同的update中,稍微费点时间,多写了一点代码.
4.重复代码和sql请求数据量的对比
如果多页面更新,除了外键外都是not null字段,可以适用updateSelecticve也可以用多个update
如果后续维护添加非外键not null字段的可能性较大,就拆分成多个sql.
后期如果添加了一个字段,用updateselective和多个update都是
后台在xml mapper中加一个字段,pojo中加一个字段,基本工作量差不多.
5.外键更新
如果外键可以为null那就不加<if test>,比如商品分类的parent,最顶层的分类的parent为null
not null的外键,就加<if test>
mybatis的update使用选择的更多相关文章
- mybatis insert update delete返回都是整型 0,1,增,删,改要提交事物
mybatis insert update delete返回都是整型 0,1, 没有扔 增,删,改要提交事物
- mybatis批量update(mysql)
Mapper文件中的写法 <insert id="batchUpdateTjData"> <foreach collection="list" ...
- Mybatis&orcale update语句中接收参数为对象
Mybatis的 mapper.xml 中 update 语句使用 if 标签判断对像属性是否为空值. UserDTO是传过来参数的类型,userDTO是在mapperDao接口中给更新方法的参数起的 ...
- mybatis的update操作的几种动态更新
mybatis是我们开发者常用的dao框架,亿轻巧灵活为特征,在crud操作中,动态更新是常用的操作.我搜集了两种动态更新的sql写法,以备日后备用! 方法1: update loan_product ...
- mybatis批量update,返回行数为-1
mybatis批量更新返回结果为-1,是由于mybatis的defaultExExecutorType引起的, 它有三个执行器:SIMPLE 就是普通的执行器:REUSE 执行器会重用预处理语句 ...
- mybatis批量update操作的写法,及批量update报错的问题解决方法
mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...
- Mybatis框架-update节点元素的使用
今天我们学习一下mybatis框架中的update节点元素的使用 需求:修改用户表中的一条数据记录,修改编号为21的用户的密码 UserMapper.xml UserMapper.java 编写测试方 ...
- mybatis 批量update报语法错误解决方法
1.为什么会报语法错误 原因:在 *.xml文件内使用了循环,在mybatis中默认是不允许使用批量修改. <update id="setMaxMin" parameterT ...
- MyBatis中update的使用
当你传入所需要修改的值为一个实体对象时,可能只改动了其中部分的值.那么其他值需要做一个判断是否为空值的操作. XXXmapper.xml <update id="updateMembe ...
随机推荐
- python运维小技巧
以下实验均在Linux上进行 1.一秒钟启动一个下载服务器 python版本 python2: #python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 ...
- 51nod 1437 迈克步(单调栈)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1437 题意: 思路: 单调栈题.求出以每个数为区间最大值的区间范围即可. ...
- mybatis+spring boot, mapper 提示Could not autowire. No beans of … type found
工具及背景: IntelliJ IDEA 2016.1.3 Ultimate.spring boot, maven项目,利用mybatis 注解的方式查询mysql. 业务逻辑关系:controlle ...
- react native 渐变组件 react-native-linear-gradient
github: https://github.com/react-native-community/react-native-linear-gradient 安装:yarn add react-n ...
- C# 使用 protobuf 进行对象序列化与反序列化
protobuf 是 google的一个开源项目,可用于以下两种用途: (1)数据的存储(序列化和反序列化),类似于xml.json等: (2)制作网络通信协议. 源代码下载地址:https://gi ...
- php中if(\$a==\$b)和if(\$a=\$b)什么区别?
<?php // if($a==$b)和if($a=$b)什么区别? $a = 1; $b = 1; if ($a == $b) { // 通过 echo '通过'.PHP_EOL; } if ...
- NoSQL(not only struts query language)的简单介绍
为什么需要NoSQL? 互联网自扩大规模来一直面临3个问题 1.High performance高并发 一个网站开发实时生成动态页面可能会存在高并发请求的需求,硬盘IO已经无法接受 2.Huge St ...
- 给大一新生学习c程序的一些建议的一些建议
这是一篇给刚学习c程序的学弟们的一篇日志.如果想学好c程序,以及不想走太多弯路,希望能看一下这篇文章,如果说基础较好,或者说已经是大二,大三,这篇文章不会有什么帮助. 刚转到软件工程系,加了几个新生群 ...
- [原]关于helios自定义面板简述
想研究一下helios和自己仿真软件的适配,于是找了一下关于helios的使用 首先关于helios的使用有一个“vr2009”的发帖者有过很详细描述: http://www.insky.cn/bbs ...
- web 常用颜色
1. 推荐链接 RGB颜色值与十六进制颜色码转换工具 Web上16种基本颜色名称 WEB标准颜色 2. 个人常用 除了三原色,还有 #daf1ef#4DBCB0#ccc