mybatis 动态sql 的笔记 以及标签

MyBatis常用OGNL表达式

  1. e1 or e2
  2. e1 and e2
  3. e1 == e2,e1 eq e2
  4. e1 != e2,e1 neq e2
  5. e1 lt e2:小于
  6. e1 lte e2:小于等于,其他gt(大于),gte(大于等于)
  7. e1 in e2
  8. e1 not in e2
  9. e1 + e2,e1 * e2,e1/e2,e1 - e2,e1%e2
  10. !e,not e:非,求反
  11. e.method(args)调用对象方法
  12. e.property对象属性值
  13. e1[ e2 ]按索引取值,List,数组和Map
  14. @class@method(args)调用类的静态方法
  15. @class@field调用类的静态字段值

==============================

注意:不能使用   <   ,因为该符号在xml中表示一个标签的开始符号,因此会报错,需要进行转义。

1.1.if

n  if标签:判断语句,用于进行逻辑判断的。

test属性:用来编写表达式,支持ognl.

案例:查询男性用户,如果输入了用户名,按用户名模糊查询,如果没有输入用户名,就查询所有男性用户。

正常的sql语句:查询男性并且用户名中包含zhang

mybatis  动态sql 的笔记 以及标签

但是要求时还要判断用户是否输入用户名来做不同的查询要求,而这里似乎没有办法判断是否输入了用户名,因此可以考虑使用动态sql来完成这个功能。

1.1.1.         定义接口

在UserMapper接口中定义方法:

/**

* 查询男性用户,如果输入了用户名,按用户名模糊查询

* @param userName

* @return

*/

public List<User> queryUsersLikeUserName(@Param("userName")String userName);

1.1.2.         编写mapper.xml

在UserMapper映射文件中,定义接口方法对应的Statement

<select id="queryUsersLikeUserName" resultType="User">

select * from tb_user where sex = 1

<!--

if标签:用来进行判断

test属性:编写ognl表达式

-->

<if test="userName!=null and userName.trim()!=''">

and user_name like '%' #{userName} '%'

</if>

</select>

1.1.3.         测试

在UserMapperTest测试类中,添加测试用例

1.1.3.1.      测试1

当用户名为" "或者null或者""时

@Test

public void testQueryUsersLikeUserName(){

List<User> list = userMapper.queryUsersLikeUserName(" ");

for (User user : list) {

System.out.println(user);

}

}

查询结果:查询出了所有男性

上一篇:字符数组什么时候要加‘\0’


下一篇:阿里云CENTOS服务器挂载数据盘