实现update批量更新多个字段多条记录
前言
由于业务需求需要,一个页面需要刷新一页数据到表里面,这个时候,使用循环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); } }
三、实现 多个 id 查询语句
public getStudentByIds(Map<String, Object> map);//入参是map
描述:下面的xml,入参是map,ids是数组。(关键是这个 xml 编写)
<select id="getStudentByIds" resultClass="student" parameterClass="java.util.HashMap"> select * from student where id in <iterate property="ids" open="(" conjunction="," close=")"> #ids[]# </iterate> </select>
实际参数封装,如下所示:
String[] ids = studentids.split(","); Map<String, Object> map = new HashMap<String, Object>(); map.put("ids", ids); getStudentByIds(map);
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
使用webservice进行数据的传递