mybatis中的动态SQL(if,trim,where,set,foreach标签)

mybatis中的动态SQL的使用

if标签

  1. mapper层中的查询方法
 //现在不确定哪个参数是必填的,哪个参数是非必填的
    public List<ArticleInfo> getArticleInfo(@Param("title") String title, @Param("content") String content, @Param("state") int state);
  1. mapper.xml中的sql方法
   <select id="getArticleInfo" resultMap="BaseResultMap">
        select * from articleinfo where 1=1
        <if test="title!=null">
            and title=#{title}
        </if>
        <if test="content!=null">/*这个test中的content是mapper层传进来的@Param中设置的参数的值*/
            and content=#{content}
        </if>
        <if test="state!=0">
            and state=#{state}
        </if>
    </select>
  1. 测试结果
 @Test
    void getArticleInfo() {
        List<ArticleInfo> list = articleInfoMapper.getArticleInfo(null,null,0);
        list.forEach(System.out::println);
    }

在这里插入图片描述

if标签总结

  1. 这里为了避免输入的三个参数都为空,语法出错,所以使用1=1,这样没问题,但是有点不雅,下面的trim标签可以解决这个问题。
  2. 要注意/*这个test中的content是mapper层传进来的@Param中设置的参数的值

trim标签

  1. mapper层中的查询方法:
//这三个参数是非必填的
    public List<ArticleInfo> getArticleInfo2(@Param("title") String title,@Param("content") String content,@Param("state") int state);
  1. mapper.xml中的sql方法:
    <select id="getArticleInfo2" resultMap="BaseResultMap">
        select * from articleinfo
        <trim prefix="where" prefixOverrides="and">
            <if test="title!=null">
                and title=#{title}
            </if>
            <if test="content!=null">
                and content=#{content}
            </if>
            <if test="state!=0">
                and state=#{state}
            </if>
        </trim>
    </select>
  1. 测试结果:
    在这里插入图片描述在这里插入图片描述

trim标签总结

  1. 当trim标签中的所有if都为false时,那么trim标签的前缀和后缀属性值都不会生效(prefix,prefixOverrides,suffix,suffixOverrides)

where标签

  1. mapper查询方法
//这三个参数是非必填的
    public List<ArticleInfo> getArticleInfo3(@Param("title") String title,@Param("content") String content,@Param("state") int state);

  1. mapper.xml中的sql方法
 <select id="getArticleInfo3" resultMap="BaseResultMap">
        select * from articleinfo
        <where>
            <if test="title!=null">
               and title=#{title}
            </if>
            <if test="content!=null">
               and content=#{content}
            </if>
            <if test="state!=0">
               and state=#{state}
            </if>
        </where>
    </select>
  1. 测试结果:测试结果成功
    在这里插入图片描述在这里插入图片描述

where标签总结

  1. where标签很优雅,在查询语句中,只需要在if标签里全部加上and关键字即可,它会自动去掉第一个if中的and关键字,并且如果所有if都不满足的话,整个where标签都不会执行
    在这里插入图片描述

set标签

  1. mapper中的查询方法
    在这里插入图片描述
  2. mapper.xml中的sql方法
  <update id="upArticle">
        update articleinfo
        <set>
           <if test="title!=null">
               title=#{title},
           </if>
            <if test="content!=null">
                content=#{content},
            </if>
        </set>
        where id=#{id}
    </update>
  1. 测试结果
    在这里插入图片描述在这里插入图片描述

set标签总结

  1. 这个是用于修改的一个标签,和where标签类似,很优雅,只需要在里面所有if标签里都加上“,”,它会自动把最后一个逗号去掉
  2. set标签里的所有if标签不能都为false,否则sql语法错误

foreach标签

  1. mapper中的查询方法
    在这里插入图片描述
  2. mapper.xml中的sql方法
    在这里插入图片描述
  3. 测试结果:
    在这里插入图片描述
    在这里插入图片描述

总结

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值