曾在学习Redis时,技术牛画了一个数据库的发展图,Redis最终发展竟是关系型数据库;你恨不得想说个OH ,FUCK!就像IBatis发展到Mybatis,最后发展方向极可能是HIbernate,这个...
本次批量新增或者修改功能,数据库类型是Oracle,表是BATCH_INSERT_TEST、POJO类BatchOptionTest、接口BatchOptionTestMapper和配置文件BatchOptionTestMapper.xml。
create table BATCH_OPTIONS_TEST
(
ID VARCHAR2(50) not null,
NAME VARCHAR2(50)
)
public class BatchOptionTest{
private String id ;
private String name;
/**get和set省去**/
}
public interface BatchOptionTestMapper {
int batchInsertTestMethod(@Param(value="list")List<BatchOptionTest> dataList);
}
1:MyBatis 批量新增
(1)批量新增方式1
INSERT INTO BATCH_INSERT_TEST (ID,NAME) VALUES('1','SMARTISAN T1');
INSERT INTO BATCH_INSERT_TEST (ID,NAME) VALUES('2','坚果');
结合MyBatis的foreach标签,BatchInsertTestMapper.xml中的方法可以如下定义。
<insert id="batchInsertTestMethod" parameterType="List">
<if test="list != null and list.size() > 0">
<foreach collection="list" item="obj" open="BEGIN" separator=";" close=";END;" >
INSERT INTO BATCH_OPTIONS_TEST(ID,NAME) VALUES (#{obj.id,jdbcType=VARCHAR},#{obj.name,jdbcType=VARCHAR})
</foreach>
</if>
</insert>
测试新增数据成功,返回值是-1(关于返回值,可以参考Oracle Doc 的解释,因为我也没弄清楚,哈哈)。
(2)批量新增方式2
INSERT INTO BATCH_INSERT_TEST(ID,NAME)
SELECT '1','SMARTISAN T1' FROM DUAL
UNION ALL
SELECT '2','坚果' FROM DUAL
结合MyBatis的foreach标签,BatchOptionTestMapper.xml中的方法可以如下修改。
<insert id="batchInsertTestMethod" parameterType="List">
<if test="list != null and list.size() > 0">
INSERT INTO BATCH_OPTIONS_TEST(ID,NAME)
<foreach collection="list" item="obj" separator="UNION ALL">
SELECT (#{obj.id,jdbcType=VARCHAR},#{obj.name,jdbcType=VARCHAR}) FROM DUAL
</foreach>
</if>
</insert>
测试新增数据成功,返回值等于list的大小。
(3) 总结
批量新增第二种方式更好,也可以根据实际需求,批次批量新增。
2:MyBatis 批量更新
接口BatchOptionTestMapper新增两个更新方法。
public interface BatchOptionTestMapper {
int batchUpdateTestMethodOne(@Param(value="list")List<String> dataList,@Param(value="name")String name);
int batchUpdateTestMethodTwo(@Param(value="list")List<BatchOptionTest> dataList);
}
(1)批量更新方式1 (比如将ID是1和2的数据name修改为Smartisan T2)
<insert id="batchUpdateTestMethodOne" >
<if test="list != null and list.size() > 0">
UPDATE BATCH_OPTIONS_TEST
<set>
NAME = #{name,jdbcType=VARCHAR}
</set>
<where>
ID IN
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id,jdbcType=VARCHAR}
</foreach>
</where>
</if>
</insert>
测试更新数据成功,返回值是list的size大小。
(2)批量更新方式2(比如将ID是1的数据name修改为Smartisan T2,ID是2的数据name修改为坚果MINI)
<insert id="batchUpdateTestMethodTwo" parameterType="List" >
<if test="list != null and list.size() > 0">
<foreach collection="list" item="obj" index="index" open="begin" close=";end;" separator=";">
UPDATE BATCH_OPTIONS_TEST
<set>
<if test=" obj.name != null and obj.name != '' ">
NAME = #{obj.name,jdbcType=VARCHAR}
</if>
</set>
<where>
ID=#{obj.id,jdbcType=VARCHAR}
</where>
</foreach>
</if>
</insert>
测试更新数据成功,返回值是-1(关于返回值,可以参考Oracle Doc 的解释,因为我也没弄清楚,哈哈)。
分享到:
相关推荐
只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢
Mybatis批量插入数据返回主键的实现 Mybatis是当前最流行的持久层框架之一,它提供了强大的批量插入功能,但是在批量插入数据时如何返回主键是一个常见的问题本文将详细介绍Mybatis批量插入数据返回主键的实现。 ...
Mybatis批量foreach merge into的用法可以批量插入时间价格表数据,但是需要注意其缺陷和限制。在实际应用中,需要根据实际情况选择合适的方法。 知识点总结: 1. Mybatis批量foreach merge into的用法可以批量...
本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...
本文将深入探讨如何在 Mybatis Plus 中自定义批量插入和批量更新,并根据唯一索引来确保数据的唯一性。 首先,了解 Mybatis Plus 的批量操作基础。Mybatis Plus 提供了 `batchInsert()` 和 `batchUpdate()` 方法来...
本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的...
总结来说,MyBatis 通过`foreach` 标签和`ExecutorType.BATCH` 提供了灵活且高效的批量插入机制。`foreach` 适用于构建动态SQL,处理`IN`条件;而`ExecutorType.BATCH` 优化了批量插入的性能,通过调整提交频率和...
在本文中,我们将详细介绍MyBatis批量新增数据的方法,并对比单条insert和批量insert的效率。 一、单条insert语句 mysql的insert语句是最基本的插入数据的方法,语法如下: ```sql insert into 表名(字段,字段。...
综上所述,这个Demo提供了从SpringBoot应用到Mybatis配置,再到数据库批量插入的具体实现,是学习和实践大数据量操作的一个实用案例。通过深入理解这些知识点,开发者可以更好地处理类似的大规模数据处理任务。
总结,MyBatis-Plus 的批量插入功能是通过自定义 SQL 和设置执行器类型实现的。在实际应用中,应合理调整批量插入的大小和事务管理,以平衡性能和稳定性。在项目 `mybatis-plus_batch_insert-master` 中,可能包含了...
使用方法请看博客https://blog.csdn.net/bandaotixiruiqiang/article/details/72478361#comments_12931827
tk.mybatis 是一个基于 MyBatis 和 MyBatis-Plus 的扩展框架,它提供了一系列的工具类和注解,简化了日常的 CRUD 操作。在实际的项目开发中,特别是涉及到逻辑删除等特定业务需求时,tk.mybatis 提供的通用接口可能...
同时,对于大数据量的处理,可能会提供更好的批量插入和更新策略。 在API设计上,Mybatis3.4.2 可能会引入新的接口或扩展已有的接口,以便于开发人员更好地适应变化的需求。同时,为了保持向后兼容性,任何重大的...
该项目为MyBatis-Plus框架的升级版设计源码,包含66个...该源码丰富了MyBatis-Plus的操作功能,新增了批量插入、批量更新以及批量merge(若数据存在主键则执行更新,否则新增)的特性,并确保主键需以TableId注解修饰。
- **MyBatis映射文件**:如果使用MyBatis,XML文件用于定义SQL查询和存储过程,包括批量插入的语句。 5. **测试与优化**: - **单元测试**:确保每个组件(如服务层、DAO层)的功能正确性。 - **性能测试**:...
- **创建(Create)**:如何使用Mybatis插入新记录,包括插入单条数据和批量插入。 - **读取(Read)**:演示了多种查询方式,如单个记录查询、列表查询、分页查询,以及如何处理复杂查询结果。 - **更新(Update...
本篇文章将详细介绍如何在SSM项目中实现批量新增,同时也适用于批量修改和删除操作。 首先,我们需要在前端JavaScript部分声明一个数组,用于存储待批量处理的数据。可以通过push方法动态添加元素,无论是预先定义...
这种做法在处理动态数据结构或者需要批量插入数据的场景中非常实用。然而,需要注意的是,这种动态SQL的方式可能会导致SQL注入的风险,因此在实际应用中需要确保输入数据的安全性。同时,由于每次插入都需要构建SQL...
MyBatis实现Mysql数据库分库分表操作和总结 MyBatis是一款流行的持久层框架,能够与Mysql数据库进行交互。在大规模的应用系统中,数据库的性能和可扩展性变得非常重要。为了解决这个问题,需要实现数据库的分库分表...
MyBatis-Plus 是 MyBatis 的一个扩展,它提供了许多方便实用的功能,如自动 CRUD 操作、条件构造器、批量插入、主键自增、填充公共字段等,极大地简化了开发工作。在 SpringBoot 框架下集成 MyBatis-Plus,可以让...