前言:MyBatis的动态SQL是基于OGNL表达式的,通过对sql语句的拼接和组装可以实现一些逻辑。
MyBatis中用于实现动态SQL的元素主要有:i,choose(when,otherwise),where,trim,set,foreach。
- <select id="findActiveBlogIf" parameterType="Blog" resultType="Blog">
- select * from t_blog where state="ACTIVE"
- <if test='title != null AND title!=""'>
- and title = #{title}
- if>
- <if test='author != null AND author!=""'>
- and author = #{author}
- if>
-
这条语句的意思非常简单,如果你提供了title参数,那么就要满足title=#{title},同样如果你提供了author的时候,它们也需要满足相应的条件,之后就是返回满足这些条件的所有Blog,这是非常有用的一个功能,以往我们使用其他类型框架或者直接使用JDBC的时候, 如果我们要达到同样的选择效果的时候,我们就需要拼SQL语句,这是极其麻烦的,比起来,上述的动态SQL就要简单多了。
(2)choose(when,otherwise)开关语句
- <select id="findActiveBlogChoose" parameterType="Blog" resultType="Blog">
- select * from t_blog where state="ACTIVE"
- <choose>
- <when test='title != null AND title!=""'>
- and title = #{title}
- when>
- <when test='author != null AND author!=""'>
- and author= #{author}
- when>
- <otherwise>
- and featured=1
- otherwise>
- choose>
- select>
- <select id="findActiveBlogWhere" parameterType="Blog" resultType="Blog">
- select * from t_blog
- <where>
- <if test='title != null and title!=""'>
- title = #{title}
- if>
- <if test='author!= null and author!=""'>
- and author= #{author}
- if>
-
1.
1.dActiveBlogSet " parameterType="Blog">
2. update t_blog
3.
4.
5. title = #{title},
6.
7.
8. author= #{author},
9.
10.
11. where id = #{id}
12.
上述示例代码中,如果set中一个条件都不满足,即set中包含的内容为空的时候就会报错。
1.单参数List的类型:
xml配置:
1.
mapper接口:
public List findActiveBlogForeach1(List ids);
2.单参数array数组的类型
xml配置:
1.
mapper接口:
public List findActiveBlogForeach2(int[] ids);
3.自己把参数封装成Map的类型
xml配置:
1.
public List findActiveBlogForeach3(Map params);