动态SQL一些总结

点击上方 Java老铁,并选择 设为星标

优质文章和资料会及时送达

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

(1)接口中的方法

    public List<Emp> getEmps(Emp emp);
    
    public void updateEmp(Emp emp);
    
    public List<Emp> getEmpsByIds(@Param("ids") List<Integer> ids);
    
    public void addEmps(@Param("emp") List<Emp> emp);

(2)Mapper文件

if标签 + where标签

<resultMap type="com.eu.bean.Emp" id="emp">
          <id column="id" property="id"/>
          <result column="last_name" property="lastName"/>
          <result column="gender" property="geder"/>
          <result column="email" property="email"/>
      </resultMap>
  
    <select id="getEmps" resultMap="emp">
        SELECT *FROM emp
        <where>
            <if test="id != null">
                id = #{id}
            </if>
            <if test="lastName != null">
                and last_name = #{lastName}
            </if>
            <if test="geder != null">
                 and gender = #{geder}
            </if>
        </where>
    </select>

choose,when 有一个when标签成立 ,其余的when标签中的内容不再执行。

<select id="getEmps" resultMap="emp">
        SELECT *FROM emp
        <where>
            <choose>
                <when test="id != null">
                    id = #{id}
                </when>
                <when test="lastName != null">
                    and last_name = #{lastName}
                </when>
                <when test="geder != null">
                    and gender = #{geder}
                </when>
                <otherwise>
                    id=1
                </otherwise>
            </choose>
        </where>
    </select>

set标签

<update id="updateEmp">
        UPDATE emp
        <set>
            <if test="lastName != null">
                last_name=#{lastName},
            </if>
            <if test="geder != null">
                gender = #{geder}
            </if>
        </set> 
        WHERE id=#{id}
    </update>

foreach标签

<!-- SELECT *FROM emp
         WHERE id IN (1,5,6) -->
      <select id="getEmpsByIds" resultMap="emp">
              SELECT *FROM emp
              WHERE id IN 
              <foreach collection="ids" item="item_id" separator="," 
                  open="(" close=")">
                   #{item_id}
              </foreach>
      </select>

foreach标签 批量插入

<insert id="addEmps">
              INSERT INTO emp(last_name,gender,email)
            VALUES
            <foreach collection="emp" item="emps" separator=",">
                (#{emps.lastName},#{emps.geder},#{emps.email})
            </foreach>
      </insert>

关注我

获取更多
Java干货

原创文章

视频资料

技术交流群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值