设为首页 加入收藏

TOP

Mybatis+Oracle批处理(一)
2015-11-21 01:39:39 来源: 作者: 【 】 浏览:2
Tags:Mybatis Oracle 处理

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
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL中的WITHROLLUP 下一篇plsql连接oracle时,不同ip上数据..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: