mybatis常用标签简单介绍(trim,foreach,include,set)

在使用Mybatis时写sql语句是必须的,在写sql语句时如果涉及到根据条件拼接的sql语句的话就要处理wher、and、 in 这样的字符串,而Mybatis中有满足这样的标签可以让我们不用为处理这样的字符串而苦恼。下面收集和总结了一下比较常用的标签:

trim标签

               prefix:前缀覆盖并增加其内容 不写的话默认替换为空

               suffix:后缀覆盖并增加其内容 不写的话默认替换为空

                prefixOverrides:前缀判断的条件

               suffixOverrides:后缀判断的条件

一个trim只能去掉一个需要去掉的sql的前缀或者后缀。


打印出的sql:

SQL: select* from books where 1=1 and          book_name like "%" ? "%" and    and  book_type like "%"? "%"   and limit ?,?


可见我们的第一个and和最后一个and被去除了,但是中间的没有被去掉。所以说trim是针对trim标签中的整个sql而言。

我们在看另一个sql语句:

这样得到的结果是:

select *from books where 1=1 and book_name like "%" ? "%" and book_type like "%" ? "%" limit ?,?

可见,一个trim只能去掉trim标签内的一个前缀或者后缀。

 

Include标签

<include refid="" >include>是包含一个 的语句片段。

 

Foreach标签:

用来遍历我们的list或者数组;如:


    delete from books
    
        book_id in
 
            #{bookid}
        
    

对于要指定范围的bookid我们就可以这样达到效果,这里值得注意的是如果没有设置@param那个list或者数组的参数名的话,MyBatis会自动将它包装在一个 Map ,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值

 

Where标签:

Where标签中如果都是if标签那至少需要一个if标签满足才插入where。如果里面有没有被标签包裹的字符串,那这个where就会被拼接到最后的sql语句中;有同学说 如果若最后的内容是“AND”或“OR”开头的,where 标签可以自己将他们去除。我做了一下验证:

    
        delete from books
        
            and
            book_id in
            
                #{bookid}
            
            and
        
    
打印的sql语句是:

Preparing: delete from books WHERE book_id in ( ? , ? ) and 

    
        delete from books
        
            and book_id=70 and
        
    
打印的sql语句是:
delete from books          WHERE  book_id=70 and

where 能去掉开头的 and 但是不能去除结尾的and (也可能我书写的方式不对)。

标签:


    
        update books
        
            
               book_name=#{books.book_name},
            
            
                book_price=#{books.book_price},
            
            
               book_content=#{books.book_content},
            
            
               book_type=#{books.book_type},
            
            
                book_cover=#{books.cover}
            
        
    
    where book_id = #{books.book_id}

用于update中,满足条件的才更新值。


你可能感兴趣的:(笔记)