Mybatis中sql更新可以设置为空值么

<update id="update" parameterType="org.tarena.netctoss.entity.Account">
update ACCOUNT set REAL_NAME=#{real_name},IDCARD_NO=#{idcard_no},
LOGIN_PASSWD=#{login_passwd},TELEPHONE=#{telephone},RECOMMENDER_ID=#{recommender_id},
BIRTHDATE=#{birthdate},EMAIL=#{email},OCCUPATION=#{occupation},GENDER=#{gender},
MAILADDRESS=#{mailaddress},ZIPCODE=#{zipcode},QQ=#{qq} where ID=#{id}
</update>

我直接传了一个对象进去,然后作更新操作,但是对象中有的属性是null的,也就是说我作了set xxx = null这样的操作请问这样的操作是被允许的么?
为什么总是报下面的错误呢?
HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #7 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111

第1个回答  推荐于2017-06-28
我估计你用的是oracle或其非mysql数据库。错误报出的很明确。java的null类型映射成OTHER了,你明确指定一下jdbctype=NULL就解决了,如是oracle不支持OTHER类型。要么就写个动态sql要好一些。本回答被网友采纳
第2个回答  2014-07-24
需要指定 jdbcType #{username,jdbcType=VARCHAR},
第3个回答  2014-08-01
你需要高速mybatis,你的这个字段在数据库里是什么类型,然后mybatis才能处理你这个null放到数据库里到底是什么样子,在每个变量处指定jdbcType,比如下面这样:
EMAIL=#{email,jdbcType=VARCHAR}

jdbcType有很多种,比如VARCHAR就是可变长字串,NUMBER就是数值型,你可以去网上搜一下本回答被网友采纳

【技术整理】MyBatis updateByExample和updateByExampleSelecti...
相比之下,updateByExampleSelective则更为灵活。它在处理实体类的属性时,如果某个属性为null,MyBatis会动态地生成SQL,跳过该字段的更新,仅对提供非空值的字段进行操作。这种特性使得它在更新操作中更具选择性,避免了不必要的数据库操作。总结来说,如果追求效率和灵活性,推荐使用updateByExampleSelective...

mybatis想给其中某个字段赋成null,mapper层怎么判断这个传进来的null是...
直接给dao层的接口方法中的参数前面加上@Param("参数名")就行了。例如:我之前在做条件查询的时候需要用到(☄⊙ω⊙)☄

【Mybatis】功能强大的动态SQL之if与choose(03)
在update操作中,if标签同样发挥着关键作用。假设需要更新数据库中的记录,但只更新有变化的字段,此时if标签可以确保仅更新实际发生变化的字段,而不会将原有未变字段的值更新为null或空值。对于insert操作,if标签用于决定某些字段是否插入数据库,如果参数值为空,则使用数据库默认值,从而避免了因参数值...

如何实现MyBatis仅更新SQL语句中指定的字段
MySql 默认添加:DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 但当我们写成:cre_tim TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 时 MySql 则不会帮我们添加:ON UPDATE CURRENT_TIMESTAMP 这一句了

Mybatis为什么查询结果为空时返回值为NULL或空集合?
回归最初的问题,查询结果为空时的返回值为NULL或空集合。在处理单个结果集时,由于只有一个ResultSet,返回值为NULL。而在返回多行数据时,MyBatis会将结果存储在List中,因此返回的是空集合,而非NULL。这样的处理逻辑确保了MyBatis在处理查询结果时的一致性和可预测性。

Mybatis,对象中某属性为null时,不要更新数据库中对应的字段,该怎么弄...
= null"> BUDGET_TYPE_ = #{budgetType}<\/if> <if test="budgetType == null"> BUDGET_TYPE_ = BUDGET_TYPE_<\/if> WHERE ID_ = #{id}<\/update>即改变下思路,当budgetType 为null,不更新值(这里BUDGET_TYPE_ = BUDGET_TYPE_只是把值重新设置一次)注:上面的方法只是针对你My...

(mybatis)直接执行sql结果为空,但是session.selectList出的list结果中...
今天碰巧遇到这个问题了,原因是关联表查询的问题,第一个表关联查的时候对应的关联表中的记录有多条的情况,这时候第一个表有记录但是关联的时候就没有合适的值(根据你要查的列而定);比如c left join d 这个时候要是c中的一条记录对应d中的可能有多条记录,而你要查的列又都是d中的字段,...

一个类实现Mybatis的SQL热更新
Mybatis的SQL热更新实现流程如图所示。通过一个类即可实现,下文将详细解析其原理。使用指南 在application.properties文件中添加如下配置,即可开启Mybatis Mapper的热更新。如未配置或配置值为false,则不开启热更新。实现原理 理解Mybatis动态SQL的实现原理是关键。Mybatis利用XML配置和JDK动态代理技术增强...

用最简单方法实现MyBatis动态SQL标签的用法详解
MyBatis 3 版本大幅简化了动态 SQL 的实现,现在只需使用功能强大的基于 OGNL 的表达式,而不是之前的众多元素。动态 SQL 支持多种标签,如 if、choose、trim 和 foreach,以适应不同场景。if 标签用于条件判断,例如验证字段是否为空。当条件不满足时,标签内的代码不会执行。choose 标签则类似于 ...

MyBatis手把手跟我做系列(三) --- 动态SQL标签
set 与 if在修改或插入数据时,根据传入的值进行选择性操作是常见的需求。使用 set 标签可以更方便地处理这种情况,例如根据字段是否为空来决定是否进行修改或插入。set 标签能够处理多个条件下的逗号截取问题,同时在新增语句中,可以使用 suffixOverrides 属性去除多余的逗号。SQL 和 include为了提高代码复用...

相似回答