1. 批处理 插入
很多时候都涉及到一系列数据的插入,通过mybatis的动态sql语句能够很好的解决这个问题,当然,oracle已经提供了批插入的语句:
insert into students
select id,name ,email ,sdate from dual union
select id,name ,email ,sdate from dual union
select id,name ,email ,sdate from dual
利用mybatis动态sql语言的写法:
insert into students
select #{stus.id},#{stus.name},#{stus.email},#{stus.sdate} from dual
下面看测试:
/** * 批处理: 插入一组数据 */ @Test public void TestbatchInsertStudents(){ List
stus=Arrays.asList(new Student[]{ new Student("Rindy_1",9770,"15211433541013",new Date()), new Student("Rindy_2",97710,"1521143546392@163.com",new Date()), new Student("Rindy_3",97720,"152114743366658",new Date()), new Student("Rindy_4",97730,"1527395357437",new Date()), new Student("Rindy_5",97740,"132126835435644",new Date()), new Student("Rindy_6",97750,"152114524322140",new Date()), new Student("Rindy_7",97760,"15873242923860",new Date()), new Student("Rindy_8",97770,"15096242043460",new Date()) }); int rows=stum.batchInsertStudents( stus ); System.out.println( rows ); assertEquals(rows,8); }
测试成功

批量删除:
delete from students where stud_id= #{id}
测试成功

批量更新比较麻烦,我们先来回顾一下 oracle的更新:
UPDATE 表名 set 列名 = 新值[, 列名 = 新值[…]] [WHERE condition_expression];
参数多组,批量操作可采用 case when then语句实现
update students
when stud_id=#{stus.id} then #{stus.name}
when stud_id=#{stus.id} then #{stus.email}
when stud_id=#{stus.id} then #{stus.sdate}
#{stus.id}
测试:
/** * 批处理: 更新一组数据 */ @Test public void TestbatchUpdateStudents(){ List
stus=Arrays.asList(new Student[]{ new Student("Rindy_1_update",9770,"15211423431013_update",new Date()), new Student("Rindy_2_update",97710,"15211433446392@163.com",new Date()), new Student("Rindy_3_update",97720,"1524321231476658_update",new Date()), new Student("Rindy_4_update",97730,"1527395324327437_update",new Date()), new Student("Rindy_5_update",97740,"13212268235644_update",new Date()), new Student("Rindy_6_update",97750,"152114522432140_update",new Date()), new Student("Rindy_7_update",97760,"1587233922433860_update",new Date()), new Student("Rindy_8_update",97770,"1502496032443460_update",new Date()) }); int rows=stum.batchUpdateStudents02( stus ); System.out.println( rows ); assertEquals(rows,8); }
测试结果

下面是是本次案例的辅助代码
数据库脚本
DROP TABLE STUDENTS; drop sequence seq_stu_id; CREATE TABLE STUDENTS ( stud_id integer PRIMARY KEY, name varchar2(50) NOT NULL, email varchar2(50) , sdate date ); create sequence seq_stu_id ; insert into students(name,email,dob) values('Student1','student1@gmail.com', to_date('1983-06-25', 'yyyy-MM-dd'); insert into students(name,email,dob) values('Student2','student2@gmail.com', to_date('1985-06-25', 'yyyy-MM-dd');
2.java entity
package com.rindy.maven.entity; import java.util.Date; public class Student { private String name; private Integer id; private String email; private Date sdate; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getSdate() { return sdate; } public void setSdate(Date sdate) { this.sdate = sdate; } public Student(String name, Integer id, String email, Date sdate) { supe