• MyBatis 学习


     -

    IF 元素

      这条查询语句中,如果没有传入 userName 参数,那么查询出所有 valid 等于 1 的记录。反之,如果传入了 userName 参数,则查询出 valid = 1 和 userName 符合查询条件的记录。另外需要确保生成 SQL 后 where 关键字后必须有查询条件存在。

    <select id="selectProjectList" parameterType="ProjectInfo" resultType="ProjectInfo">  
        SELECT 
            <include refid="columns"></include>  
        FROM 
            t_project_001_project_info
        WHERE 
            valid = 1  
        <if test="userName != null">
        AND 
            user_name LIKE '%' #{userName} '%'
        </if>  
    </select>  

    CHOOSE 元素

      有些时候,我们并不是想用到所有条件语句,而是只从其中选择一个。针对这种情况 Mybatis 提供了类似 Java 中的 switch 语句的 choose 元素。

    还是用查询 SQL 为例,如果查询条件提供了 userName 就按 userName 查询,如果提供了nickName 就按 nickName 查询,如果两者都没有提供就返回所有有效的记录(或是符合其他条件的记录,为简单起见,这里就返回所有有效记录)。

    <select id="queryByName" parameterType="ProjectInfo" resultType="ProjectInfo">  
        SELECT 
            <include refid="columns"></include>  
        FROM 
            t_project_001_project_info
        WHERE 
            user_type_id = 1  
        <choose>  
            <when test="userName != null">user_name like '%' #{userName} '%'</when>  
            <when test="nickName != null">nick_name like '%' #{nickName} '%'</when>  
            <otherwise>is_valid = 1</otherwise>  
        </choose>  
    </select> 

     

    FOREACH 元素

      这个元素的使用场景是在需要对一个集合进行遍历的时候使用,如批量删除、批量插入等语句。

    <!-- 根据传入的Id值列表,删除多条记录 -->  
    <delete id="deleteBatch" parameterType="java.util.List">  
        DELETE FROM 
            t_project_001_project_info
        WHERE 
            user_id 
        IN
        <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">  
            #{item}
        </foreach>
    </delete>

      我们知道 Mybatis 进行 SQL 映射时,传入参数只能有一个,如果想传入多个参数,只能使用 Java 的 List 或是 Array 进行封装后再传入。上面的语句就是将要删除的多条记录的 Id 值放在了 List 对象中传入。

      foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串(上例中的 open 和 close 属性)以及在迭代中间放置分隔符(separator 属性)。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。

      我们可以将一个 List 实例或者数组作为参数对象传给 MyBatis,当我们这么做的时候,MyBatis 会自动将它包装在一个 Map 中并以名称为键。List 实例将会以“list”作为键,而数组实例的键将是“array”。

     

    WHERE 元素

      WHERE 这个元素可以避免在查询语句中出现只有 WHERE 关键字而没有作何查询条件的情况出现

    <select id="queryByName" parameterType="User" resultType="User">  
        SELECT  
            <include refid="columns"></include>  
        FROM 
              t_project_001_project_info
        <where>  
            <if test="userName != null">user_name LIKE '%' #{userName} '%'</if>  
            <if test="nickName != null"> OR nick_name LIKE '%' #{userName} '%'</if>  
        </where>  
    </select>  

      Mybatis 会判断只有在 WHERE 元素中至少有一个条件成立时,才会在查询语句中添加 WHERE 关键字。

      在上述 SQL 语句中,如果第一个条件不成立,而第二个条件成立时,是不是会在 WHERE 语句中多个 OR 关键字呢?完全不心担心这个问题,Mybatis 早已考虑到了,她会将多余的 AND 或是 OR 关键字自动剔除掉(所谓多余,紧跟在 WHERE 关键字后的第一个 AND 或是 OR )。

    SET 元素

      SET 元素和 WHERE 元素类似,只是她是使用在数据更新语句中而已。

    <!-- 更新用户信息,并写回到数据表中 -->  
    <update id="udpateProject" parameterType="User">  
        UPDATE 
            t_project_001_project_info 
        <set>  
            <if test="userName != null">user_name = #{userName},</if>  
            <if test="englishName != null">english_name = #{englishName},</if>  
            <if test="nickName != null">nick_name = #{nickName},</if>  
            <if test="userTypeId != null">user_type_id = #{userTypeId},</if>  
            <if test="isValid != null">is_valid = #{isValid}</if>  
        </set>  
        WHERE user_id = #{userId}  
    </update> 

     

    -

  • 相关阅读:
    tp5.1 多级控制器
    JS中三个点(...)是什么鬼?
    vue reqwest与fetch的使用
    new Vue({ render: h => h(App), }).$mount('#app')到底什么意思
    ant design vue 表格和国际化的使用
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
  • 原文地址:https://www.cnblogs.com/libra0920/p/6210283.html
Copyright © 2020-2023  润新知