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 ...
随机推荐
- _event
EventId 事件ID 请使用大于100的ID EventName 事件的名称,用于游戏中各种提示 NoticeText 事件开始时的弹窗内容 GossipText 功能宝石等菜单内容 Z ...
- 三: 爬虫之selenium模块
一 selenium模块 什么是selenium?selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. selenium最初是一个自动化测试工具, ...
- sqlserver 中常见的函数 数学函数
create table testnum( ID int identity(1,1), num float) insert testnum values (1) insert testnum valu ...
- linux JAVA_HOME和 java -version不匹配
~/.bashrc 中更新了jdk, JAVA_HOME 起效果了,但是java -version还是老的. 原因是/usr/bin/java 和usr/bin/javac是一个链接,得改. 使用 ...
- [calss*="col-"]匹配类名中包含col-的类名,^以col-开头,$以col-结尾
[class*= col-] 代表包含 col- 的类名 , 例 col-md-4 ,demo-col-2(这个是虚构的)等都可以匹配到. [class^=col-] 代表 以 col- 开头 ...
- python 文件保存 出错
如果你出现如下错误: file save failed encoding failed: 'latin-1' codec can't encode characters in position 57- ...
- vue-cli的webpack模板项目配置文件分析,配置信息详解
比较不错的一篇详解文章: 地址:http://blog.csdn.net/hongchh/article/details/55113751#comments
- 子数组最小值的总和 Sum of Subarray Minimums
2018-09-27 23:33:49 问题描述: 问题求解: 方法一.DP(MLE) 动态规划的想法应该是比较容易想到的解法了,因为非常的直观,但是本题的数据规模还是比较大的,如果直接使用动态规划, ...
- Feign
Feign简介 Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便. 它具有可插拔注释支持,包括Feign注解和JAX-RS注解.Feign还支持可插拔编码器 ...
- 中心极限定理 | central limit theorem | 大数定律 | law of large numbers
每个大学教材上都会提到这个定理,枯燥地给出了定义和公式,并没有解释来龙去脉,导致大多数人望而生畏,并没有理解它的美. <女士品茶>有感 待续~ 参考:怎样理解和区分中心极限定理与大数定律?