ibatis.net xml配置sql使用二
前一章介绍了 ibatis.net xml配置sql的基本使用方法
下面将介绍一些高级使用方法
一:动态产生多条sql语句 那么就得用数组了
<update id="OtTestCaseContactEvrionment_Del" parameterClass="Hashtable" resultClass="int">
update OT_TEST_CASE set TEST_ENVIRONMENT= 0,LAST_UPDATED_BY=#Last_Updated_By#,LAST_UPDATED_DATE=sysdate
where test_object_id=$Test_Object_Id$
and org_id=$Org_Id$
and (1 = 0
<isNotNull prepend = "or" property = "Serial_Ids" >
<!--根据传进来的Serial_Ids数组 用or连接即 最终产生(SERIAL_ID= 1 ) or (SERIAL_ID= 12).... -->
<iterate property="Serial_Ids" open="(" close=")" conjunction="or">
SERIAL_ID = '$Serial_Ids[]$'
</iterate>
</isNotNull>
<isNotNull prepend = "or" property = "Test_Environmets" >
<!-- 同上-->
<iterate property="Test_Environmets" open="(" close=")" conjunction="or">
TEST_ENVIRONMENT = '$Test_Environmets[]$'
</iterate>
</isNotNull>
)
</update>
在Service层 定义如下
public int DelCaseContactEvrionment(int[] CaseId, int[] EnvrionmentId, int TestObjectId, int OrgId, string lastUpdatedBy)
{
Hashtable htCond = new Hashtable();
htCond["Test_Object_Id"] = TestObjectId;
htCond["Org_Id"] = OrgId;
htCond["Last_Updated_By"] = lastUpdatedBy;
if (CaseId != null && CaseId.Count() > 0)
{
//传进来的是数组 如果是string数组就定义string数组就行 使用$会自动识别所属字段类型
htCond["Serial_Ids"] = CaseId;
}
if (EnvrionmentId != null && EnvrionmentId.Count() > 0)
{
//传进来的是数组
htCond["Test_Environmets"] = EnvrionmentId;
}
//调用上面定义的OtTestCaseContactEvrionment_Del
return this.InterUpdate("OtTestCaseContactEvrionment_Del", htCond);
}
二:当你定义了一个resultMap 或者parameterMap的时候
如果这个时候 你想要扩展增加几个字段 又不好修改原因的(会引起调用了该参数的其他地方的异常 这个时候 你可以使用extends熟悉)
列子如下:
<resultMap id="OtTestFeature_AllColumns" class="OtTestFeature">
<result property="SerialId" nullValue="0" column="SERIAL_ID" />
<result property="TestFeatureNo" nullValue="" column="TEST_FEATURE_NO" />
</resultMap>
<!--2013-1-28 叶修涛 添加 测试影响因素 重要性-->
<resultMap id="OtTestFeature_AllColumnsNew" class="OtTestFeature" extends="OtTestFeature_AllColumns" >
<result property="TESTAFFECTELEMENT" column="TEST_AFFECT_ELEMENT" />
<result property="IMPORTANCE" column="IMPORTANCE" />
</resultMap>
<!--2013-1-28 叶修涛 添加 测试影响因素 重要性-->
<select id="OtTestFeature_Select" resultMap="OtTestFeature_AllColumnsNew" parameterClass="OtTestFeature.Key">
select SERIAL_ID,TEST_FEATURE_NO,TEST_AFFECT_ELEMENT,IMPORTANCE
from OT_TEST_FEATURE
<dynamic prepend="where">
<!-- 主键 -->
<isNotNull prepend="AND" property="SerialId">SERIAL_ID=#SerialId#</isNotNull>
</dynamic>
</select>