MyBatis动态SQL常用标签——if标签

if标签

  在用Mybatis之前,我们如果进行条件查询的话(条件查询需要判断从前端获取的值是否存在来进行操作),是利用代码拼接来进行实现的。

  可Mybatis是把代码和sql进行分离,在mapper.xml中操作sql语句,然后通过解析mapper.xml来实现sql语句操作的,可我们在mapper.xml中无法进行代码拼接来进行条件查询。这个时候我们就需要Mybatis提供的动态SQL常用标签里的if标签来进行操作

第一步:在接口中写出条件查询的方法

/* 
根据姓名和密码进行查询
@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),
作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应
*/
User getUserByNamePwd(@Param("name") String name, @Param("pwd") String pwd);

第二步:在mapper中进行sql语句操作

<select id="getUserByNamePwd" resultMap="userMap">
        select * from user
        <where>
            <if test="name != null and name != ">
                name = #{name}
            </if>
            <if test="pwd != null and pwd != ">
               and`在这里插入代码片` pwd = #{pwd}
            </if>
        </where>
    </select>

在这里我们就可以看出if标签的作用就是判断,他会判断test里的为true或者为false,如果为true则进行,如果为false则不进行操作

@Test
    public void test01(){
          
   
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userByNamePwd = mapper.getUserByNamePwd(null, null);
        for (User user : userByNamePwd) {
          
   
            System.out.println(user);
        }
        sqlSession.close();
    }

结果为:

Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@530612ba]
==>  Preparing: select * from user 
==> Parameters: 
<==    Columns: id, name, pwd
<==        Row: 1, 狂神, 123456
<==        Row: 2, 张三, 123456
<==        Row: 3, 李四, 123890
<==        Row: 4, 嘿嘿, 123123
<==        Row: 5, 德玛西亚, 666666
<==        Row: 6, 李莫寒, 121212
<==      Total: 6
User{id=1, name=狂神, password=123456}
User{id=2, name=张三, password=123456}
User{id=3, name=李四, password=123890}
User{id=4, name=嘿嘿, password=123123}
User{id=5, name=德玛西亚, password=666666}
User{id=6, name=李莫寒, password=121212}

传一个值:

@Test
    public void test01(){
          
   
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userByNamePwd = mapper.getUserByNamePwd("狂神", null);
        for (User user : userByNamePwd) {
          
   
            System.out.println(user);
        }
        sqlSession.close();
    }

结果为:

Preparing: select * from user WHERE name = ? 
==> Parameters: 狂神(String)
<==    Columns: id, name, pwd
<==        Row: 1, 狂神, 123456
<==      Total: 1
User{id=1, name=狂神, password=123456}

传两个值的话:

@Test
    public void test01(){
          
   
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userByNamePwd = mapper.getUserByNamePwd("狂神", "123456");
        for (User user : userByNamePwd) {
          
   
            System.out.println(user);
        }
        sqlSession.close();
    }

结果为:

==>  Preparing: select * from user WHERE name = ? and pwd = ? 
==> Parameters: 狂神(String), 123456(String)
<==    Columns: id, name, pwd
<==        Row: 1, 狂神, 123456
<==      Total: 1
User{id=1, name=狂神, password=123456}
经验分享 程序员 微信小程序 职场和发展