oracle批量插入数据(请以集合形式)

本文介绍了一种使用MyBatis框架通过list集合批量插入数据到SQL数据库的方法,详细展示了利用序列获取ID值和遍历集合元素进行批量插入的具体SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:往sql里面传数据时以list集合的形式,因为你要批量插入。

1.sql语句如下写

    <insert id="insertAll" parameterType="java.util.List">

      insert into 你的表名

      (主键ID , 字段1名字 , 字段2名字 , 看你有几个字段)

      select 你的表名的序列名称.nextval as 主键ID , //以表序列来自动获取id值
                                                               
      A.* from (
        <foreach collection="list" item="item" index="index" separator="union all">
            select                        //这里的select和后面的from dual是固定的
            #{item.字段1名字} as CPC_CODE,
            #{item.字段2名字} as EP_TABLET_NAME,
            sysdate as CREATE_TIME,//获取当前时间,如果字段有时间类型
            0 as status from dual  //为状态赋值为0
        </foreach>
      )A //为这个子查询去别名A

    </insert>

2.一般的插入语句是insert into 表名 (id , 字段 , 字段) values(#{} , #{} , #{}),当然这里一定要按照顺序给值

上面是忽略了values的写法, 从有代码的第四行select开始就是在取值了,取的是用序列得到的id值和遍历集合得到的对象的字段

### MyBatis Plus 在 Oracle 数据库中的批量插入实现 #### 使用 `saveBatch` 方法 MyBatis Plus 提供了一个内置方法 `saveBatch`,用于简化批量插入操作。该方法会自动生成 SQL 并执行批处理插入[^2]。然而,在某些场景下(如特定字符集或复杂业务逻辑),可能需要手动配置以适配 Oracle 数据库。 以下是基于 `saveBatch` 的简单示例: ```java List<TabUser> userList = new ArrayList<>(); // 填充 TabUser 对象列表... int result = userMapper.saveBatch(userList); if (result > 0) { System.out.println("批量插入成功!"); } ``` 需要注意的是,`saveBatch` 默认依赖于数据库的自动增长主键功能。对于 Oracle 来说,通常需要借助序列(Sequence)来生成唯一主键[^4]。 --- #### 自定义 Mapper 和 XML 方式 如果遇到兼容性问题或者需要更灵活的控制,则可以通过编写自定义的 Mapper 接口和对应的 XML 文件完成批量插入[^3]。 ##### **Mapper 接口** ```java public interface UserMapper extends BaseMapper<TabUser> { int insertBatch(@Param("list") List<TabUser> list); } ``` ##### **XML 配置** 在 XML 中定义 `<insert>` 节点,并使用 `<foreach>` 循环遍历参数集合。 ```xml <insert id="insertBatch" parameterType="java.util.List"> begin <foreach collection="list" item="item" separator=";"> insert into tab_user ( id, name, age, email ) values ( #{item.id,jdbcType=DECIMAL}, #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=DECIMAL}, #{item.email,jdbcType=VARCHAR} ) </foreach> end; </insert> ``` 此方式适用于简单的批量插入需求。但如果数据量较大,建议优化为存储过程调用形式以提高性能。 --- #### 结合 Spring Boot 配置 为了更好地支持 Oracle 数据库特性,可以在 Spring Boot 应用程序中注册必要的组件,例如 `BatchSqlInjector` 和 `OracleKeyGenerator`[^1]。 ##### **Spring 配置类** ```java import com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator; import com.baomidou.mybatisplus.extension.injector.BatchSqlInjector; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public BatchSqlInjector sqlInjector() { return new BatchSqlInjector(); } @Bean public OracleKeyGenerator oracleKeyGenerator() { return new OracleKeyGenerator(); } } ``` 以上配置确保了 MyBatis Plus 可以正确识别并应用 Oracle 特定的功能扩展。 --- #### 创建 Sequence 支持主键生成 由于 Oracle 不像 MySQL 那样提供原生的自增列机制,因此需要显式创建 Sequence 来管理主键值[^4]。 以下是一个典型的 Sequence 定义语句: ```sql CREATE SEQUENCE seq_tab_user START WITH 1 MAXVALUE 999999999999999 MINVALUE 1 NOCYCLE NOCACHE NOORDER; ``` 随后可以将其绑定到实体类字段上,以便在保存记录时动态获取唯一的 ID 值。 --- ### 总结 综上所述,MyBatis Plus 在 Oracle 数据库上的批量插入可通过多种方式进行实现。推荐优先尝试内置的 `saveBatch` 方法;当其无法满足实际需求时,可采用自定义 Mapper 或者存储过程的方式替代。同时注意合理设置 Sequence 主键策略以及调整相关配置项以提升效率与稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值