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>
最新文章
- html基础学习
- (转)如何在一台电脑上开启多个tomcat 和配置让系统识别哪个具体的tomcat
- (四)装饰模式-C++实现
- 那些强悍的PHP一句话后门
- SoapUI接口测试之实战运用操作(五)
- 【python】Python 3 +pycharm中文支持解决方案
- 缓存淘汰算法 (http://flychao88.iteye.com/blog/1977653)
- linux 命令行更新sdk
- Palindrome Number 回文数
- React/React Native的 ES5 ES6 写法对照
- 用WIFI为什么连不上VPN
- javacsript (十) 数据类型
- hdu_4897_Little Devil I(树链剖分)
- Spring Boot: Yaml配置文件 以及 @ConfigurationProperties属性获取
- html_基础标签
- POJ 3243 // HDU 2815(改下输出,加个判断)
- 巧用CSS3 :target 伪类制作Dropdown下拉菜单(无JS)
- CodeForces 569B Inventory 货物编号
- 【大数据系列】windows搭建hadoop开发环境
- zabbix的深入了解
热门文章
- Dockerize a .NET Core application
- GTK 菜单的创建详解
- HDU 3526 Computer Assembling(最小割)
- 2019年前端面试题 | CSS篇 (更新于4月15日)
- python3 session cookie
- openlayer ol.js和ol-debug.js的使用 调试技巧
- 【Mysql】【Navicat For Mac】Navicat Premium for Mac v12.0.23 + macOS Sierra 10.12.6
- _pvp_gap_aura
- P1005 矩阵取数游戏
- 二: vue的属性及功能,axios