mybatis Oracle 批量插入、批量更新、批量查询

在使用Mybatis操作oracle数据库时,会涉及到批量操作,踩过好多的坑,留个记录吧。

1、批量插入
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
    INSERT INTO FLB_FLIGHT_LOG_FOC
    (
    ID,FLIGHT_ID,FLIGHT_NO,FLIGHT_DATE,FLIGHT_TYPE,AC_TYPE,AC_REG,CAPTAIN,CAPTAIN_NO,FLIGHT_DATE_ATD,DEPARTURE_AIRPORT,ARRIVAL_AIRPORT,
    BAY,BAY_2,INN,OUT,STD,STA,ETD,ETA,ATD,ATA,ADJUST_TYPE,FLG_VR,FLG_CS,FLG_PATCH,TOTAL_FUEL,REAL_FUEL,REMARK,
    RECEIVE_STATUS,PROCESS_STATUS,REASON,PROCESS_COUNT,CREATE_DATE,CREATOR_SN,CREATOR_NAME,UPDATE_DATE,UPDATOR_SN,UPDATOR_NAME
    )
    SELECT SEQ_FLB_FLIGHT_LOG_FOC.NEXTVAL,FOCLOG.* FROM (
    <foreach collection="list"  item="item" index="index" separator="union all">
        SELECT
        #{item.flightId},#{item.flightNo},#{item.flightDate},#{item.flightType},#{item.acType},#{item.acReg},#{item.captain},#{item.captainNo},#{item.flightDateAtd},#{item.departureAirport},#{item.arrivalAirport},
        #{item.bay},#{item.bay2},#{item.inn},#{item.out},#{item.std},#{item.sta},#{item.etd},#{item.eta},#{item.atd},#{item.ata},#{item.adjustType},#{item.flgVr},#{item.flgCs},#{item.flgPatch},#{item.totalFuel},#{item.realFuel},#{item.remark},
        #{item.receiveStatus},#{item.processStatus},#{item.reason},#{item.processCount},#{item.creatorSn},#{item.creatorName},#{item.createDate},#{item.updateDate},#{item.updatorSn},#{item.updatorName}
        FROM DUAL
    </foreach>
    ) FOCLOG
</insert>
2、批量跟新
<update id="batchUpdate"  parameterType="java.util.List">
    <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
        UPDATE FLB_FLIGHT_LOG_FOC
        <set>
            FLIGHT_ID=#{item.flightId},FLIGHT_NO=#{item.flightNo},FLIGHT_DATE=#{item.flightDate},FLIGHT_TYPE=#{item.flightType},AC_TYPE=#{item.acType},AC_REG=#{item.acReg},
            CAPTAIN=#{item.captain},CAPTAIN_NO=#{item.captainNo},FLIGHT_DATE_ATD=#{item.flightDateAtd},DEPARTURE_AIRPORT=#{item.departureAirport},ARRIVAL_AIRPORT=#{item.arrivalAirport},
            BAY=#{item.bay},BAY_2=#{item.bay2},INN=#{item.inn},OUT=#{item.out},STD=#{item.std},STA=#{item.sta},ETD=#{item.etd},ETA=#{item.eta},ATD=#{item.atd},ATA=#{item.ata},
            ADJUST_TYPE=#{item.adjustType},FLG_VR=#{item.flgVr},FLG_CS=#{item.flgCs},FLG_PATCH=#{item.flgPatch},TOTAL_FUEL=#{item.totalFuel},REAL_FUEL=#{item.realFuel},REMARK=#{item.remark},
            RECEIVE_STATUS=#{item.receiveStatus},PROCESS_STATUS=#{item.processStatus},REASON=#{item.reason},PROCESS_COUNT=#{item.processCount},CREATOR_SN=#{item.creatorSn},
            CREATOR_Name=#{item.creatorName},CREATE_DATE=#{item.createDate},UPDATE_DATE=#{item.updateDate},UPDATOR_SN=#{item.updatorSn},UPDATOR_NAME=#{item.updatorName}
        </set>
        <where>
            ID = #{item.id}
        </where>
    </foreach>
3、批量查询
<select id="batchSelectByIdList" resultType="com.bireturn.amro.flb.dao.entity.FlbFlightLog4Foc" parameterType="java.util.List">
    SELECT * FROM FLB_FLIGHT_LOG_FOC
    WHERE FLIGHT_ID IN
    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis 中,可以使用批量插入的方式来提高插入数据的效率。对于 Oracle 数据库,可以使用以下步骤来实现批量插入: 1.首先,在 MyBatis 的 mapper.xml 文件中,编写批量插入的 SQL 语句,例如: ``` <insert id="batchInsert" parameterType="java.util.List"> insert into table_name (column1, column2, column3) values <foreach collection="list" item="item" separator=","> (#{item.column1}, #{item.column2}, #{item.column3}) </foreach> </insert> ``` 其中,`list` 参数是一个 List 类型的参数,用于存储要插入的数据。`foreach` 标签用于遍历 `list` 参数中的元素,生成多个插入语句。 2.在 Java 代码中,调用 MyBatis批量插入方法,例如: ``` List<MyObject> list = new ArrayList<MyObject>(); // 添加要插入的数据到 list 中 SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); MyMapper myMapper = sqlSession.getMapper(MyMapper.class); for (MyObject obj : list) { myMapper.insert(obj); } sqlSession.flushStatements(); sqlSession.commit(); sqlSession.close(); ``` 在这段代码中,首先创建一个 List 对象,并向其中添加要插入的数据。然后,通过 `SqlSession` 的 `openSession` 方法创建一个批量操作的会话。接着,通过 `getMapper` 方法获取 MyBatis 的 mapper 对象。最后,遍历 list 中的元素,逐个调用 mapper 的插入方法进行插入操作。调用 `flushStatements` 方法可以将所有的 SQL 语句批量执行,调用 `commit` 方法提交事务并关闭会话。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值