MyBatis根据条件批量修改字段的方式

作者:猿陆柒 时间:2023-12-16 03:24:01 

MyBatis根据条件批量修改字段

背景:

给学生改作业,只要是对的都批量进行数据库的修改

代码以及注释

  • conttoller

@RestController
@RequestMapping("/work")
public class WorkController {
    @Autowired
    private WorkService workService;
    
    @PutMapping("/examine")
    public HttpResponse examine(Integer[] id) {
        Integer total = workService.examine(id);
        return HttpResponse.ok("共批改[ "+total+" ]条道题","");
    }
}
  • service

@Service
public class WorkService {
    @Autowired
    private WorkMapper workMapper;
    
    public Integer examine(Integer[] id) {
        return workMapper.examine(id);
    }
}
  • mapper

@Mapper
public interface WorkMapper {
    Integer examine(@Param("id")Integer[] id);
}
  • xml

<!--根据id来批量修改WORK表里面的isEnable字段-->
<update id="examine">
    UPDATE WORK SET isEnable=TRUE WHERE id IN
    <foreach collection="id" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</update>
  • 工具类HttpResponse(此需求中无关紧要的类)

public class HttpResponse {
    private Integer status;
    private String message;
    private Object object;
    
    public static HttpResponse ok(String message) {
        return new HttpResponse(200, message, null);
    }
    
    public static HttpResponse ok(Object object) {
        return new HttpResponse(200, null, object);
    }
    
    public static HttpResponse ok(String message,Object object) {
        return new HttpResponse(200, message, object);
    }
    
    public static HttpResponse error(Integer status, String message) {
        return new HttpResponse(500, message, null);
    }
    
    public static HttpResponse error(String message) {
        return new HttpResponse(500, message, null);
    }
    
    public static HttpResponse error(String message,Object object) {
        return new HttpResponse(500, message, object);
    }
    
    
    protected HttpResponse() {
        super();
    }
    
    private HttpResponse(Integer status, String message, Object object) {
        super();
        this.status = status;
        this.message = message;
        this.object = object;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Object getObject() {
        return object;
    }
    public void setObject(Object object) {
        this.object = object;
    }
}

重点:

如果mapper没加@Param("id")注解会报错找不到参数"id"

至此MyBatis根据id批量修改数据库的某字段需求完成!

MyBatis多条件批量修改

简单记录下

想要修改一张表,是联合主键,也就是where后两个以上条件才能唯一确定一条数据。

如果有唯一键,那么foreach中 用in就可以解决。

现在没办法用in,不然 A in (#{})and B in (#{})感觉成笛卡尔了。

简单点就是要实现执行多条语句。对update做循环。传入参数为 List,ATest类中字段A,B为联合主键,修改C的值

<update id="update" parameterType="java.util.List">
        <foreach collection="list"  item="val" separator=";" open="begin" close=";end;">
            update table_ABC
            <set>
                <if test="val.C!= null">C = #{val.C},</if>
            </set>
            where A=#{val.A} and B= #{val.B}
        </foreach>

    </update>

执行出来效果为:

begin 
update table_ABC set C = '2' where A = '1' and B= '1';
update table_ABC set C = '2' where A = '1' and B= '2';
update table_ABC set C = '4' where A = '3' and B= '2';
end;

这里使用的数据库为oracle,oracle执行认为begin和end之前为一条语句

当然,也可以用or 的形式拼接,不过还没测试。

网上查有的说是mysql数据库 mybatis一次执行一条语句。支持多条,可以MySQL连接数据库时,添加语句:&ldquo;allowMultiQueries=true&rdquo;

作用:

1.可以在sql语句后携带分号,实现多语句执行。

2.可以执行批处理,同时发出多个SQL语句。

来源:https://blog.csdn.net/qq_42426937/article/details/105018123

标签:MyBatis,条件,修改字段
0
投稿

猜你喜欢

  • c#裁剪图片后使用zxing生成二维码示例分享

    2021-09-08 17:06:58
  • Android 4.0 设置全屏修改的解决方法

    2022-11-24 17:08:12
  • Android开发技巧之像QQ一样输入文字和表情图像

    2022-06-26 23:41:34
  • android实现通过NFC读取卡号

    2023-06-24 08:45:54
  • JDK源码分析之String、StringBuilder和StringBuffer

    2022-01-23 00:10:20
  • Android中webview与JS交互、互调方法实例详解

    2023-04-30 19:18:27
  • android端微信支付V3版本地签名统一下单详解

    2023-05-18 02:37:44
  • Android 添加TextView删除线(代码简单)

    2022-05-27 16:48:47
  • IntelliJ IDEA 2021.1 推出语音、视频功能,边写代码边聊天(功能超级强大)

    2023-09-13 23:30:37
  • java利用socket通信实现Modbus-RTU通信协议的示例代码

    2023-05-02 21:37:40
  • Android Studio项目适配AndroidX(Android 9.0)的方法步骤

    2022-10-30 12:01:03
  • MyBatis中map的应用与模糊查询实现代码

    2021-09-02 18:27:14
  • C#中的委托和事件详解

    2022-01-20 01:31:53
  • android使用handlerthread创建线程示例

    2023-07-05 17:29:57
  • java 使用JDBC构建简单的数据访问层实例详解

    2023-01-13 05:12:24
  • Java selenium处理极验滑动验证码示例

    2023-12-19 19:10:09
  • java操作json对象出现StackOverflow错误的问题及解决

    2023-03-04 20:06:14
  • 浅谈spring的重试机制无效@Retryable@EnableRetry

    2021-12-12 10:42:57
  • Android开发之TabHost选项卡及相关疑难解决方法

    2022-01-10 06:30:57
  • 浅析java中的取整(/)和求余(%)

    2023-04-30 23:46:23
  • asp之家 软件编程 m.aspxhome.com