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报错。

你可能感兴趣的:(Oracle)