更新后台设置时,会分多个页面更新同一个表中的数据,愿想是尽量减少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使用选择的更多相关文章

  1. mybatis insert update delete返回都是整型 0,1,增,删,改要提交事物

    mybatis insert update delete返回都是整型 0,1, 没有扔 增,删,改要提交事物

  2. mybatis批量update(mysql)

    Mapper文件中的写法 <insert id="batchUpdateTjData"> <foreach collection="list" ...

  3. Mybatis&orcale update语句中接收参数为对象

    Mybatis的 mapper.xml 中 update 语句使用 if 标签判断对像属性是否为空值. UserDTO是传过来参数的类型,userDTO是在mapperDao接口中给更新方法的参数起的 ...

  4. mybatis的update操作的几种动态更新

    mybatis是我们开发者常用的dao框架,亿轻巧灵活为特征,在crud操作中,动态更新是常用的操作.我搜集了两种动态更新的sql写法,以备日后备用! 方法1: update loan_product ...

  5. mybatis批量update,返回行数为-1

    mybatis批量更新返回结果为-1,是由于mybatis的defaultExExecutorType引起的,    它有三个执行器:SIMPLE 就是普通的执行器:REUSE 执行器会重用预处理语句 ...

  6. mybatis批量update操作的写法,及批量update报错的问题解决方法

    mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...

  7. Mybatis框架-update节点元素的使用

    今天我们学习一下mybatis框架中的update节点元素的使用 需求:修改用户表中的一条数据记录,修改编号为21的用户的密码 UserMapper.xml UserMapper.java 编写测试方 ...

  8. mybatis 批量update报语法错误解决方法

    1.为什么会报语法错误 原因:在 *.xml文件内使用了循环,在mybatis中默认是不允许使用批量修改. <update id="setMaxMin" parameterT ...

  9. MyBatis中update的使用

    当你传入所需要修改的值为一个实体对象时,可能只改动了其中部分的值.那么其他值需要做一个判断是否为空值的操作. XXXmapper.xml <update id="updateMembe ...

随机推荐

  1. TortoiseGit自动记住用户名密码的方法

    TortoiseGit自动记住用户名密码的方法 windows下比较比较好用的git客户端有2种: msysgit + TortoiseGit(乌龟git) GitHub for Windows gi ...

  2. 【OJ】 : 容斥原理计算出 1< =n < 1e9 中是2,3,5倍数的整数的数量

    最近ACM时遇到个题,题意如下. 问题描述: 有个1到n的数列,数一下其中能够被 2, 的时候有 ,,,,.这5个数满足条件,所以我们应该输出 5 . 输入 多组输入到文件尾,每组输入一个 n (n ...

  3. 小程序之map地图上不能在覆盖层

    问题:页面上有一个地图功能,地图上面有两个按钮,是需要覆盖在地图上的,在小程序编辑器中显示是没问题的,但是扫码测试后发现在手机上不显示这两个按钮 解决方法:使用cover-viwe标签包裹一下就可以了

  4. onpause 与 onresume

  5. 3. 使用vue-cli创建项目

    eslint: 用来做项目编码规范检查的工具基本原理: 定义了很多规则, 检查项目的代码一旦发现违背了某个规则就输出相应的提示信息有相应的配置, 可定制检查 1. 创建项目 vue脚手架(vue-cl ...

  6. module.exports小程序模块化,require

    小程序模块化 可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块.模块只有通过 module.exports 或者 exports 才能对外暴露接口. tips:exports 是 mo ...

  7. Anroid 搭建Maven私服(Android Studio)

    一.场景 ① 公司中有多个项目,多人开发,开发中的某一模块需要被其他几个项目的模块所依赖,最简单粗暴的方式就是打包成aar或者jar文件逐个拷贝到libs下进行依赖,可是这种方式太过于麻烦,而且需要每 ...

  8. cocos2dx spine之二 :spine变色

    cocos2dx版本为3.10 1.具体原理和代码可以参考博文<利用shader改变图片色相Hue>,下面的代码根据该博文进行整理优化. 基本原理就是将RGB值转换为HSL值后加上输入的H ...

  9. 在线html编辑器

    1.http://liveweave.com/ 2.有时间研究下这个. http://dabblet.com/gist/4034534 3.10个免费的在线编辑器. https://www.ev这个需 ...

  10. Go语言学习之5 进阶-排序、链表、二叉树、接口

    本节主要内容: 1. 结构体和方法2. 接口 1. 结构体和方法 (1). 用来自定义复杂数据结构     (2). struct里面可以包含多个字段(属性)     (3). struct类型可以定 ...