ibatis

Posted 十一路客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ibatis相关的知识,希望对你有一定的参考价值。

1.ibatis插入操作时,允许为null的字段必须设置字段对应的类型

  https://www.cnblogs.com/mqyg/p/4046513.html

2. ibatis相关操作

(1)oracle批量插入

<insert id="hdBatchInsertInheritorAttachment" parameterClass="java.util.List">
	    INSERT 
	    INTO AONE_RUS_HD_INHERITOR_FILE(col1,col2,col3,col4,col5)
	    SELECT SEQ_AONE_RUS_HD_INHERITOR_FILE.nextval, A.* from(
	    <iterate conjunction=" union all ">
	       SELECT 
	            #list[].open_task_id:NUMERIC#,
			    #list[].col1:NUMERIC#,
			    #list[].col2:VARCHAR#,
			    #list[].col3:VARCHAR#,
			    #list[].col4:NUMERIC#,
			    #list[].col5:TIMESTAMP#
		    FROM DUAL
	    </iterate>
	    )A    
</insert>

(2)动态查询 

1)dynamic的prepend只要检测到第一个为“真”的条件比较元素,则覆盖其prepend属性并组装where关键字为动态SQL的一部分。 

2)isNotNull的prepend只要检测到参数值满足比较条件,则前置组装and关键字为动态SQL的一部分。 

注意一点:上面的例子中,ibtis文档中说 - dynamic元素中的prepend属性“where”将覆盖第一个为“真”的条件比较元素(即isGreaterThan)的prepend属性 

按照这个理解,则第一个为“真”的条件比较元素(即isGreaterThan)的prepend属性是不需要的,或者“and”是不需要的,(ibatis文档中的原文是 For example, in the case of the first true condition, there is no need for the AND, and in fact it would break the statement) 来自 <https://blog.csdn.net/huyanzhiwei/article/details/52186396>

<select id="queryStatisticResultList" parameterClass="StatisticBean" resultClass="StatisticResult">
		SELECT
		FROM tb_Info t
		LEFT JOIN tb_fb fb ON t.id = fb.refid
		<dynamic prepend="where">
		    <!-- 更新日期 -->
		    <isNotEmpty prepend="and" property="dateFrom">
		        <![CDATA[
		           t.updatedate >= to_date(#dateFrom#||'00:00:00',
		           'yyyy-mm-dd hh24:mi:ss')
		        ]]>
		    </isNotEmpty>
		    <isNotEmpty prepend="and" property="dateTo">
		        <![CDATA[
		           t.updatedate <= to_date(#dateTo#||'23:59:59',
		           'yyyy-mm-dd hh24:mi:ss')
		        ]]>
		    </isNotEmpty>
		   
		  <!-- 不区分大小写 -->
		    <isNotEmpty prepend="and" property="dataVersion">
				upper(t.data_version) like
				upper('%'||#dataVersion#||'%')
			</isNotEmpty>		
	             <isNotNull prepend="and" property="issueArr">
				<iterate property="issueArr" open="(" close=")"
					conjunction="or">
					upper(t.issue) like
				      upper('%'||#issueArr[]#||'%')
				</iterate>
		  </isNotNull>
		    <isNotNull prepend="and" property="issueTypeArr">
				<iterate property="issueTypeArr" open="(" close=")"
					conjunction="or">
					upper(t.issuetype) like
				      upper('%'||#issueTypeArr[]#||'%')
				</iterate>
			</isNotNull>
		    <isNotNull prepend="and" property="dataStatusArr">
				<iterate property="dataStatusArr" open="(" close=")"
					conjunction="or">
					fb.datastatus like
				     ('%'||#dataStatusArr[]#||'%')
				</iterate>
		     </isNotNull> 
                           <!--不区分大小写 -->
		    <isNotEmpty prepend="and" property="dataVersion">
				upper(t.data_version) like
				upper('%'||#dataVersion#||'%')
		   </isNotEmpty>		
		    <isNotNull prepend="and" property="issueArr">
				<iterate property="issueArr" open="(" close=")"
					conjunction="or">
					upper(t.issue) like
				      upper('%'||#issueArr[]#||'%')
				</iterate>
		 </isNotNull>
	  </dynamic>
</select>

(3)批量更新

<!-- 更新无效工单状态 -->
<update id="updateNullityStatus" parameterClass="com.test.infomanager.model.CommonBean">
		update test_table set status='04' ,
		IsExported='1',lastmoddate=#lastmoddate#
		<dynamic prepend="where">
			ID in
			<iterate property="idArr" open="(" close=")" conjunction=",">
				#idArr[]#
			</iterate>
		</dynamic>
</update>

 

以上是关于ibatis的主要内容,如果未能解决你的问题,请参考以下文章

ibatis批量插入怎么做

ibatis一对多映射报错

ibatis学习

ibatis处理日期

ibatis 批量update操作

IBatis.Net使用总结-- IBatis 调用存储过程