根据用户编号,日期,类型条件进行查询此用户某天数据,在对指定字段进行内容修改,sql要怎么写?测试方法怎么写?
// 接口
void updateId(QshGfConsData qshGfConsData);
//接口实现
<update id="updateId">
update QSH_S_GFCONS_DATA
<set>
<if test="rap_el=null">
rap_e =# rap_e
</if>
and
<if test="data_value!=null">
data_value =# data_value
</if>
</set>
WHERE CONS_NO = # CONS_NO]
AND DATA_DATE =#DATA_DATE
AND USAGE_TYPE_CODE =# USAGE_TYPE_CODE
</update>
//测试方法
@Test
public void updateQsh() throws ParseException
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( pattern:"yyyy-MM-dd");
Date date = simpleDateFormat.parse( source:"2022-08-01");
QshGfConsData qshGfConsData1 = qshGfConsData.updateId(ashGfConsData: 12.2 12.2);
简单记录下:想要修改一张表,是联合主键,也就是where后两个以上条件才能唯一确定一条数据。
如果有唯一键,那么foreach中 用in就可以解决。
现在没办法用in,不然 A in (#{})and B in (#{})感觉成笛卡尔了。
简单点就是要实现执行多条语句。对update做循环。传入参数为 List,ATest类中字段A,B为联合主键,修改C的值
当然,也可以用or 的形式拼接,不过还没测试。
网上查有的说是mysql数据库 mybatis一次执行一条语句。支持多条,可以MySQL连接数据库时,添加语句:“allowMultiQueries=true”
作用:
1.可以在sql语句后携带分号,实现多语句执行。
2.可以执行批处理,同时发出多个SQL语句。
首先
略作修改
如果是单表的增删改查可以考虑使用 mybatis plus 。避免使用xml sql脚本
在mapper中,通过@Param注解可以指定参数的别名,针对多个对象显示声明一下,更不容易出错。
字符型判空时,不光要和null比较,最后也和空串比较一下
set和where中间的and去掉,并且变量加大括号像#{rap_e},大括号后面跟上逗号
transportMapper.update(null,new LambdaUpdateWrapper<Transport>().in(Transport::getId,ids).set(Transport::getOrderStatus,OrderStatusEnum.ORDERED));