精华内容
下载资源
问答
  • Mybatis oracle 批量修改

    2020-11-27 14:42:20
    1、普通List直接传入 <update id="updateList" > <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";"> update T_USER <set>...

    1、普通List直接传入

    <update id="updateList" >
            <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
                update T_USER
                <set>
                    <if test="item.name !=null">
                        NAME = #{item.name},
                    </if>
                    <if test="item.sex !=null">
                        SEX = #{item.sex},
                    </if>
                    <if test="item.age !=null">
                        AGE = #{item.age},
                    </if>
                    <if test="item.className !=''">
                        CLASS_NAME = #{item.className},
                    </if>
                </set>
                where ID = #{item.id}
            </foreach>
        </update>

    2、使用case when

    <update id="updateList" >
            UPDATE T_USER
            <trim prefix="set" suffixOverrides=",">
                <trim prefix="NAME = CASE" suffix="end,">
                    <foreach collection="list" item="item" index="index">
                        <if test="item.name != null">
                            WHEN ID = #{item.id} THEN #{item.name}
                        </if>
                    </foreach>
                </trim>
                <trim prefix="SEX = CASE" suffix="end,">
                    <foreach collection="list" item="item" index="index">
                        <if test="item.sex != null">
                            WHEN ID = #{item.id} THEN #{item.sex}
                        </if>
                    </foreach>
                </trim>
                <trim prefix="AGE = CASE" suffix="end,">
                    <foreach collection="list" item="item" index="index">
                        <if test="item.age != null">
                            WHEN ID = #{item.id} THEN #{item.age}
                        </if>
                    </foreach>
                </trim>
                <trim prefix="CLASS_NAME = CASE" suffix="end,">
                    <foreach collection="list" item="item" index="index">
                        <if test="item.className != null">
                            WHEN ID = #{item.id} THEN #{item.className}
                        </if>
                    </foreach>
                </trim>
            </trim>
            where
            <foreach collection="list" separator="or" item="item" index="index" >
                ID = #{item.id}
            </foreach>
        </update>

    注意:当list数量过大时可能会栈溢出,需要将list分割

     

    展开全文
  • 主要介绍了mybatis执行批量更新batch update 的方法,提供oracle和mysql两种方法,非常不错,需要的朋友参考下
  • 批量处理数据的时候可能会遇到同事需要操作一批数据,比如增删改查。这个片博客记录一下自己在操作过程的方法和一些经验。 如果在处理过程使用IN,那么要注意如果IN后边的参数超过1000,数据库会报错。我是...

    在批量处理数据的时候可能会遇到同事需要操作一批数据,比如增删改查。这个片博客记录一下自己在操作过程中的方法和一些经验。

    如果在处理过程中使用IN,那么要注意如果IN后边的参数超过1000,数据库会报错。我是直接用逻辑代码把数据量控制在1000以内,具体可以参考上一篇博客的方法。

    接下来贴上增删改的mybatis代码:

    增加:

    <insert id="insertList" parameterType="java.util.List">
            insert into tableName (ID, NAME, AGE)
            <foreach collection="list" item="item" index="index" open="(" close=")" separator="union all">
                select #{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR},
                #{item.age,jdbcType=VARCHAR}
                from dual
            </foreach>
        </insert>

    删除:

    <delete id="deleteList" parameterType="java.util.List">
            delete from TABLENAME
            where ID in
            <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
                #{item,jdbcType=VARCHAR}
            </foreach>
        </delete>

    修改:

    <update id="updateList" parameterType="java.util.List">
            <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
                update TABLENAME
                <set>
                    <if test="item.name!= null">
                        NAME = #{item.name,jdbcType=VARCHAR},
                    </if>
                    <if test="item.age!= null">
                        AGE = #{item.age,jdbcType=VARCHAR},
                    </if>
                </set>
                where ID = #{item.id,jdbcType=VARCHAR}
            </foreach>
        </update>

     

    展开全文
  • 1、MyBatis + Oracle 实现批量新增和批量修改 需要注意的是保存或修改是返回的值为-1,没有返回行数,请看文章:https://blog.csdn.net/qq_40015409/article/details/113416324 MyBatis + Oracle 实现批量新增...

    MyBatis 实现批量新增和批量修改

    1、MyBatis + Oracle 实现批量新增和批量修改

    需要注意的是保存或修改是返回的值为-1,没有返回行数,请看文章:https://blog.csdn.net/qq_40015409/article/details/113416324

    MyBatis + Oracle 实现批量新增(基于序列化自增长主键)

    mapper 接口

     void batchInsert(List<ASingleProject> list); 

    mapper.xml

    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
      	 insert into A_SINGLE_PROJECT (KID, SINGLEPROJECTID, ZJZMJ, 
          DSGD, DSCS, DXCS, JGLX, 
          JCXS, DS_JZMJ, JKC_JZMJ, 
          DX_JZMJ, ZZ_JZMJ, BG_JZMJ, 
          SY_JZMJ, CF_JZMJ, RF_JZMJ, 
          QT_YFMJ, DSGYTS, TS_60_100, 
          TS_100_144, TS_144, TS_BS, 
          ZTS, JGZDKD, HS, XSDTS, 
          KCFTS) 
           select s_a_single_project.nextval, cd.* from (
            <foreach collection="list" item="item" index="index" separator="UNION ALL" >
            (
            select 
       	  		#{item.singleprojectid,jdbcType=DECIMAL}, 
       	  		#{item.zjzmj,jdbcType=VARCHAR}, 
          		#{item.dsgd,jdbcType=VARCHAR}, 
          		#{item.dscs,jdbcType=VARCHAR}, 
          		#{item.dxcs,jdbcType=VARCHAR}, 
          		#{item.jglx,jdbcType=VARCHAR}, 
          		#{item.jcxs,jdbcType=VARCHAR}, 
          		#{item.dsJzmj,jdbcType=VARCHAR}, 
          		#{item.jkcJzmj,jdbcType=VARCHAR}, 
          		#{item.dxJzmj,jdbcType=VARCHAR}, 
          		#{item.zzJzmj,jdbcType=VARCHAR}, 
          		#{item.bgJzmj,jdbcType=VARCHAR}, 
          		#{item.syJzmj,jdbcType=VARCHAR}, 
          		#{item.cfJzmj,jdbcType=VARCHAR}, 
          		#{item.rfJzmj,jdbcType=VARCHAR}, 
          		#{item.qtYfmj,jdbcType=VARCHAR}, 
          		#{item.dsgyts,jdbcType=VARCHAR}, 
          		#{item.ts60100,jdbcType=VARCHAR}, 
          		#{item.ts100144,jdbcType=VARCHAR}, 
          		#{item.ts144,jdbcType=VARCHAR}, 
          		#{item.tsBs,jdbcType=VARCHAR}, 
          		#{item.zts,jdbcType=VARCHAR}, 
          		#{item.jgzdkd,jdbcType=VARCHAR}, 
          		#{item.hs,jdbcType=VARCHAR}, 
          		#{item.xsdts,jdbcType=VARCHAR}, 
          		#{item.kcfts,jdbcType=VARCHAR}
          	from dual
          	)
          </foreach>
          ) cd
      </insert>

     MyBatis + Oracle 实现批量修改

    mapper 接口

    void batchUpdate(List<ASingleProject> list); 

     mapper.xml

     <update id="batchUpdate" parameterType="java.util.List">
      	 <foreach collection="list" index="index" item="item" open="begin" close=";end;" separator=";">
      	 	 update A_SINGLE_PROJECT
        <set>
          <if test="item.zjzmj != null">
            ZJZMJ = #{item.zjzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.dsgd != null">
            DSGD = #{item.dsgd,jdbcType=VARCHAR},
          </if>
          <if test="item.dscs != null">
            DSCS = #{item.dscs,jdbcType=VARCHAR},
          </if>
          <if test="item.dxcs != null">
            DXCS = #{item.dxcs,jdbcType=VARCHAR},
          </if>
          <if test="item.jglx != null">
            JGLX = #{item.jglx,jdbcType=VARCHAR},
          </if>
          <if test="item.jcxs != null">
            JCXS = #{item.jcxs,jdbcType=VARCHAR},
          </if>
          <if test="item.dsJzmj != null">
            DS_JZMJ = #{item.dsJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.jkcJzmj != null">
            JKC_JZMJ = #{item.jkcJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.dxJzmj != null">
            DX_JZMJ = #{item.dxJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.zzJzmj != null">
            ZZ_JZMJ = #{item.zzJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.bgJzmj != null">
            BG_JZMJ = #{item.bgJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.syJzmj != null">
            SY_JZMJ = #{item.syJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.cfJzmj != null">
            CF_JZMJ = #{item.cfJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.rfJzmj != null">
            RF_JZMJ = #{item.rfJzmj,jdbcType=VARCHAR},
          </if>
          <if test="item.qtYfmj != null">
            QT_YFMJ = #{item.qtYfmj,jdbcType=VARCHAR},
          </if>
          <if test="item.dsgyts != null">
            DSGYTS = #{item.dsgyts,jdbcType=VARCHAR},
          </if>
          <if test="item.ts60100 != null">
            TS_60_100 = #{item.ts60100,jdbcType=VARCHAR},
          </if>
          <if test="item.ts100144 != null">
            TS_100_144 = #{item.ts100144,jdbcType=VARCHAR},
          </if>
          <if test="item.ts144 != null">
            TS_144 = #{item.ts144,jdbcType=VARCHAR},
          </if>
          <if test="item.tsBs != null">
            TS_BS = #{item.tsBs,jdbcType=VARCHAR},
          </if>
          <if test="item.zts != null">
            ZTS = #{item.zts,jdbcType=VARCHAR},
          </if>
          <if test="item.jgzdkd != null">
            JGZDKD = #{item.jgzdkd,jdbcType=VARCHAR},
          </if>
          <if test="item.hs != null">
            HS = #{item.hs,jdbcType=VARCHAR},
          </if>
          <if test="item.xsdts != null">
            XSDTS = #{item.xsdts,jdbcType=VARCHAR},
          </if>
          <if test="item.kcfts != null">
            KCFTS = #{item.kcfts,jdbcType=VARCHAR},
          </if>
        </set>
        where  SINGLEPROJECTID = #{item.singleprojectid,jdbcType=DECIMAL}
      	 </foreach>
      </update>

     

    展开全文
  • 本来Mybatis批量插入Mysql的操作在Oracle数据库突然报错了。具体的操作如下: @Insert({ "<script>", "insert into tr_wy_proj_mo_rela(PROJECTID,RULE_CONTENT) ", "<foreach collection='nelist' ...

    问题描述:

    今天在Mybatis批量插入时出现了一点问题。本来Mybatis批量插入Mysql的操作在Oracle数据库中突然报错了。具体的操作如下:

    @Insert({ "<script>",
            "insert into tr_wy_proj_mo_rela(PROJECTID,RULE_CONTENT) values ",
            "<foreach collection='nelist' index='index' item='item' separator=','>",
            "(#{item.projectid,jdbcType=VARCHAR}, #{item.rule_content,jdbcType=VARCHAR})",
            "</foreach>",
            "</script>" })
    void insertShieldProMoRela(@Param(value="nelist") List<Map<String, Object>> nelist);

    具体报错如下:

    于是上网搜了一些资料,终于找到了原因。

    首先先解释一下,上面的批量插入语句最终会翻译成以下语句:

    insert into tr_wy_proj_mo_rela(PROJECTID,RULE_CONTENT) values (?, ?) ,(?, ?);

    这种语法在MySQL数据库中是支持的,但是在Oracle数据库中却不适用。 

    可以通过如下方法来解决:

    1、去除SQL中values关键字;

    2、foreach中的语句需要select...from dual包裹;如下:

    select #{item.projectid,jdbcType=VARCHAR}, #{item.rule_content,jdbcType=VARCHAR} from dual 

    3、foreach中的separator的值要是union all,union all就是对select查询的结果数据进行合并。

    最终修改成如下:

    @Insert({ "<script>",
            "insert into tr_wy_proj_mo_rela(PROJECTID,RULE_CONTENT) ",
            "<foreach collection='nelist' index='index' item='item' separator='UNION ALL'>",
            "select #{item.projectid,jdbcType=VARCHAR}, #{item.rule_content,jdbcType=VARCHAR} from dual ",
            "</foreach>",
            "</script>" })

    这样就能正常入库了!

     

    展开全文
  • mybatis oracle中 批量插入数据(不需要:自动生成主键的时候) 1,Mapper.xml <insert id="addList" parameterType="java.util.List" useGeneratedKeys="false"> INSERT INTO userinfo ( ID, ...
  • 目录 Mysql批量插入: MySql批量修改: ...Oracle批量修改Oracle批量删除: Oracle逻辑批量删除: Mysql批量插入: &lt;insert id="batchInsert" parameterType="java.util.L...
  • Mybatis批量插入需要foreach元素。foreach元素有以下主要属性: (1)item:集合每一个元素进行迭代时的别名。 (2)index:指定一个名字,用于表示在迭代过程,每次迭代到的位置。 (3)collection:根据传入的...
  • mybatis oracle 批量新增/批量修改

    千次阅读 2018-03-14 10:47:52
    * mapper方法定义 批量修改视频参与信息 * @param recordList */ public void updateVideoRecordList(@Param("list")List&lt;VideoRecordModel&gt;recordList); &lt;update id="...
  • begin    update ordermain    productno = #{item.productno}    where ORDERNO = #{item.orderno}     ;e
  • oracle批量修改,参数是数组,xml代码如下: &lt;update id="addPurchase" &gt; begin &lt;foreach collection="array" item="id" separator=";"&...
  • mysql的批量操作与oracle的操作不同,如果直接使用mysql的操作方式,放在oracle操作,执行的时候,会一致报SQL未正确结束的错误,所有我们要进行分开,进行针对性操作。 关于mysql的操作: <insert id=...
  • 原来我写过Mybatis+Mysql的实现批量保存,所以决定改造一下 mysql的写法如下: void saveShoClassBatch(List<ShopMeClass> classList); insert into shop_me_class (id, memer_id, bs_id, g_
  • public interface ProMapper { int batchUpdateDbInfo(@Param(value = "list") ...mybatis 对应的xml配置文件 <update id="batchUpdateDbInfo"> <foreach collection="list" item="item" index="index" se
  • 最近在开发的过程总遇到了一个问题,mybatis在执行批量插入的过程总是报sql为正确结束的问题 ,调查了许久最终发现mysql与oracle批量插入的sql写法不一致,以下为两种sql的写法: oracle写法 <ins...
  • datalistmap的顺序需要与lineColumn对应<insert id="insertIndi" parameterType="java.util.HashMap" useGeneratedKeys="false"> <![CDATA[ INSERT INTO TABLEA(${lineColumn}) select results.* from...
  • mysql 首先需要在datasource的url连接串上增加 &allowMultiQueries=true ...oracle ;end" separator=";"> update user set user_name =#{item.name} where user_age=#{item.age}
  • Java,Mybatis 批量修改

    2021-04-07 13:40:32
    一:批量修改 Dao层的方法名:public int editSave(@Param("list")List<MaterialStockUnpack> list,@Param("tableName")String tableName); 批量修改多个参数:这里 表名tableName 为可编号参数,如果只是...
  • MyBatis的mapper配置文件的语句(在Oracle数据,多条数据之间用union all 连接,MySQL数据库用,): <insert id="submitItem" parameterType="java.util.List"> insert into ITEM ( ITEM_COD...
  • oracle+mybatis如何返回批量插入的id 没有用序列 id通过 select sys_guid()生成 如何解决
  • 根据手机号 修改count_status,check_status,active_status 且创建时候为2天内的    parameterType="com.tec.entity.SunActiveMobile">  update sun_active_mobile  ,">  ,">    when  (mobile=#{...
  • (1)、批量操作,重点在foreach的配置,不熟悉的伙伴可以先多去了解一下mybatis foreach标签的属性和用法 (2)、上面的例子还掺杂了其他很多,可以学习和借鉴的点,仔细看,多发现(以上例子都是,从已上线的项目...
  • Mybatis本身是很灵活的,因为可以自己在XML文件编写sql进行操作,那就可以一次性将插入到数据库,这样只用向数据库提交一次,性能也可以提高不少。下面来看一个例子: 首先,在DataMapper.java 接口类加入...
  • mybatis批量更新返回值

    2021-04-15 10:05:46
    int updateAmount = saleContractDetailMapper.updateContractDetailAmountFromLading(contractDetailDTOList);...批量更新,返回值1和0,1更新成功(全部更新成功),0更新失败(一条失败或者全部失败)
  • mybatis批量插入数据到oracle出错

    千次阅读 2017-05-03 15:06:07
    在程序封装一个List集合对象,然后把该集合的实体插入到数据库,因为项目使用了MyBatis,所以打算使用MyBatis的foreach功能进行批量插入。期间遇到了“SQL 命令未正确结束 ”的错误,最终解决,记录下来供以后...
  • MyBatis批量修改操作

    2019-04-19 17:06:00
    .MyBatis配置 这是mysql的配置,注意需要加上&allowMultiQueries=true配置 jdbc_url=jdbc:mysql://localhost:3306/go?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNu...
  • oraclemybatis中批量插入数据报错java.sql.SQLException: ORA-00933: SQL 命令未正确结束现象最常见的解决方案不常见解决方案原因解决方案 现象 在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是...
  • 在mapper文件如此写: <update id="updateHK" parameterType="java.util.List" > update W_MM_HK_BASE hk <trim prefix="set" suffixOverrides=","> <trim pref...
  • 解决思路:在程序封装一个List集合对象,然后把该集合的实体插入到数据库,因为项目使用了MyBatis,所以打算使用MyBatis的foreach功能进行批量插入。期间遇到了“SQL 命令未正确结束 ”的错误,最终解决,记录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,529
精华内容 2,211
关键字:

oracle中mybatis批量修改