Mybatis-动态SQL(下)

简介: Mybatis-动态SQL(下)

4.where标签

修改上一条的SQL语句即可:

 <select id="queryBolgIf" parameterType="map" resultType="cn.bobo.BolgDao.Bolg">
        select * from blog
        <where>
            <if test="title != null">
                title = #{title}
            </if>
            <if test="author != null">
                and author = #{author}
            </if>
        </where>
    </select>


5.Set标签

在至少有一个子元素返回了SQL语句时,才会向SQL语句中添加SET,并且如果SET之后是以,开头的话,会自动将其删掉

常用在修改的标签中

SQL语句:

<update id="updateBolg" parameterType="map">
        update blog
        <set>
            <if test="title != null">
                title = #{title},
            </if>
            <if test="author != null">
                author = #{author}
            </if>
        </set>
        where id = #{id};
    </update>


测试类:

  @Test
    public void testUpdateBlog(){
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("title","在山里");
        map.put("author","雪豹");
        map.put("id","3b972c22cbd74c8dbfaaf35b4fa732fb");
        blogMapper.updateBolg(map);
    }


6.Choose标签

有时候用不到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用choose标签可以满足

接口:

List<Blog> queryBlogChoose(Map map);

SQL语句:

<select id="queryBlogChoose" parameterType="map" resultType="cn.bobo.BolgDao.Bolg">
  select * from blog
   <where>
       <choose>
           <when test="title != null">
                title = #{title}
           </when>
           <when test="author != null">
              and author = #{author}
           </when>
           <otherwise>
              and views = #{views}
           </otherwise>
       </choose>
   </where>
</select>

测试类:

@Test
public void testQueryBlogChoose(){
   HashMap<String, Object> map = new HashMap<String, Object>();
   map.put("title","Java如此简单");
   map.put("author","狂神说");
   map.put("views",9999);
   List<Bolg> bolgs = mapper.queryBolgChoose(map);
   System.out.println(blogs);
}


7.SQL片段

有时候可以通过将部分代码抽出来作为公用,使用时候可以直接调用

SQL片段;

<sql id="if-title-author">
   <if test="title != null">
      title = #{title}
   </if>
   <if test="author != null">
      and author = #{author}
   </if>
</sql>


引用SQL片段

<select id="queryBolgIf" parameterType="map" resultType="cn.bobo.BolgDao.Bolg">
  select * from blog
   <where>
       <!-- 引用 sql 片段,如果refid 指定的不在本文件中,那么需要在前面加上 namespace -->
       <include refid="if-title-author"></include>
       <!-- 在这里还可以引用其他的 sql 片段 -->
   </where>
</select>

注意:在sql片段中不要包括where


8.Foreach

接口:

List<Blog> queryBlogForeach(Map map);


编写SQL语句:

<select id="queryBlogForeach" parameterType="map" resultType="cn.bobo.BolgDao.Bolg">
  select * from blog
   <where>
       <!--
       collection:指定输入对象中的集合属性
       item:每次遍历生成的对象
       open:开始遍历时的拼接字符串
       close:结束时拼接的字符串
       separator:遍历对象之间需要拼接的字符串
       select * from blog where 1=1 and (id=1 or id=2 or id=3)
     -->
       <foreach collection="ids"  item="id" open="and (" close=")" separator="or">
          id=#{id}
       </foreach>
   </where>
</select>


测试类:

@Test
public void testQueryBlogForeach(){
   SqlSession session = MybatisUtils.getSession();
   BlogMapper mapper = session.getMapper(BlogMapper.class);
   HashMap map = new HashMap();
   List<Integer> ids = new ArrayList<Integer>();
   ids.add(1);
   ids.add(2);
   ids.add(3);
   map.put("ids",ids);
   List<Blog> blogs = mapper.queryBlogForeach(map);
   System.out.println(blogs)
}


相关文章
|
12天前
|
SQL Java 编译器
SQL 语言:嵌入式 SQL 和动态 SQL
SQL 语言:嵌入式 SQL 和动态 SQL
20 4
|
1天前
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
29 5
mybatis-plus配置sql拦截器实现完整sql打印
|
3天前
|
SQL Java 数据库连接
MyBatis SQL 批量更新(代码➕案例)
MyBatis SQL 批量更新(代码➕案例)
8 0
|
4天前
|
SQL XML Java
MyBatis动态SQL------------------choose用法
MyBatis动态SQL------------------choose用法
14 1
|
11天前
|
SQL XML Java
MyBatis第四课动态SQL
MyBatis第四课动态SQL
|
12天前
|
SQL 存储 关系型数据库
17. Mysql 动态SQL
17. Mysql 动态SQL
|
13天前
|
SQL XML Java
Mybatis进阶——动态SQL(1)
Mybatis进阶——动态SQL(1)
18 3
|
19天前
|
SQL XML Java
|
7月前
|
SQL 安全 Java
MyBatis映射文件深入--动态sql
MyBatis映射文件深入--动态sql
57 0
|
7月前
|
SQL XML Java
mybatis的注解开发之三种动态sql
mybatis的注解开发之三种动态sql