MySQL中,批量插入数据到表,会在一定程度提高效率。

insert into table (column1, column2)values(value1, value2), (value1, value2)

对于List<Map<String, Object>>类型的参数,使用mybatis实现上面语句需要用到动态SQL–foreach。

<insert id="batchInsert"">
	insert into ${table_name} (
	id, name)
	values 
	<foreach collection="LIST" item="item" index="index" open="(" separator="," close=")">
	  #{item.id, jdbcType=VARCHAR},
	  #{item.name, jdbcType=VARCHAR}
	</foreach>
</insert>

上面的语句对于MySQL执行起来没有问题,但对Oracle数据库则会报如题错误:SQL命令未正确结束。

经过一系列的测试实验,找到了用Oracle虚拟表来解决这个问题,首先将数据foreach作为一张虚拟表,然后全量插入到新表中。

INSERT INTO TEMP_20200210 (DMC)
    SELECT CD.* FROM
        SELECT 1234567 FROM DUAL UNION
        SELECT 1234568 FROM DUAL UNION
        SELECT 1234568 FROM DUAL

上面语句,有博客中测试150万条数据182秒插入完成。本文的场景每次最多插入1000条,秒级肯定能完成,因为笔者场景是异步插入数据,对性能要求不高。

由此,改造mybatis语句如下

<insert id="batchInsert">
	insert into ${table_name} (
	id, name)
	SELECT A.* FROM (
	<foreach collection="LIST" item="item" index="index" separator="UNION ALL">
	  select
	  #{item.id, jdbcType=VARCHAR} id,
	  #{item.name, jdbcType=VARCHAR} name
	  FROM DUAL
	</foreach>
</insert>

肯定有同学对语句中的$有疑问,有SQL注入风险。因此业务场景完全没有对外接口,可以放心使用。

我将1000条数据按照月份分成了多个Map作为插入参数,大致格式如下。

"table_name": "user_4", "LIST": [ "id": "1", "name": "bee" "id": "2", "name": "stack" Mybatis 批量插入报ORA-00933: SQL 命令未正确结束错误出现的场景是这样的,将多个月份的1000条数据分别插入到各月份表中。MySQL中,批量插入数据到表,会在一定程度提高效率。insert into table (column1, column2)values(value1, value2), (value1, value2)对于List&lt;Map&lt;String, Object&gt;&gt;类型的参数,使用mybatis实现上面语句需要用到动态SQL–forea
Mybatis批量插入需要foreach元素。foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名。 (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置。 (3)collection:根据传入的参数值确定。 (4)open:表示该语句以什么开始。 (5)separator:表示在每次进行迭代之间以什么符号作为分隔 符。 (6)close:表示以什么结束。 首先,错误的xml配置文件如下: insert into "sys_user_role" mybatis-generator-gui-plus mybatis-generator-gui-plus是基于 扩展的工具,区别在于功能上的扩展了批量操作的方法,其他几乎没有差别。 增加的方法说明: batchUpdate 批量可选更新 batchUpdateSelective batchInsert 条件查询返回一个 selectFirstByExample 按照界面步骤轻松生成代码,省去XML繁琐的学习与配置过程 保存数据库连接与Generator配置,每次代码生成轻松搞定 内置常用插件,比如分页插件 支持OverSSH 方式,通过SSH隧道连接至公司内网访问数据库 把数据库中表列的注释生成为Java实体的注释,生成的实体清晰明了 可选的去除掉对版本管理不友好的注释,这样新增或删除字段重新生成的文件比较过来清楚 目前已经支持Mysql、Mysql8、Oracle、PostgreSQLSQL Server,暂不对其他非主流数据库提供支持。(MySQL支持的比较好,其他数据库有什么问题可以在issue中反馈) 本工具由于
@Insert("<script> Insert ALL into table(字段1,字段2) values<foreach collection=\"list\" item=\"item\" index=\"index\" separator=\"into table VALUES\">" (#{item},#{... mybatis版本:mybatis-3.4.5.jar Oracle版本:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 二、ORA-00933 java实体类 public class Eenty implements Serializable{ private String sdate; private String rs; private String gro...
oracle 不支持 insert into 表名 (column1,column2,column3)values (value1,value2,value3),((value1,value2,value3))该种格式的批量插入 mysql 支持 oracle 写法 如下 <insert id="insertDataList" parameterType="java.util.List"> insert into authen_batch_verify_data(
oracle在mybatis批量插入数据错java.sql.SQLException: ORA-00933: SQL 命令正确结束现象最常见的解决方案不常见解决方案原因解决方案 在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis的foreach标签进行循环插入,可是搬照Mysql批量插入会产生 异常 最常见的解决方案 网络上说的最多的解决方案大致都是说由于SQL语法造成的原因,例如这样: Error updating databas
3.4.1 代码生成器,又被叫做逆向工程,MyBatis官方为了推广,自己也写了一个,我之前也使用这个,功能也是非常强大,强大以为支持自定义配置,那么问题来了,我该怎么配置才合理呢,所以,有人把所有的配置项都弄成中文的,还有人开发了生成插件,这些在我以往的博文中都看看到。MyBatis-Plus的代码生成器到底怎么样,这我就不评判了,我就这样说,用用看吧。 功能列表: 自动生成model类 自动生成dao接口 自动生成xml文件 自动生成service接口 自动生成service实现类 model支持Builder模式 支持swagger2 支持生成数据库字段常量 支持生成Kotlin代码 ……more…… ├── README.md ├── pom.xml └── src
赠送jar包:mybatis-paginator-1.2.15.jar; 赠送原API文档:mybatis-paginator-1.2.15-javadoc.jar; 赠送源代码:mybatis-paginator-1.2.15-sources.jar; 赠送Maven依赖信息文件:mybatis-paginator-1.2.15.pom; 包含翻译后的API文档:mybatis-paginator-1.2.15-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.github.miemiedev:mybatis-paginator:1.2.15; 标签:github、miemiedev、mybatis、paginator、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
mybatis加上发电机的用户界面 提供一致的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等,可以自定义模板以及各种输出参数,也可以通过SQL查询语句直接生成代码。 ♡maven的相关依赖,注意范围只需要写test就可以了 < dependency> < groupId>com.github.davidfantasy</ groupId> < artifactId>mybatis-plus-generator-ui</ artifactId> < version>1.4.2</ version> < scope>test</ scope> </ dependency> 在项目的test目录新建一个启动类,代码示例
(如果确认没有错误,可以拿到sql development中去用sql工具试试) 2.检查使用连接数据库的方法。 executeQuery、execute、executeUpdate是否存在使用错误,或者换个试试 3.我把sql语句中的‘;‘去掉了,然后sql语句运行正常,没有错,原因知。
关于mybatisinsert into select 命令结束问题,最后以为是sql写错了,但是,在plsql执行又没问题。最后还是解决问题, 是设置问题。 ### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令正确结束 原先的配置: 修改了以后,加了 useGeneratedKeys="false"
【Redis】a bean of type ‘org.springframework.data.redis.core.RedisTemplate‘ that could not be found