Mybatis中的update动态SQL语句
2016-05-22 15:52
671 查看
Mybatis中的CRUD操作(增删改查)中,简单的SQL操作比较直观,如查找操作:
其中id对应同名java文件中的方法,resultMap对应的自定义的数据类型(当使用java自带类型就更容易了,比如java.lang.String之类的)。
但是涉及到更新操作时,可能不需要对所有字段更新,这时不需要更新的字段需要保持原字段信息,当使用以下信息就会报错:
因为不更新的字段,会被传递null到SQL中,引起异常。
这时就需要进行动态SQL拼接,如下,使用trim就是为了删掉最后字段的“,”。
主要不用单独写SET了,因为set被包含在trim中了:
<select id="findBySrcId" resultMap="entityRelationResultMap"> SELECT * FROM ENTITY_RELATION WHERE SRC_ID=#{srcId} </select>
其中id对应同名java文件中的方法,resultMap对应的自定义的数据类型(当使用java自带类型就更容易了,比如java.lang.String之类的)。
但是涉及到更新操作时,可能不需要对所有字段更新,这时不需要更新的字段需要保持原字段信息,当使用以下信息就会报错:
<update id="updateOne" parameterType="com.inspur.search.data.EntityRelation"> update ENTITY_RELATION SET SRC_ID=#{srcId},SRC_TYPE=#{srcType},DEST_ID=#{destId}, DEST_TYPE=#{destType},REL_TYPE=#{relType},STATUS=#{status},SN_ID=#{snId} where id=#{id} </update>
因为不更新的字段,会被传递null到SQL中,引起异常。
这时就需要进行动态SQL拼接,如下,使用trim就是为了删掉最后字段的“,”。
主要不用单独写SET了,因为set被包含在trim中了:
<update id="updateOne" parameterType="com.inspur.search.data.EntityRelation"> UPDATE ENTITY_RELATION <trim prefix="set" suffixOverrides=","> <if test="srcId!=null">SRC_ID=#{srcId},</if> <if test="srcType!=null">SRC_TYPE=#{srcType},</if> <if test="destId!=null">DEST_ID=#{destId},</if> <if test="destType!=null">DEST_TYPE=#{destType},</if> <if test="relType!=null">REL_TYPE=#{relType},</if> <if test="status!=null">STATUS=#{status},</if> <if test="snId!=null">SN_ID=#{snId},</if> </trim> WHERE id=#{id} </update>
相关文章推荐
- 一条SQL的改写
- sql server 得到数据库字典
- mysql批量导入,导出
- Sqlite嵌入式数据库讲解
- 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 1【01-11】
- mysql 中的语法执行顺序
- Sql Server 内存相关计数器以及内存压力诊断
- 简易SQL语法
- 数据库函数
- 数据库基础
- Oracle开发实战-日期函数
- Windows10 64位安装解压版mysql-5.7.12-winx64的错误总结- MySQL服务无法启动
- 数据库中char vchar nchar nvchar的区别
- 初学者之ORACLE生成执行计划
- 深入数据库连接JDBC
- Oracle开发实战-字符函数
- 使用 SQL 命令 OPTIMIZE TABLE 释放表空间
- 用批处理启动MySQL命令行工具
- 常用mysql数据库引擎——MyISAM和InnoDB区别
- oracle数据库varchar2大字段中的换行、空格如何在jsp页面中展示