day03-MyBatis的动态SQL语句查询

场景一:

例如当我们想实现这样的查询的时候之前的操作貌似满足不了我们。

day03-MyBatis的动态SQL语句查询

 场景二:

还有些时候我们如果输入的信息越多满足要求的就越多,所查找出来的用户就越少

当我们之输入姓名的时候可能查找出10个人,当再输入性别的时候可能人数就会减少一半

mybatis为了解决例如上面的问题引入了一些标签例如:

<if></if>
<where></where>
<foreach></foreach>
<when></when>
<set></set>

场景一的解决:

UserDao中的方法:

day03-MyBatis的动态SQL语句查询

 day03-MyBatis的动态SQL语句查询

 QueryVo实体类:

package com.zyb.pojo;

import java.util.List;

public class QueryVo {

    private User user;
    private List<Integer> ids;

    public QueryVo() {
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
}

对应mapper.xml的SQL语句:

<select id="selByids" resultType="user" resultMap="userMap" parameterType="com.zyb.pojo.QueryVo">
        <include refid="defaultSql"></include>
        <where>
            <if test="ids!=null and ids.size()>0">
                <foreach collection="ids" open="and id in (" close=")" item="uid" separator=",">
                    #{uid}
                </foreach>
            </if>
        </where>

    </select>

 上面的<include ref></include>是因为抽取了常用的代码段

day03-MyBatis的动态SQL语句查询

场景二的解决:

UserDao的方法:

day03-MyBatis的动态SQL语句查询

对应的mapper.xml的SQL语句:

    <select id="selByCondition" resultType="user" resultMap="userMap" parameterType="user">
        select * from my_user
        <where>
        <if test="uname!=null">
            and username=#{uname}
        </if>
        <if test="userSex!=null">
            and sex=#{userSex}
        </if>
        </where>
    </select>

set标签和if搭配使用:

day03-MyBatis的动态SQL语句查询

参考:https://www.cnblogs.com/ysocean/p/7289529.html#_label3