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

 

 

但是要求时还要判断用户是否输入用户名来做不同的查询要求,而这里似乎没有办法判断是否输入了用户名,因此可以考虑使用动态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);

       }

    }

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

 

posted @ 2018-06-24 11:08  喝耶加雪啡的JAVA猴子  阅读(158)  评论(0编辑  收藏  举报