MyBatis-Plus_查询进阶04

查询专栏:MP默认查询原则
查询的是数据库列名非实体类属性。

需求思路分析

7. (年龄小于40或者邮箱不为空)并且名字为王姓
sql:(age < 40 or email id not null) and name like '王%'

8. 年龄为30、31、34、35
sql:age in (30、31、34、35 )

9. 只返回满足条件的其中一条语句即可
     * limit 1
     * <p>
     * 年龄为30、31、34、35
     * age in (30、31、34、35 )

二、需求实现

2.1 需求实战07

/**
     * 7. (年龄小于40或者邮箱不为空)并且名字为王姓
     * sql:(age < 40 or email id not null) and name like '王%'
     */
    @Test
    public void selectByWrapper7() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.nested(wq -> wq.lt("age", 40)
                    .or()
                    .isNotNull("email"))
                    .likeRight("name", "王");

        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

    /*
       sql形式: SELECT id,name,age,email,manager_id,create_time FROM user
               WHERE ( age < ? OR email IS NOT NULL ) AND name LIKE ?
     */

注:
and优先级比or高,也就是在一个sql语句中有and和or限制性and后执行or
如果前面有个括号,or在括号里面,括号右边有and,这种情况会限制性括号里面的在执行括号右边的and

// 例如:
// 先执行or后执行and

SELECT id,name,age,email,manager_id,create_time FROM user
WHERE ( age < ? OR email IS NOT NULL ) AND name LIKE ?

// 先执行and后执行or

SELECT id,name,age,email,manager_id,create_time FROM user
WHERE age < ? OR email IS NOT NULL AND name LIKE ?

2.2 需求实战08

    /**
     * 8. 年龄为30、31、34、35
     * age in (30、31、34、35 )
     */
    @Test
    public void selectByWrapper8() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("age", Arrays.asList(30, 31, 34, 35));

        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

    /*
       sql形式: SELECT id,name,age,email,manager_id,create_time FROM user
               WHERE age IN (?,?,?,?)
     */

2.3 需求实战09

    /**
     * 9. 只返回满足条件的其中一条语句即可
     * limit 1
     * <p>
     * 年龄为30、31、34、35
     * age in (30、31、34、35 )
     * <p>
     * 有sql注入危险,不建议使用,或者确认安全可以使用
     */
    @Test
    public void selectByWrapper9() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("age", Arrays.asList(30, 31, 34, 35)).last("limit 1");

        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

    /*
       sql形式: SELECT id,name,age,email,manager_id,create_time FROM user
               WHERE age IN (?,?,?,?)
     */

想学习更多微服务、分布式、中间件、数据库、项目快速构建等系列技术
请访问http://gblfy.com
让我们一起进步!!!

猜你喜欢

转载自blog.csdn.net/weixin_40816738/article/details/90279682