一、choose標籤
choose標籤在mybatis的xml文件中,一般與when標籤結合使用, 主要用於條件查詢,根據不同的情況來進行頁面查詢,choose的執行原理如下: 如果有一個when滿足,那麼choose結束, choose會按照when標籤的順序來執行,如果when執行的結果都會false,那麼會執行otherwise標籤裏的語句。
二、實例SQL
<choose>
<when test="range == 'all'">
<!-- 全選 -->
AND 1 = 1
</when>
<when test="range == 'selected'">
<if test="documentType == 801012">
<!-- 費用預提單類型 選擇的-->
AND EXISTS (select 1 from exp_accrual_expense_type a where a.exp_accrual_type_id = #{documentTypeId} and a.exp_expense_id = t.id)
</if>
<if test="documentType == 801006">
<!-- 費用調整單類型 選擇的-->
AND EXISTS (select 1 from exp_adjust_type_assign_e_t a where a.exp_adjust_type_id = #{documentTypeId} and a.exp_expense_id = t.id)
</if>
<if test="documentType == 801001">
<!-- 報賬單類型 已選的費用類型-->
AND EXISTS (select 1 from exp_report_type_expense_type ertet where ertet.report_type_id = #{documentTypeId} and ertet.expense_type_id = t.id)
</if>
</when>
<otherwise>
<if test="documentType == 801012">
<!-- 費用預提單類型 未選的-->
AND NOT EXISTS (select 1 from exp_accrual_expense_type a where a.exp_accrual_type_id = #{documentTypeId} and a.exp_expense_id = t.id)
</if>
<if test="documentType == 801006">
<!-- 費用調整單類型 未選的-->
AND NOT EXISTS (select 1 from exp_adjust_type_assign_e_t a where a.exp_adjust_type_id = #{documentTypeId} and a.exp_expense_id = t.id)
</if>
<if test="documentType == 801001">
<!-- 報賬單類型 未選的費用類型-->
AND NOT EXISTS (select 1 from exp_report_type_expense_type ertet where ertet.report_type_id = #{documentTypeId} and ertet.expense_type_id = t.id)
</if>
</otherwise>
</choose>