【MyBatisⅡ】动态 SQL

目录

1 if 标签

2 trim 标签

3 where 标签

4 set 标签

5 foreach 标签


动态 sql 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。

在 xml 里面写判断条件。

动态SQL 在数据库里的体现就是,phtot 这个字段在数据输入的时候,在没有默认值情况下,可以为空。

【MyBatisⅡ】动态 SQL_第1张图片

 【MyBatisⅡ】动态 SQL_第2张图片

 在 SQL 中,空和 NULL 是两个不同的概念。空什么也没有显示,而 NULL 显示了 NULL。

【MyBatisⅡ】动态 SQL_第3张图片

1 if 标签

    /**
     * 动态 sql
     * if 标签
     * @param userInfo
     * @return
     */
    int add2(UserInfo userInfo);
    
        insert into userinfo(username,password
        
            ,photo
        
        )values(#{username},#{password}
        
            ,#{photo}
        
        )
    
    @Test
    void add2() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("猪八戒");
        userInfo.setPassword("569875");
        userInfo.setPhoto("lion.png");
        int result = userMapper.add2(userInfo);
        System.out.println(result);
    }

 【MyBatisⅡ】动态 SQL_第4张图片

    @Test
    void add2() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("如来佛祖");
        userInfo.setPassword("99999");

        int result = userMapper.add2(userInfo);
        System.out.println(result);
    }

【MyBatisⅡ】动态 SQL_第5张图片

【MyBatisⅡ】动态 SQL_第6张图片

2 trim 标签

多个字段可以为空的情况下,只要有一个字段不为空,就需要用到添加操作。动态拼接。

    /**
     * trim 标签
     * @param userInfo
     * @return
     */
    int add3(UserInfo userInfo);
    
        insert into userinfo
        
            
                username,
            
            
                password,
            
            
                photo
            
        
        values
        
            
                #{username},
            
            
                #{password},
            
            
                #{photo}
            
        
    

 

    @Test
    void add3() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("观音菩萨");
        userInfo.setPassword("3785");

        int result = userMapper.add3(userInfo);
        System.out.println(result);
    }

 

    @Test
    void add3() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("卓耿");
        userInfo.setPassword("sfgoz");
        userInfo.setPhoto("dragon.jpn");

        int result = userMapper.add3(userInfo);
        System.out.println(result);
    }

 

 

3 where 标签

根据传入参数,来决定 SQL 语句是否有 where 关键字。动态生成 where 语句。

对于 int 类型,不传的话,默认为 0 ,而不是 null。

where 标签除了动态生成 where 语句外,还可以自动的去掉语句前面的 and。所以 and 只能放在语句的前面,放在最后面会报错!

    /**
     * where 标签
     * @param userInfo
     * @return
     */
    List getListByWhere(UserInfo userInfo);
    
    @Test
    void getListByWhere() {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        List list = userMapper.getListByWhere(userInfo);
        System.out.println(list);
    }

【MyBatisⅡ】动态 SQL_第7张图片

    @Test
    void getListByWhere() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("白骨精");
        List list = userMapper.getListByWhere(userInfo);
        System.out.println(list);
    }

 【MyBatisⅡ】动态 SQL_第8张图片

也可以使用 trim 标签完成上述 where 标签的功能,代码如下:

   

4 set 标签

用于修改。

    /**
     * set 标签
     * @param userInfo
     * @return
     */
    int update2(UserInfo userInfo);

 

    
        update userinfo
        
            
                username=#{username},
            
            
                password=#{password},
            
            
                photo=#{photo}
            
        
        where id=#{id}
    

 

    @Test
    void update2() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("小玫瑰");
        userInfo.setId(6);
        userInfo.setPassword("palsov");
        userInfo.setPhoto("rose.jpg");
        int result = userMapper.update2(userInfo);
        System.out.println(result);
    }

【MyBatisⅡ】动态 SQL_第9张图片

    @Test
    void update2() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("卡莉熙");
        userInfo.setId(4);
        userInfo.setPassword("msjf");

        int result = userMapper.update2(userInfo);
        System.out.println(result);
    }

 

可以看出,set 标签会自动去除末尾的逗号! 

5 foreach 标签

多条 sql 数据删除的时候。批量删除。

    /**
     * foreach 标签
     * @param ids
     * @return
     */
    int delByIds(List ids);
    
        delete from userinfo
        where id in
        
            #{id}
        
    
    @Test
    void delByIds() {
        List list = new ArrayList(){{
            add(1);
            add(2);
            add(3);
        }};

        int ret = userMapper.delByIds(list);
        System.out.println(ret);
    }


 【MyBatisⅡ】动态 SQL_第10张图片

你可能感兴趣的:(Java,java,前端,spring,boot,mybatis,sql,后端)