实现update批量更新多个字段多条记录
程序员文章站
2022-06-01 14:49:59
...
前言
由于业务需求需要,一个页面需要刷新一页数据到表里面,这个时候,使用循环update语句完成没有毛病,但是在实际系统使用中是不会这么做的,因为对于数据越大的系统的来说,为了节省系统开销,系统与数据库的连接次数是越少越好。那么,这个时候我们就需要实现用一条SQL语句来update多条记录。
一、技术指南
本案例采用ibatis来写SQL语句
- 上代码:
<update id="updateInfo" parameterClass="java.util.List">
UPDATE examlist set zrs =
<iterate conjunction="" open="CASE ccbh" close="END,">
<![CDATA[
WHEN #list[].ccbh# THEN #list[].zrs#
]]>
</iterate>
remark =
<iterate conjunction="" open="CASE ccbh" close="END">
<![CDATA[
WHEN #list[].ccbh# THEN #list[].remark#
]]>
</iterate>
WHERE ccbh in
<iterate conjunction="," open="(" close=")">
#list[].ccbh#
</iterate>
</update>
说明:需要传递的数据类型是List封装
二、代码详情示例
- Student.java
public class Student {
private String ccbh;
private String zrs;
private String remark;
public String getCcbh() {
return ccbh;
}
public void setCcbh(String ccbh) {
this.ccbh = ccbh;
}
public String getZrs() {
return zrs;
}
public void setZrs(String zrs) {
this.zrs = zrs;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
2.Test.java
public class Test {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
Student student = new Student();
for(int i=0;i<10;i++){
student.setCcbh(String.valueOf(i+1));
student.setRemark(String.valueOf(i+2));
student.setZrs(String.valueOf(i+100));
list.add(student);
}
//打印出来看看
for (Student s:list) {
System.out.println(s.getCcbh()+s.getRemark()+s.getZrs());
}
//把list传递给ibatis即可
updateExamlistInfo(list)
}
public static void updateExamlistInfo(List<Student> list) {
sqlMapClientTemplete.update("updateExamlistInfo", list);
}
}