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 @   别亦难  阅读(636)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示