解决mybatis update并非所有字段需要更新问题
目录
- mybatis update并非所有字段需要更新
- 解决办法
- mybatis update时遇到的问题
mybatis update并非所有字段需要更新
mybatis update
需求:更新字段作为参数,未更新字段不传入
解决办法
<update id="updateUser" parameterType="com.test.entity.User"> update BS_USER <trim prefix="set" suffixOverrides=","> <if test="ACCOUNT != null">ACCOUNT=#{ACCOUNT},</if> <if test="NAME != null">NAME=#{NAME},</if> <if test="PROV != null">PROV=#{PROV},</if> <if test="FAILURE_TIME != null">FAILURE_TIME=#{FAILURE_TIME},</if> </trim> where USERID=#{USERID} </update>
将set标签换成<trim prefix="set"></tirm>
标签中suffixOverrides=","的意思是最后一个去掉逗号
mybatis update时遇到的问题
xml是这么写的
<update id="deleteAll" parameterType="java.util.List" > update cw_base_resident_house_ref a set state = 0 where 1=1 and a.ID in <foreach item="item" collection="list" separator="," open="(" close=")" index=""> #{item.refId} </foreach> </update>
之后运行报错,就是返回的类型不对
原来是service和mapper里的类型错了,定义的是list,应该定义为int。
因为 update/delete,返回值是:影响的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
使用MyBatis 动态update数据
使用mybatis写sql,需要动态更新对象数据,每次需要更新的字段不同,为了防止null空异常,就需要用动态sql了, <update id="update" parameterType="com.commuli.po.User"> update s_user <trim prefix="set" suffixOverrides=","> <if test="name!=null&qu
-
Mybatis中使用updateBatch进行批量更新
背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新.(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的操作放到数据库端,在业务代码端展现的就是一次性更新所有数据).两种方式各有利弊,下面将会对两种方式的利弊做简要分析,主要介绍第二种方式在mybatis中的实现. 逐条更新 这种方式显然是最简单,也最不容易出错的,即便出错也只是影响到当条出错的数据,而且可以对每条数据都比较可控,更新失败或成功,从什么内容更新到什么内容,都可以在逻辑代码
-
mybatis update更新字段的使用操作
多个mapper方法,更新单字段 说实话不太推荐,因为如果有10个字段要更新,难道写10个方法. 但是实际中很多人都这么写. 通用mapper方法,java代码控制字段 特点是一个mapper方法包含所有字段,不为空的就update. 但是需要控制入参,一般有2中方式: new 一个对象然后set id和要改的字段 如果字段多比较费劲,需要一个一个set. 查询出对象,然后set要改的字段 这2种方式差不多,就是代码看起来不一样. 特别注意,定位字段不要加if 要更新的字段加if没有什么问题 但
-
mybatis-plus update更新操作的三种方式(小结)
目录 1.@ 根据id更新 2.@ 条件构造器作为参数进行更新 3.@ lambda构造器 mybatisplus update语句为null时没有拼接上去 1.@ 根据id更新 User user = new User(); user.setUserId(1); user.setAge(29); userMapper.updateById(user); 2.@ 条件构造器作为参数进行更新 //把名字为rhb的用户年龄更新为18,其他属性不变 UpdateWrapper<User> updat
-
解决mybatis update并非所有字段需要更新问题
目录 mybatis update并非所有字段需要更新 解决办法 mybatis update时遇到的问题 mybatis update并非所有字段需要更新 mybatis update 需求:更新字段作为参数,未更新字段不传入 解决办法 <update id="updateUser" parameterType="com.test.entity.User"> update BS_USER <trim prefix="set"
-
解决mybatis使用char类型字段查询oracle数据库时结果返回null问题
同事在学mybatis时,遇到了一个问题就是,使用char类型字段作为查询条件时一直都查不出数据,其他类型的则可以. 使用的数据库是oracle,查询条件字段类型是char(50),java代码对应的是String类型. 后来经过排查,是由于在oracle中,char类型字段,如果内容长度不够,会自动以空格方式补足长度.如字段 name char(5),若值为sgl,那么oracle会自动用空格补足长度,最终值为sgl. 一.解决方法: 方法1:先用trim()函数把值去掉两边空格再作为条件查询
-
解决mybatis批量更新(update foreach)失败的问题
如下所示: <!--批量更新报表 --> <update id="updateIssueByBatch" parameterType="java.util.List"> <foreach collection="issueList" item="item" index="index" separator=";"> update sys_issue &l
-
解决Mybatis中mapper.xml文件update,delete及insert返回值问题
最近写了几个非常简单的接口(CRUD),在单元测试的时候却出了问题,报错如下: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageListener': Unsatisfied dependency expressed through field 'reviewCheckInfoService'; nested exce
-
tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新列的解决办法
tk.mybatis是一个很好用的通用插件,把CRUD这些基本的数据操作全都用动态SQL语句自动生成了,mapper和xml里十分清爽,但是昨天发现有一个小坑,记录在此: 有一张表,结构如下(已经简化了): CREATE TABLE `t_sample` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID', `empcode` varchar(8) NOT NULL DEFAULT '' COMMENT '员工号', `datacha
-
django model的update时auto_now不被更新的原因及解决方式
gmt_create自动添加auto_now_add:gmt_modify自动更新auto_now class CommonInfo(models.Model): """基类,提供共同信息,不会创建真实的table""" class Meta: # 声明自己为抽象基类 abstract = True # 下面表示先根据更新时间gmt_modify降序排序,如果更新时间相同,再根据创建时间gmt_create降序排序 ordering = ['-g
-
解决Mybatis返回update后影响的行数问题
主要在JDBC链接中加入这个参数即可: useAffectedRows=true 补充知识:mybatis批量update,返回行数为-1 mybatis批量更新返回结果为1,是由于mybatis的defaultExExecutorType引起的, 它有三个执行器:SIMPLE 就是普通的执行器:REUSE 执行器会重用预处理语句(prepared statements): BATCH 执行器将重用语句并执行批量更新. BATCH可以批量更新操作,缓存SQL以提高性能,缺陷就是无法获取updat
-
解决mybatis plus字段为null或空字符串无法保存到数据库的问题
背景 项目中集成了mybatis plus, 今天在做后台的一个常规的增删改查时,发现字段值为null时,这个字段不会被保存到数据库 解决办法 在字段上加上 @TableField(strategy = FieldStrategy.IGNORED) strategy字段更新插入策略属性说明: IGNORED(0): "忽略判断", 所有字段都更新和插入 NOT_NULL(1): "非 NULL 判断", 只更新和插入非NULL值 NOT_EMPTY(2): &quo
-
解决MyBatis中Enum字段参数解析问题
目录 基础Class和TypeHandler 请求参数解析问题 问题解决 基础Class和TypeHandler MyBatis操作的基本User对象结构如下: @Data @Alias(value = "user") public class User implements Serializable { private static final long serialVersionUID = -4947062488310146862L; private Long id; @NotNu
随机推荐
- Function.prototype.call.apply结合用法分析示例
- 好用的真正正版的WINRAR注册密钥【适用于任何版本】
- 轻松掌握Java工厂模式、抽象工厂模式
- php把数据表导出为Excel表的最简单、最快的方法(不用插件)
- c#创建windows服务(Windows Services)详细步骤
- c#中XML解析文件出错解决方法
- 详解nodejs 文本操作模块-fs模块(三)
- 配置 Apache 服务器禁止所有非法域名 访问自己的服务器
- 收藏的精美的Flash 透明背景 提供下载
- jQuery实现链接的title快速出现的方法
- js + css实现标签内容切换功能(实例讲解)
- 动态加载jQuery的方法
- jquery实现tr元素的上下移动示例代码
- 过滤淘宝网弹出窗口
- 深入解析Java编程中面向字节流的一些应用
- php获取英文姓名首字母的方法
- php获取twitter最新消息的方法
- PHP编程之高级技巧——利用Mysql函数
- Android编程之Sdcard相关代码集锦
- C语言文件操作 fopen, fclose, mkdir详解