mybatis 批量 *** 作数据

mybatis 批量 *** 作数据,第1张

mybatis的批量 *** 作有两种方式,一是使用foreach标签,二是使用mybatis的BATCH模型

在xml中通过foreach对表数据进行循环 *** 作

在oracle中不支持insert into product(name, type, price) values ('a', 'tv', 1233), ('b', 'ac', 3455),('','','')这种形式的sql,因此oracle批量插入使用 insert all into table() values() into table() values() select from dual; 语句来解决以下方式,并且需要显示指定useGeneratedKeys=false

另一种方法是使用另外一种方法是 insert into table() (select from dual) union all (select from dual)

Mybatis内置的ExecutorType一共有三种,默认为SIMPLE,该模式下它为每个语句的执行创建一个新的预处理语句,并单条提交sql。

BATCH 模式会重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优;

注意 : batch模式也有自己的问题,比如在Insert *** 作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的。

具体用法如下:

ProductMapperjava 如下:

mapperxml 如下:

如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

MyBatis提供用于插入数据的注解有两个:@insert,@InsertProvider,类似还有:@DeleteProvider@UpdateProvider,和@SelectProvider,

作用:

用来在实体类的Mapper类里注解保存方法的SQL语句

区别:

@Insert是直接配置SQL语句,而@InsertProvider则是通过SQL工厂类及对应的方法生产SQL语句,这种方法的好处在于,我们可以根据不同的需求生产出不同的SQL,适用性更好。

使用:

@Insert

@Insert(“insert into blog(blogId,title,author) values(#blogId,#title,#author)”)

public boolean saveBlog(Blog blog);

@InsertProvider

在mapper接口中的方法上使用@InsertProvider注解:

参数解释:

type为工厂类的类对象,

method为对应的工厂类中的方法,方法中的@Param(“list”)是因为批量插入传入的是一个list,但是Mybatis会将其包装成一个map。其中map的key为“list”,value为传入的list。

以上就是关于mybatis 批量 *** 作数据全部的内容,包括:mybatis 批量 *** 作数据、mybatis insert 返回主键 的before 和after的区别、Mybatis中如何实现批量数据的插入,请写出配置文件的配置信息以及Java代码的源等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9408597.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存