美文网首页
MyBatis5-动态 SQL

MyBatis5-动态 SQL

作者: 我相信你爱过gg | 来源:发表于2017-03-16 00:11 被阅读34次

    动态 SQL

    什么是动态 SQL

    就是动态的对 SQL 进行组装 拼接.

    <if>

        <select id="findById" resultType="String" parameterType="User">
            select userName from user
            <where>
                <if test="id != null || id != 0">
                    userId = #{id}
                </if>
            </where>
        </select>
    

    <where>: 可以自动去掉条件中的第一个 and
    注:<if>中的 test 属性是 User 对象中的属性名,而且这里写的是java代码,而不是 SQL 语句(is not null).

    <set>

    类似的用于动态更新语句的解决方案叫做 set。set 元素可以被用于动态包含需要更新的列,而舍去其他的。比如:

    <update id="updateAuthorIfNecessary">
      update Author
        <set>
          <if test="username != null">username=#{username},</if>
          <if test="password != null">password=#{password},</if>
          <if test="email != null">email=#{email},</if>
          <if test="bio != null">bio=#{bio}</if>
        </set>
      where id=#{id}
    </update>
    

    知识拓展

    综合查询

    当我们查询的时候需要用到很多的查询条件,例如用户信息综合查询,查询条件可能包括用户信息,商品 订单的.
    比如我们可以查询某用户买了哪些商品,还可以查询某些商品被哪些用户买了.

    针对这些复杂的查询我们可以定义一个包装类userQueryVoVo指的是视图对象.

    public class UserQueryVo {
        //此类可以包含User对象
        public User user;
        
        //或者商品  订单对象等
    }
    

    SQL 语句重用

        <sql id="id">
    
        </sql>
        <select id="find">
            <include refid="id"></include>
        </select>
    

    当多条查询语句的where条件相同时,我们可以使用此方法.
    <sql>: id 属性是sql重用代码 的唯一标识
    <include>: refid 属性引用SQL重用代码的标识,如果不在同一个mapper映射文件中,这需要添加namespace.
    注:
    1.基于表单定义SQL重用代码,提高代码重用性.
    2.在SQL重用代码,不要包含where,因为有可能你的这条SQL重用代码,会包含在一个where中.

    相关文章

      网友评论

          本文标题:MyBatis5-动态 SQL

          本文链接:https://www.haomeiwen.com/subject/wtwrnttx.html