Mybatis中动态sql多条件查询

动态SQL
1.if 通过test属性中的表达式判断标签中的内容是否有效
(是否会拼接到sql中)

    <select id="getEmpByConditionOne" resultType="Emp">
        select * from t_emp where 1=1
        <if test="empName!=null and empName!='' ">
            and emp_name=#{empName}
        </if>
        <if test="age!=null and age!=''">
            and age=#{age}
        </if>
        <if test="gender!=null and gender!=''">
            and gender=#{gender}
        </if>
    </select>


2.where
1)若where标签中有条件成立,会自动生成where关键字
2)会自动将where标签中内容前多余的and去掉,但是其中内容后多余的and无法去掉
3)若where没有任何一个条件成立,则where没有任何功能

 <select id="getEmpByChoose" resultType="Emp">
        select * from t_emp
            <where>
                <choose>
                    <when test="empName!=null and empName!='' ">
                        emp_name=#{empName}
                    </when>
                    <when test="age!=null and age!='' ">
                        age=#{age}
                    </when>
                    <when test="gender!=null and gender!='' ">
                        gender=#{gender}
                    </when>
                </choose>
            </where>
    </select>


3.trim
prefix,suffix:在标签中内容前面或后面去添加指定内容
prefixOverrides,suffixOverrides:
在标签中内容前面或后面去掉指定内容

 

<select id="getEmpByCondition" resultType="Emp">
        select * from t_emp
        <trim prefix="where" suffixOverrides="and">
            <if test="empName!=null and empName!='' ">
                emp_name=#{empName} and
            </if>
            <if test="age!=null and age!=''">
                age=#{age} and
            </if>
            <if test="gender!=null and gender!=''">
                gender=#{gender}
            </if>
        </trim>
    </select>

4.choose(父标签),when(至少有一个)otherwise(最多只有一个)

***choose中只要有一个条件成立,就不再进行判断***

相当于Java中的if...else if ... else when至少设置员工,otherwise最多设置一个

<select id="getEmpByChoose" resultType="Emp">
        select * from t_emp
            <where>
                <choose>
                    <when test="empName!=null and empName!='' ">
                        emp_name=#{empName}
                    </when>
                    <when test="age!=null and age!='' ">
                        age=#{age}
                    </when>
                    <when test="gender!=null and gender!='' ">
                        gender=#{gender}
                    </when>
                </choose>
            </where>
    </select>
posted @ 2022-09-15 16:37  别亦难  阅读(687)  评论(0)    收藏  举报