mysql动态sql想必大家都了解了
举个列子:现在有如下sql语句
select id,name from animals where id = 1 and name ="老虎"
很简单的sql语句但是在我们进行传参时 加入id 赋值为null 或者 name 为 null
那么sql语句就会报错,那么这个时候就需要用到伟大的mybatis了,在日常的开发中mybatis这个半持久化框架的好处不用多说,直接上代码。
- if 是我们比较常见的写法
SELECT * FROM BLOG WHERe state = ‘ACTIVE’ AND title like #{title} 这条语句提供了可选的查找文本功能。如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 BLOG 都会返回;如果传入了 “title” 参数,那么就会对 “title” 一列进行模糊查找并返回对应的 BLOG 结果(细心的读者可能会发现,“title” 的参数值需要包含查找掩码或通配符字符)。
如果希望通过 “title” 和 “author” 两个参数进行可选搜索该怎么办呢?首先,我想先将语句名称修改成更名副其实的名称;接下来,只需要加入另一个条件即可。
- choose、when、otherwise
有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
还是上面的例子,但是策略变为:传入了 “title” 就按 “title” 查找,传入了 “author” 就按 “author” 查找的情形。若两者都没有传入,就返回标记为 featured 的 BLOG(这可能是管理员认为,与其返回大量的无意义随机 Blog,还不如返回一些由管理员精选的 Blog)。
- where 的处理
select * from table where
state = #{state} AND title like #{title} AND author_name like #{author.name} 如果语句中title或author为空那么就会变成
select * from table where
很明显 这是一条错误的语句这时候有两种处理方法
select * from table state = #{state} AND title like #{title} AND author_name like #{author.name} where 元素只会在子元素返回任何内容的情况下才插入 “WHERe” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。
如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:
... 第二种写法
表示 sql语句where 1 = 1后面会自动拼接if条件
-
isnotempty
select * from table where 1 = 1
C.USER_NAME = #userName# id = #{id}# 这里就涉及到了isnotnull 和isnotempty具体问题自己去分析啦 今天就记录这么多 ok!



