問題描述
通過Example實現如下SQL語句功能
SELECT T.* FROM DAA_ORGINFO T WHERE T.DAA_ZTNO='參數' AND T.ID = '參數' OR T.DAA_ID_SJ='參數'
因爲Example‘沒有直接寫or的方法,所以需要通過and來構造改SQL語句,首先我們分析一下,進行改造如下:
SELECT T.* FROM DAA_ORGINFO T WHERE (T.DAA_ZTNO='參數' AND T.ID = '參數') OR (T.DAA_ZTNO='參數' AND T.DAA_ID_SJ='參數')
解決方法
實現方式如下:
Example example = new Example();
example.setOrderByClause("CREATE_DATE DESC,ID");
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo(DaaOrginfo.class,"DAA_ZTNO","1");
criteria.andEqualTo(DaaOrginfo.class,"ID",daaId);
Example.Criteria criteria2 = example.createCriteria();
criteria2.andEqualTo(DaaOrginfo.class,"DAA_ZTNO","1");
criteria2.andEqualTo(DaaOrginfo.class,"DAA_ID_SJ",daaId);
example.or(criteria2);
xml中的SQL寫法,因項目問題,example重新構造,可參考如下:
<select id="getDataGridByExample" resultType="com.ctg.pbis.partymanage.daaorginfo_x.entity.DaaOrginfo">
SELECT T.*, GET_NAME_BYDYID(T.DAB_ID_LXR) DAB_ID_LXR_NAME, GET_NAME_BYDYID(T.DAB_ID_ZZSJ) DAB_ID_ZZSJ_NAME
FROM DAA_ORGINFO T
WHERE 1=1
<if test="example != null">
<trim suffix="" suffixOverrides="and">
<trim suffix="" suffixOverrides="()">
AND
<trim prefix="(" suffix=")">
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" suffix=")" prefixOverrides="and">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and
#{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")"
separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</trim>
</trim>
</trim>
</if>
<if test="example.orderByClause != null">
order by ${example.orderByClause}
</if>
</select>
注意事項
如SQL出現參數異常,請在where後面添加1 = 1,因爲exampl的封裝中首先加入了and關鍵字,這回導致SQL報錯。