当我还是一个初学者的时候,被这个问题为难苦了,不是因为它有多难,而是我实在太笨。但是只要注意积累,早晚是会成为有经验的开发者的,注意只是有经验,而不是会开发的开发者。
1、插入多条记录
mybatis的xml文件:
其中有几点要解释:
<foreach>:foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。这个元素也不会错误地添加多余的分隔符,你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach;
<item>:item 的值是本次迭代获取到的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值;
<index>:index 是当前迭代的序号;
<separator>:这个只是一个简单的分隔符,号。
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO DL_RU_CASE (BATCH_NO,CASE_NO,PROC_DEF_KEY, FORM_ID,ECM_FILE_ID)
VALUES
<foreach collection ="list" item="item" index= "index" separator =",">
(#{item.batchNo},#{item.caseNo},#{item.procDefKey},#{item.formId},#{item.ecmFileId})
</foreach>
</insert>
dao层的代码:
注意:dao层的参数是集合,集合的实现则是在foreach中实现的;
public int insertBatch(List<CaseInfo> caseList){
/*******/
}
2、选择某几种范围记录
可能这么说大家不是特别理解,我解释一下,
比如:现在需要在表中找出年级是一年级、三年级、六年级的学生的记录,那么我们可能有几种不同的做法:
第一种:查出全部数据然后进行单个年级学生的筛选;
第二种:先查出一个年级再查出第二个年级;
其实这种做法也可以但是会有很大的代码量,不推荐大家这么做;
那么使用sql语句直接进行范围性的选择是很不错的选择;话不多说,上代码:
mybatis的xml文件:
<select id="getPageCaseExecuteResult">
select
A.TASK_ID AS TASK_ID,
A.BATCH_NO AS BATCH_NO ,
<if test="formList.size()>0 and formList != null">
AND B.FORM_ID IN
<foreach collection="formList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</select >
dao层的代码:
集合中放的是查询的范围
public List<CalculatePrice> getValuatePriceRecord(List<String> formList) {
/********/
}