Example查詢SQL之or查詢and查詢

Example查詢SQL之or查詢and查詢

問題描述

通過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報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章