在使用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。如果里面有没有被
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语句是:
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中,满足条件的才更新值。