mybatis 怎么对批量插入加事物

mybatis 怎么对批量插入加事物,第1张

额 mybatis只是 sql的拼接啊,你原生sql怎么插入 这个就怎么插入啊,无法在java控制分段调用 mybatis的批量插入,而mybatis<pre t="code" l="xml">方法一:

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

<selectKey keyProperty="fetchTime" order="BEFORE"

resultType="java.lang.String">

SELECT CURRENT_TIMESTAMP()

</selectKey>

insert into kangaiduoyaodian ( depart1, depart2, product_name,

generic_name, img, product_specification, unit,

approval_certificate, manufacturer, marketPrice, vipPrice,

website, fetch_time, productdesc ) values

<foreach collection="list" item="item" index="index"

separator=",">

( #{item.depart1}, #{item.depart2}, #{item.productName},

#{item.genericName}, #{item.img},

#{item.productSpecification}, #{item.unit},

#{item.approvalCertificate}, #{item.manufacturer},

#{item.marketprice}, #{item.vipprice}, #{item.website},

#{fetchTime}, #{item.productdesc} )

</foreach>

</insert>

方法二:

<insert id="batchInsertB2B" parameterType="ArrayList">

insert into xxxxtable(hkgs,hkgsjsda,office,asdf,ddd,ffff,supfullName,classtype,agent_type,remark)

<foreach collection="list" item="item" index="index" separator="union all">

select #{item.hkgs,jdbcType=VARCHAR},

#{item.hkgsjsda,jdbcType=VARCHAR},

#{item.office,jdbcType=VARCHAR},

#{item.asdf,jdbcType=VARCHAR},

#{item.ddd,jdbcType=VARCHAR},

#{item.ffff,jdbcType=VARCHAR},

#{item.supfullName,jdbcType=VARCHAR},0,0,

#{item.remark,jdbcType=VARCHAR} from dual

</foreach>

</insert>

Dao层

int updateByList(List list)

Mappe层

批量修改

<update id="updateByList" parameterType="java.util.List">

<foreach collection="list" item="item" index="index" separator="">

update jt_fin_repayment_plan

<set >

erestTotal != null" >

ORG_INTEREST_TOTAL = #{item.orgInterestTotal},

</if>

<if test="item.delFlag != null" >

DEL_FLAG = #{item.delFlag},

</if>

<if test="item.state != null" >

STATE = #{item.state},

</if>

<if test="item.createBy != null" >

CREATE_BY = #{item.createBy},

</if>

<if test="item.createTime != null" >

CREATE_TIME = #{item.createTime},

</if>

<if test="item.updateBy != null" >

UPDATE_BY = #{item.updateBy},

</if>

UPDATE_TIME = #{NOW(),

</set>

where REPAYMENT_ID = #{item.repaymentId}

</foreach>

</update>

----------------------------------------------------------------------------------------------------------

dao层

//批量添加

int addList(List list)

Map层

批量添加

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

insert into jt_fin_adjust_rates_project_history (

ID,ADJUST_RATES_ID,PROJECT_ID,START_WHOLE,

END_WHOLE,START_WITHOUT,END_WITHOUT,PROJECT_DATE,

KEEP,AUDIT_FLAG,STATUS,REMARK,DEL_FLAG,

CREATE_BY,CREATE_TIME,UPDATE_TIME,UPDATE_BY

)

values

<foreach collection="list" separator="," item="item" index="index">

((select UUID()), #{item.adjustRatesId},#{item.projectId},#{item.startWhole},

#{item.endWhole},#{item.startWithout},#{item.endWithout},#{item.projectDate},

#{item.keep},#{item.auditFlag},#{item.status},#{item.remark},#{item.delFlag},

#{item.createBy},sysdate(), #{item.updateTime}, #{item.updateBy})

</foreach>

</insert>

注意:我的id VARCHAR类型 主键 不能递增 在这里我用的是UUID生成的

原本,想写一个批量添加,回显id但是没实现就不写了,有大佬可以补充一下

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,这在某型情形下是不符合业务要求的。

具体用法如下:

ProductMapper.java 如下:

mapper.xml 如下:


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

原文地址: http://outofmemory.cn/bake/7916545.html

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

发表评论

登录后才能评论

评论列表(0条)

保存