zoukankan      html  css  js  c++  java
  • 【Mybatis/Oracle】如何在Mybatis的Mapper中撰写一个向Oracle某表批量插入数据的函数

    本文例程下载:https://files.cnblogs.com/files/heyang78/myBank_210905_1611.rar

    本文涉及到的Oracle版本:11.2.0.1.0,SpringBoot版本:2.5.4,MyBatis选择SpringBoot提供的2.2.0,不保证下例在其它版本中运转正常。

    下面是正文:

    如果Oracle中有某表Student,它仅包括id和name两个字段,那么向其中批量插值的SQL语句应当这样写:

    Insert all
    
    Insert into student(id,name) values ('1','XXX')
    
    Insert into student(id,name) values ('2','XXX')
    
    Insert into student(id,name) values ('3','XXX')
    
    ....
    
    Insert into student(id,name) values ('n','XXX')
    
    select * from dual

    这个语句实际上就是在多个单条插入语句前面放了一句insert all,后面放了一句 select * from dual。

    由于是一次性推送到DB端执行,所以执行效率比单条运行n次高一截。

    需要注意的是n不是想写多少就多少的,这与Oracle版本和机器性能有关,在我的T440p里,n可以取两百多一点,但超不过300,否则程序运行时可能报错。

    再往下就是把这一整句SQL在Mapper里写出来的过程。

    由于接口类没法写函数体,我们需要把接口函数引向真正的类函数:

    Mapper类:

    @Mapper
    public interface StudentMapper {
    ......
        @SelectProvider(type=StudentSql.class,method="bunchInsert")
        void bunchInsert(int count);
    }

    StudentSQL类:

    package com.hy.mybank.mapper;
    
    public class StudentSql {
        // 利用数据库的批量插入语法,一次性插入批量记录到Student表
        public String bunchInsert(int count) {
            
            StringBuilder sb=new StringBuilder();
            sb.append("INSERT ALL ");
            for(int i=0;i<count;i++) {
                sb.append("   INTO student(id, name) values('"+i+"','"+i+"')");
            }
            sb.append("select * from dual");
            String sql = sb.toString();
            
            return sql;
        }
    }

    很明显,bunchInsert函数主要就是在拼装我们在一开头提到的SQL语句。

    之后在测试函数里调用

        @Test
        void bunchInsert() {
            stuMapper.bunchInsert(202);
        }

    最后看看DB的情况:

    Expected=Actual,看来目的达成了。

    -END-

  • 相关阅读:
    常见运算符_python
    hibernate中的二级缓存
    事务的隔离级别
    java hibernate 一对多和多对多映射关系总结
    hibernate中集合映射总结
    java中静态代码块之我的理解
    select下拉表达设置选中,获取选中项,change
    jquery checkbox设置选中,全选,反选,取值
    javaWeb建立一个简单三层项目具体步骤
    java 异步实现省市联动
  • 原文地址:https://www.cnblogs.com/heyang78/p/15229849.html
Copyright © 2011-2022 走看看