Mybatis-select、insert、update

update

update语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<update id="updateByPrimaryKeySelective" parameterType="cn.yjt.model.generator.Yjtdevice">
update yjtdevice
<set>
<if test="devsn != null">
DEVSN = #{devsn,jdbcType=VARCHAR},
</if>
<if test="devno != null">
DEVNO = #{devno,jdbcType=SMALLINT},
</if>
<if test="devname != null">
DEVNAME = #{devname,jdbcType=VARCHAR},
</if>
……
</set>
where DEVSN = #{devsn,jdbcType=INTEGER}
</update>

update语句属性配置细节:

属性 描述 取值 默认
id 在这个模式下唯一的标识符,可被其它语句引用
parameterType 传给此语句的参数的完整类名或别名
flushCache 如果设为true,则会在每次语句调用的时候就会清空缓存。select 语句默认设为false true/false false
useCache 如果设为true,则语句的结果集将被缓存。select 语句默认设为false true/false false
timeout 设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定 正整数 未设置
fetchSize 设置一个值后,驱动器会在结果集数目达到此数值后,激发返回,默认为不设值,由驱动器自己决定 正整数 驱动器决定
statementType statement、preparedstatement、callablestatement。预准备语句、可调用语句 STATEMENT、PREPARED、CALLABLE PREPARED

​ MyBatis 插入空值时,需要指定JdbcType。

​ 在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。要解决这个问题,需要针对这些可能为空的字段,手动指定其转换时用到的类型。一般情况下,我们没有必要按个字段去识别/判断它是否可以为空,而是将所有的字段都当做可以为空,全部手动设置转换类型。

参考资料:https://blog.csdn.net/bear_wr/article/details/52386257