zoukankan      html  css  js  c++  java
  • MyBatis+Oracle+Sequence

    1. 【MyBatis + Oracle + Sequence】插入单条
    <insert id="insertFfbz" useGeneratedKeys="true" parameterType="com.resources.novelcoronavirus.domain.FuFeiBingZhongPO">
    	<selectKey resultType="String" order="BEFORE" keyProperty="ID">
    		SELECT appgm.SEQ_YB_FFBZ.NEXTVAL FROM DUAL
    	</selectKey>
    	INSERT INTO appgm.yb_ffbz (
    		ID,
    		BZJSMLI,
    		ABZJSBZMLDM,
    		ABZJSBZMC,
    		XDSSCZDM,
    		XDSSCZMC,
    		YXBZ,
    		WYJLH,
    		SJCJSJ,
    		SJGXSJ,
    		BBH,
    		BZNH,
    		BZ,
    		BBMC,
    		ZLZNYM,
    		ZLZNDZDA
    	) VALUES (
    		#{ID, jdbcType=VARCHAR},
    		#{BZJSMLI, jdbcType=VARCHAR},
    		#{ABZJSBZMLDM, jdbcType=VARCHAR},
    		#{ABZJSBZMC, jdbcType=VARCHAR},
    		#{XDSSCZDM, jdbcType=VARCHAR},
    		#{XDSSCZMC, jdbcType=VARCHAR},
    		#{YXBZ, jdbcType=VARCHAR},
    		#{WYJLH, jdbcType=VARCHAR},
    		#{SJCJSJ, jdbcType=VARCHAR},
    		#{SJGXSJ, jdbcType=VARCHAR},
    		#{BBH, jdbcType=VARCHAR},
    		#{BZNH, jdbcType=VARCHAR},
    		#{BZ, jdbcType=VARCHAR},
    		#{BBMC, jdbcType=VARCHAR},
    		#{ZLZNYM, jdbcType=VARCHAR},
    		#{ZLZNDZDA, jdbcType=VARCHAR}
    	)
    </insert>
    
    1. 【MyBatis + Oracle + Sequence】批量插入【MyBatis采用【批处理】的方式最为高效也最推荐,但插入报会 ORA-01461-仅能绑定要插入LONG列的LONG值;是由于使用了DUAL虚拟表,会将长度在(2000至4000)的字符串从"varchar2"类型转为"LONG"类型】
    <insert id="batchInsertFfbz" useGeneratedKeys="true" parameterType="java.util.List">
    	<selectKey resultType="String" order="BEFORE" keyProperty="ID">
    		SELECT appgm.SEQ_YB_FFBZ.NEXTVAL FROM DUAL
    	</selectKey>
    	INSERT INTO appgm.yb_ffbz (
    		ID,
    		BZJSMLI,
    		ABZJSBZMLDM,
    		ABZJSBZMC,
    		XDSSCZDM,
    		XDSSCZMC,
    		YXBZ,
    		WYJLH,
    		SJCJSJ,
    		SJGXSJ,
    		BBH,
    		BZNH,
    		BZ,
    		BBMC,
    		ZLZNYM,
    		ZLZNDZDA
    	) SELECT appgm.SEQ_YB_FFBZ.NEXTVAL, t.* FROM (
    		<foreach collection="list" index="i" item="it" separator="UNION ALL">
    			SELECT
    				#{it.BZJSMLI, jdbcType=VARCHAR},
    				#{it.ABZJSBZMLDM, jdbcType=VARCHAR},
    				#{it.ABZJSBZMC, jdbcType=VARCHAR},
    				#{it.XDSSCZDM, jdbcType=VARCHAR},
    				#{it.XDSSCZMC, jdbcType=VARCHAR},
    				#{it.YXBZ, jdbcType=VARCHAR},
    				#{it.WYJLH, jdbcType=VARCHAR},
    				#{it.SJCJSJ, jdbcType=VARCHAR},
    				#{it.SJGXSJ, jdbcType=VARCHAR},
    				#{it.BBH, jdbcType=VARCHAR},
    				#{it.BZNH, jdbcType=VARCHAR},
    				#{it.BZ, jdbcType=VARCHAR},
    				#{it.BBMC, jdbcType=VARCHAR},
    				#{it.ZLZNYM, jdbcType=VARCHAR},
    				#{it.ZLZNDZDA, jdbcType=VARCHAR}
    			FROM
    				DUAL
    		</foreach>
    	) t
    </insert>
    
    1. 利用循环SQL拼接的方式,能解决【方法2】中批处理方式中DUAL引起的报错问题,但性能远不如批处理。
    <!-- 低版本得MyBatis需要将useGeneratedKeys="false"这是一个坑点 -->
        <insert id="batchInsertTmbz" useGeneratedKeys="false" parameterType="java.util.List">
            <foreach collection="list" index="i" item="it" open="begin" close=";end;" separator=";">
                INSERT INTO appgm.yb_tmbz (
                    ID,
                    MMMTBZMLDM,
                    MMMTBZDLMC,
                    MMMTBZXFLMC,
                    YBQH,
                    BZ,
                    YXBZ,
                    WYJLH,
                    SJCJSJ,
                    SJGXSJ,
                    BBH,
                    BZNH,
                    BBMC,
                    ZLZNYM,
                    ZLZNDZDA,
                    MMMTBZMC,
                    MMMTBZDLDM
                ) VALUES (
                    appgm.SEQ_YB_TMBZ.NEXTVAL,
                    #{it.MMMTBZMLDM, jdbcType = VARCHAR},
                    #{it.MMMTBZDLMC, jdbcType = VARCHAR},
                    #{it.MMMTBZXFLMC, jdbcType = VARCHAR},
                    #{it.YBQH, jdbcType = VARCHAR},
                    #{it.BZ, jdbcType = VARCHAR},
                    #{it.YXBZ, jdbcType = VARCHAR},
                    #{it.WYJLH, jdbcType = VARCHAR},
                    #{it.SJCJSJ, jdbcType = VARCHAR},
                    #{it.SJGXSJ, jdbcType = VARCHAR},
                    #{it.BBH, jdbcType = VARCHAR},
                    #{it.BZNH, jdbcType = VARCHAR},
                    #{it.BBMC, jdbcType = VARCHAR},
                    #{it.ZLZNYM, jdbcType = VARCHAR},
                    #{it.ZLZNDZDA, jdbcType = VARCHAR},
                    #{it.MMMTBZMC, jdbcType = VARCHAR},
                    #{it.MMMTBZDLDM, jdbcType = VARCHAR}
                )
            </foreach>
        </insert>
    
    1. 【MyBatis + Oracle】批量更新
    <update id="batchUpdateFfbz" parameterType="java.util.List">
    	<foreach collection="list" index="i" item="it" open="begin" close=";end;" separator=";">
    		UPDATE
    			appgm.yb_ffbz
    		SET
    			BZJSMLI = #{it.BZJSMLI, jdbcType=VARCHAR},
    			ABZJSBZMLDM = #{it.ABZJSBZMLDM, jdbcType=VARCHAR},
    			ABZJSBZMC = #{it.ABZJSBZMC, jdbcType=VARCHAR},
    			XDSSCZDM = #{it.XDSSCZDM, jdbcType=VARCHAR},
    			XDSSCZMC = #{it.XDSSCZMC, jdbcType=VARCHAR},
    			YXBZ = #{it.YXBZ, jdbcType=VARCHAR},
    			WYJLH = #{it.WYJLH, jdbcType=VARCHAR},
    			SJCJSJ = #{it.SJCJSJ, jdbcType=VARCHAR},
    			SJGXSJ = #{it.SJGXSJ, jdbcType=VARCHAR},
    			BBH = #{it.BBH, jdbcType=VARCHAR},
    			BZNH = #{it.BZNH, jdbcType=VARCHAR},
    			BZ = #{it.BZ, jdbcType=VARCHAR},
    			BBMC = #{it.BBMC, jdbcType=VARCHAR},
    			ZLZNYM = #{it.ZLZNYM, jdbcType=VARCHAR},
    			ZLZNDZDA = #{it.ZLZNDZDA, jdbcType=VARCHAR}
    		WHERE
    			BZJSMLI = #{it.BZJSMLI}
    	</foreach>
    </update>
    
    学习使我充实,分享给我快乐!
  • 相关阅读:
    python基础——协程
    Python基础并发编程——进程
    Python基础并发编程——操作系统
    python基础——socket
    Python基础——网络编程
    文件操作
    深浅拷贝和流程控制
    数据类型
    基础知识
    session和cookie
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/15305558.html
Copyright © 2011-2022 走看看