Mybatis中的CRUD操作(增删改查)中,简单的SQL操作比较直观,如查找操作:
<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>
分享到:
相关推荐
这里的`UNION ALL`将每个元素转化为一个子查询,并通过`from dual`来创建一个临时的单行表,使得每个元素都能独立插入。 四、接口设计 在Java接口中,我们需要定义两个方法来分别对应MySQL和Oracle的批量插入操作...
当更新数据时,确保传入的参数包含所有需要更新的字段,否则MyBatis可能会因为空值问题而抛出异常。 1.2. 插入操作: 同样,在插入数据时,也要注意处理可能为空的字段,使用适当的`jdbcType`以允许NULL值。 2. ...
- **trim/where/set**:用于处理SQL中的空格和逗号等问题。 - **foreach**:循环生成SQL片段。 #### 十、Java API 除了XML配置文件外,MyBatis还提供了丰富的Java API供开发者使用。 - **目录结构**:介绍了...
- 合理设计SQL语句,避免全表扫描。 - 开启合适的缓存策略。 - **单元测试**: - 编写单元测试用例验证DAO层逻辑的正确性。 - **安全性考虑**: - 对用户输入的数据进行校验,防止SQL注入攻击。 #### 七、实战...
【资源说明】 ...如果你有更多的alias或者handler,根据mybatis的说明,你的spring boot配置当中可以使用逗号分隔,像这样写:xxxx.xxx,xxxx.xxxx 【备注】 更多项目详情见资源中的项目说明文件!!!
在MyBatis中,主键自动生成是一种常见且实用的功能,尤其在与支持自动增加主键的数据库(如MySQL)配合使用时。当我们在插入数据时,有时希望数据库能够自动为新记录生成唯一的主键值,而不是手动指定。MyBatis提供...
`set`标签主要用于更新操作中,其功能是动态地配置`SET`关键字,并且剔除追加到条件末尾的任何不相关的逗号。当`set`标签与`if`标签配合使用时,如果某项数据为`null`,则该项不会被包含在更新语句中,即保持数据库...
# 需要生成的表名,多个表名可以用逗号分隔 mpg.setStrategy(strategy); // 使用 Freemarker 引擎 mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 执行生成 mpg.execute(); } } ``` 在这个...
在Java Web开发中,iBatis(现在称为MyBatis)是一个流行的持久层框架,它提供了灵活的SQL映射机制,使得数据库操作更加便捷。在iBatis中,`<iterate>`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、...
在MySQL数据库中,`GROUP_CONCAT` 函数是一个非常实用的工具,它允许你在聚合查询中将多个行的某个列值合并成一个单一的字符串,每个值之间由默认的逗号分隔。然而,当你处理大量数据时,可能会遇到一个限制,即`...