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'}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值