insert into students(sid,sname,ssal,ssex)
select 9,'张三',3000,'男' from dual
union all select 10,'李四',4000,'男' from dual
union all select 11,'小红',5000,'女' from dual
主键直接通过具体值进行指定,如上面的9、10、11。适用于主键id为随机数之类的。在项目中我们有时也会让主键id自增长,这个时候就需要使用到序列了。
我的序列名称:seq_stu
insert into students(sid,sname,ssal,ssex)
select seq_stu.nextval,s.* from
(
select '张三2',4000,'女' from dual
union all select '李四2',5000,'女' from dual
) s
这种方式和上面不使用序列的方式其实类似,先在子查询里面不指定主键那一列,查出来有几条数据(待插入数据),然后将主键和那几条数据组合在一起,相当于select seq_stu.nextval, s.* from s
由于s有两条数据,因此序列也会产生两个值。
mybatis对Oracle进行批量操作,其实也就是使用mybatis的动态sql 功能进行拼接。
这里我使用的表是Oracle自带的scott数据库下的emp表的备份,copy_emp表。
INSERT INTO copy_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
SELECT #{copyEmp.empno},#{copyEmp.ename},#{copyEmp.job},#{copyEmp.mgr},
#{copyEmp.hiredate},#{copyEmp.sal},#{copyEmp.comm},#{copyEmp.deptno}
FROM dual
INSERT INTO copy_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
SELECT seq_stu.nextval,s.* FROM
(
SELECT #{copyEmp.ename},#{copyEmp.job},#{copyEmp.mgr},
#{copyEmp.hiredate},#{copyEmp.sal},#{copyEmp.comm},#{copyEmp.deptno}
FROM dual
) s
至于更新、删除和查询与mysql差不多,因此没做记录。