### SQL片段

有的时候,我们可能会将一些功能的部分抽取出来,方便复用!

1. 使用SQL标签抽取公共的部分

   <sql id="if-title-author">

       <if test="title != null">

           title = #{title}

       </if>

       <if test="author != null">

           and author = #{author}

       </if>

   </sql>

 

2. 在需要使用的地方使用Include标签引用即可

   <select id="queryBlogIF" parameterType="map" resultType="blog">

       select * from mybatis.blog

       <where>

           <include refid="if-title-author"></include>

       </where>

   </select>

 

注意事项:

- 最好基于单表来定义SQL片段!

- 不要存在where标签

 

25、动态SQL之Foreach

 

测试

25、动态SQL之Foreach

结果

25、动态SQL之Foreach

 

 

 

### Foreach

25、动态SQL之Foreach

 

 

先改一下

25、动态SQL之Foreach

 

25、动态SQL之Foreach

 

注:

目标

25、动态SQL之Foreach

25、动态SQL之Foreach

注end

 

select * from user where 1=1 and 

 

  <foreach item="id" collection="ids"

      open="(" separator="or" close=")">

        #{id}

  </foreach>

 

(id=1 or id=2 or id=3)

 

 

<!--

        select * from mybatis.blog where 1=1 and (id=1 or id = 2 or id=3)

 

        我们现在传递一个万能的map , 这map中可以存在一个集合!

-->

<select id="queryBlogForeach" parameterType="map" resultType="blog">

    select * from mybatis.blog

 

    <where>

        <foreach collection="ids" item="id" open="and (" close=")" separator="or">

            id = #{id}

        </foreach>

    </where>

</select>

 

25、动态SQL之Foreach

 

测试

25、动态SQL之Foreach

结果

25、动态SQL之Foreach

 

测试

这就查出来1号

25、动态SQL之Foreach

 

测试

25、动态SQL之Foreach

 

 

==动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了==

建议:

- 先在Mysql中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可!

 

 

相关文章: