Mybatis框架 - 动态修改数据功能的实现
文章概述
【说明】
- 文章后面附有具体操作内容;
- 还有相关一系列的组合文章;
- 内容均附有简易版和最终版;
功能描述
【说明】
在
动态SQL
机制中,使用<if>
标签可用于对某参数值进行判断,从而生成不同的SQL语句
片段,常用于设计更新数据的操作。
【目标】
仅使用一个方法来实现多种不同的数据更新操作(想更新哪些字段就更新哪些字段,不想更新的字段值将保持不变)。
具体实现
【代码01】
《描述》
- Mapper接口文件
package com.example.mybatisDemo.mapper; public interface DemoMapper { /** * 根据id,动态修改数据 * * 传入的参数应该封装了需要修改的字段值,保持为null的属性对应的字段将不会被修改 * 注意:必须封装id属性 * * @param demo 封装了新的值的对象 * @return 受影响的行数,当修改成功时,将返回"1",如果无此id对应的数据,将返回"0" */ int updateById(Demo Demo); }
【代码02】
《描述》
- Mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mybatisDemo.mapper.DemoMapper"> <!--int updateById(Demo demo);--> <update id="updateById"> update demo_db <set> <if test="paramA != null"> paramA = #{paramA}, </if> <if test="paramB != null"> paramB = #{paramB}, </if> <if test="paramC != null"> paramC = #{paramC}, </if> </set> where id=#{id} </update> </mapper>
【代码03】
《描述》
- 测试代码,用于测试程序;
package com.example.mybatisDemo.mapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest public class DemoMapperTests { @Autowired CheerMapper cheerMapper; @Test void testUpdateById() { Long id = 7L; String paramA = "DEMO_A"; String ParamB = "DEMO_B"; Demo demo = new Demo(); demo.setId(id); demo.setParamA(paramA); demo.setParamB(paramB); int rows = cheerMapper.updateById(demo); System.out.println("修改完成,受影响的行数=" + rows); System.out.println("【动态修改】测试完成!!!"); } }
相关标签
【说明】
- 具体参见其他文章;
【示例】
- 具体参见其他文章;
【if
】
《功能》
《属性》
test
【set
】
《功能》
《属性》
【update
】
《功能》
《属性》
id
项目文件
【源项目】
具体参见
"最终版"
;
【数据库】
具体参见
"最终版"
;