mybaits之动态SQL

动态sql就是根据不同的条件生成不同的sql

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

1.环境搭建

2.测试

  1.动态sql之if。if里面的关键字是test。test里面去写if的条件即可

  

   2.动态sql之where set:可以实现and or 或者【,】的自动优化

   choose  when otherwise

  

    <select id="BlogListChoose" parameterType="map" resultType="blog">
        select * from  blog
        <where>
            <choose>
                <when test="title !=null">
                    and title =#{title}
                </when>
                <when test="author !=null">
                    and author=#{author}
                </when>
                <otherwise >
                    and views=#{views}
                </otherwise>
            </choose>
        </where>
    </select>
  <update id="BlogsSet" parameterType="map">
   update blog
   <set>
   <if test="title !=null">
title=#{title},
   </if>
   <if test="author !=null">
   author=#{author},
  </if>
   </set>
   <where>
   id=#{id}
   </where>
  </update>
    @Test
    public void selectChoose(){
        SqlSession sqlSession = MybaitsUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap Map = new HashMap();
       // Map.put("title","Mybatis");
        Map.put("author","xiaochen");
        Map.put("views",1000);
        List<Blog> blogs = mapper.BlogListChoose(Map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }
        sqlSession.close();
    }

  3.动态sql之foreach

    动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)

    foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符

    例如一个sql,分析他 (开头,)结束,or可以看做分隔符,分隔的内容是 id=#{参数}  将多个id={参数} 放在一个list中,把这个list传给Mapper.xml

    

  

 

 

 

 

 

  

  

posted @ 2021-11-11 22:57  qwedfrgh  阅读(66)  评论(0)    收藏  举报