zoukankan      html  css  js  c++  java
  • day01MyBatisPlus条件构造器(04)

    一、wapper介绍 

     

    1Wrapper : 条件构造抽象类,最顶端父类

    2 AbstractWrapper: 用于查询条件封装,生成 sql where 条件

    3QueryWrapper: Entity 对象封装操作类,不是用lambda语法

    4UpdateWrapper: Update 条件封装,用于Entity对象更新操作

    5AbstractLambdaWrapper: Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column

    6 LambdaQueryWrapper:用于Lambda语法使用的查询Wrapper

    7  LambdaUpdateWrapper: Lambda 更新封装Wrapper

     

     @RunWith(SpringRunner.class)
    
    @SpringBootTest
    
    public class QueryWrapperTests {
    
            @Autowired
    
        private UserMapper userMapper;
    
    }

    二、AbstractWrapper

    注意:以下条件构造器的方法入参中的 column 均表示数据库字段

    1gegtleltisNullisNotNull

     

    @Test
    
    public void testDelete() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper
    
            .isNull("name")
    
            .ge("age", 12)
    
            .isNotNull("email");
    
        int result = userMapper.delete(queryWrapper);
    
        System.out.println("delete return count = " + result);
    
    }

    SQLUPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL

     

    2eqne

    注意:seletOne返回的是一条实体记录,当出现多条时会报错 

    @Test
    
    public void testSelectOne() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper.eq("name", "Tom");
    
    ​    User user = userMapper.selectOne(queryWrapper);
    
        System.out.println(user);
    
    }
    SELECT id,name,age,email,create_time,update_time,deleted,version FROM user WHERE deleted=0 AND name = ? 

    3betweennotBetween

    包含大小边界

    @Test
    
    public void testSelectCount() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper.between("age", 20, 30);
    
    ​    Integer count = userMapper.selectCount(queryWrapper);
    
        System.out.println(count);
    
    }
    SELECT COUNT(1) FROM user WHERE deleted=0 AND age BETWEEN ? AND ? 

    4allEq

     

    @Test
    
    public void testSelectList() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        Map<String, Object> map = new HashMap<>();
    
        map.put("id", 2);
    
        map.put("name", "Jack");
    
        map.put("age", 20);
    
    ​    queryWrapper.allEq(map);
    
        List<User> users = userMapper.selectList(queryWrapper);
    
    ​    users.forEach(System.out::println);
    
    }
    SELECT id,name,age,email,create_time,update_time,deleted,version 
    
    FROM user WHERE deleted=0 AND name = ? AND id = ? AND age = ? 

    5likenotLikelikeLeftlikeRight

    selectMaps返回Map集合列表

     @Test
    
    public void testSelectMaps() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper
    
            .notLike("name", "e")
    
            .likeRight("email", "t");
    
    ​    List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
    
        maps.forEach(System.out::println);
    
    }
    SELECT id,name,age,email,create_time,update_time,deleted,version 
    
    FROM user WHERE deleted=0 AND name NOT LIKE ? AND email LIKE ? 

     

    6innotIninSqlnotinSqlexistsnotExists

    (1)innotIn

    notIn("age",{1,2,3})--->age not in (1,2,3)
    
    notIn("age", 1, 2, 3)--->age not in (1,2,3)

    (2)inSqlnotinSql可以实现子查询

    例: inSql("age", "1,2,3,4,5,6")--->age in (1,2,3,4,5,6)
    
    例: inSql("id", "select id from table where id < 3")--->id in (select id from table where id < 3)

     

    @Test
    
    public void testSelectObjs() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        //queryWrapper.in("id", 1, 2, 3);
    
        queryWrapper.inSql("id", "select id from user where id < 3");
    
    ​    List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表
    
        objects.forEach(System.out::println);
    
    }
    SELECT id,name,age,email,create_time,update_time,deleted,version 
    
    FROM user WHERE deleted=0 AND id IN (select id from user where id < 3) 

    7orand

    注意:这里使用的是 UpdateWrapper 

    不调用or则默认为使用 and 

    @Test
    
    public void testUpdate1() {
    
    ​    //修改值
    
        User user = new User();
    
        user.setAge(99);
    
        user.setName("Andy");
    
    ​    //修改条件
    
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    
        userUpdateWrapper
    
            .like("name", "h")
    
            .or()
    
            .between("age", 20, 30);
    
    ​    int result = userMapper.update(user, userUpdateWrapper);
    
    ​    System.out.println(result);
    
    }
    UPDATE user SET name=?, age=?, update_time=? WHERE deleted=0 AND name LIKE ? OR age BETWEEN ? AND ?

    8、嵌套or、嵌套and

    这里使用了lambda表达式or中的表达式最后翻译成sql时会被加上圆括号

     

    @Test
    
    public void testUpdate2() {
    
    ​    //修改值
    
        User user = new User();
    
        user.setAge(99);
    
        user.setName("Andy");
    
    ​    //修改条件
    
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    
        userUpdateWrapper
    
            .like("name", "h")
    
            .or(i -> i.eq("name", "李白").ne("age", 20));
    
    ​    int result = userMapper.update(user, userUpdateWrapper);
    
    ​    System.out.println(result);
    
    }
    UPDATE user SET name=?, age=?, update_time=? 
    
    WHERE deleted=0 AND name LIKE ? 
    
    OR ( name = ? AND age <> ? ) 

    9orderByorderByDescorderByAsc

    @Test
    
    public void testSelectListOrderBy() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper.orderByDesc("id");
    
    ​    List<User> users = userMapper.selectList(queryWrapper);
    
        users.forEach(System.out::println);
    
    }
    SELECT id,name,age,email,create_time,update_time,deleted,version 
    
    FROM user WHERE deleted=0 ORDER BY id DESC 

    10last

    直接拼接到 sql 的最后

    注意:只能调用一次,多次调用以最后一次为准 sql注入的风险,请谨慎使用

    @Test
    
    public void testSelectListLast() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper.last("limit 1");
    
    ​    List<User> users = userMapper.selectList(queryWrapper);
    
        users.forEach(System.out::println);
    
    }
    SELECT id,name,age,email,create_time,update_time,deleted,version 
    
    FROM user WHERE deleted=0 limit 1 

    11、指定要查询的列 

    @Test
    
    public void testSelectListColumn() {
    
    ​    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    
        queryWrapper.select("id", "name", "age");
    
    ​    List<User> users = userMapper.selectList(queryWrapper);
    
        users.forEach(System.out::println);
    
    }
    SELECT id,name,age FROM user WHERE deleted=0  

    12setsetSql

    最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set()   setSql() 的字段 

    @Test
    
    public void testUpdateSet() {
    
    ​
    
        //修改值
    
        User user = new User();
    
        user.setAge(99);
    
    ​    //修改条件
    
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    
        userUpdateWrapper
    
            .like("name", "h")
    
            .set("name", "老李头")//除了可以查询还可以使用set设置修改的字段
    
            .setSql(" email = '123@qq.com'");//可以有子查询
    int result = userMapper.update(user, userUpdateWrapper);
    
    }
    UPDATE user SET age=?, update_time=?, name=?, email = '123@qq.com' WHERE deleted=0 AND name LIKE ? 

    13MP实现条件查询

    13.1MP条件查询构造器

     

    13.2、常用方法

    1ge gt le lt

    2eq ne

    3) between

    4)like

    5)orderByDesc

    6)select

    13.3、测试

    //根据条件构造器查询
    @Test
    public void estSelect(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //ge gt le lt
        //wrapper.ge("age",20);
        //eq ne
        //wrapper.eq("name","zhang3");
        //between
        //wrapper.between("age",20,33);
        //like
        //wrapper.like("name","J");
        //orderByDesc
        wrapper.orderByDesc("age");
        //select
        wrapper.select("name","age");
    
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

    一、wapper介绍 

     

    1Wrapper : 条件构造抽象类,最顶端父类

    2 AbstractWrapper: 用于查询条件封装,生成 sql where 条件

    3QueryWrapper: Entity 对象封装操作类,不是用lambda语法

    4UpdateWrapper: Update 条件封装,用于Entity对象更新操作

    5AbstractLambdaWrapper: Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column

    6 LambdaQueryWrapper:用于Lambda语法使用的查询Wrapper

    7  LambdaUpdateWrapper: Lambda 更新封装Wrapper

     

     @RunWith(SpringRunner.class)

    @SpringBootTest

    public class QueryWrapperTests {

            @Autowired

        private UserMapper userMapper;

    }

    二、AbstractWrapper

    注意:以下条件构造器的方法入参中的 column 均表示数据库字段

    1gegtleltisNullisNotNull

     

    @Test

    public void testDelete() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper

            .isNull("name")

            .ge("age", 12)

            .isNotNull("email");

        int result = userMapper.delete(queryWrapper);

        System.out.println("delete return count = " + result);

    }

    SQLUPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL

     

    2eqne

    注意:seletOne返回的是一条实体记录,当出现多条时会报错

     @Test

    public void testSelectOne() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.eq("name", "Tom");

       User user = userMapper.selectOne(queryWrapper);

        System.out.println(user);

    }

    SELECT id,name,age,email,create_time,update_time,deleted,version FROM user WHERE deleted=0 AND name = ? 

     

    3betweennotBetween

    包含大小边界

     @Test

    public void testSelectCount() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.between("age", 20, 30);

       Integer count = userMapper.selectCount(queryWrapper);

        System.out.println(count);

    }

    SELECT COUNT(1) FROM user WHERE deleted=0 AND age BETWEEN ? AND ? 

     

    4allEq

     @Test

    public void testSelectList() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        Map<String, Object> map = new HashMap<>();

        map.put("id", 2);

        map.put("name", "Jack");

        map.put("age", 20);

       queryWrapper.allEq(map);

        List<User> users = userMapper.selectList(queryWrapper);

       users.forEach(System.out::println);

    }

    SELECT id,name,age,email,create_time,update_time,deleted,version 

    FROM user WHERE deleted=0 AND name = ? AND id = ? AND age = ? 

    5likenotLikelikeLeftlikeRight

    selectMaps返回Map集合列表

     @Test

    public void testSelectMaps() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper

            .notLike("name", "e")

            .likeRight("email", "t");

       List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表

        maps.forEach(System.out::println);

    }

    SELECT id,name,age,email,create_time,update_time,deleted,version 

    FROM user WHERE deleted=0 AND name NOT LIKE ? AND email LIKE ? 

     

    6innotIninSqlnotinSqlexistsnotExists

    (1)innotIn

    notIn("age",{1,2,3})--->age not in (1,2,3)

    notIn("age", 1, 2, 3)--->age not in (1,2,3)

    (2)inSqlnotinSql可以实现子查询

    inSql("age", "1,2,3,4,5,6")--->age in (1,2,3,4,5,6)

    inSql("id", "select id from table where id < 3")--->id in (select id from table where id < 3)

     

    @Test

    public void testSelectObjs() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        //queryWrapper.in("id", 1, 2, 3);

        queryWrapper.inSql("id", "select id from user where id < 3");

       List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表

        objects.forEach(System.out::println);

    }

    SELECT id,name,age,email,create_time,update_time,deleted,version 

    FROM user WHERE deleted=0 AND id IN (select id from user where id < 3) 

     

    7orand

    注意:这里使用的是 UpdateWrapper 

    不调用or则默认为使用 and 

    @Test

    public void testUpdate1() {

       //修改值

        User user = new User();

        user.setAge(99);

        user.setName("Andy");

       //修改条件

        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();

        userUpdateWrapper

            .like("name", "h")

            .or()

            .between("age", 20, 30);

       int result = userMapper.update(user, userUpdateWrapper);

       System.out.println(result);

    }

    UPDATE user SET name=?, age=?, update_time=? WHERE deleted=0 AND name LIKE ? OR age BETWEEN ? AND ?

     

    8、嵌套or、嵌套and

    这里使用了lambda表达式or中的表达式最后翻译成sql时会被加上圆括号

     

    @Test

    public void testUpdate2() {

       //修改值

        User user = new User();

        user.setAge(99);

        user.setName("Andy");

       //修改条件

        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();

        userUpdateWrapper

            .like("name", "h")

            .or(i -> i.eq("name", "李白").ne("age", 20));

       int result = userMapper.update(user, userUpdateWrapper);

       System.out.println(result);

    }

    UPDATE user SET name=?, age=?, update_time=? 

    WHERE deleted=0 AND name LIKE ? 

    OR ( name = ? AND age <> ? ) 

    9orderByorderByDescorderByAsc

     @Test

    public void testSelectListOrderBy() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.orderByDesc("id");

       List<User> users = userMapper.selectList(queryWrapper);

        users.forEach(System.out::println);

    }

    SELECT id,name,age,email,create_time,update_time,deleted,version 

    FROM user WHERE deleted=0 ORDER BY id DESC 

     

    10last

    直接拼接到 sql 的最后

    注意:只能调用一次,多次调用以最后一次为准 sql注入的风险,请谨慎使用

     @Test

    public void testSelectListLast() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.last("limit 1");

       List<User> users = userMapper.selectList(queryWrapper);

        users.forEach(System.out::println);

    }

    SELECT id,name,age,email,create_time,update_time,deleted,version 

    FROM user WHERE deleted=0 limit 1 

    11、指定要查询的列

     @Test

    public void testSelectListColumn() {

       QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.select("id", "name", "age");

       List<User> users = userMapper.selectList(queryWrapper);

        users.forEach(System.out::println);

    }

    SELECT id,name,age FROM user WHERE deleted=0 

     

    12setsetSql

    最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set()   setSql() 的字段

     @Test

    public void testUpdateSet() {

        //修改值

        User user = new User();

        user.setAge(99);

       //修改条件

        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();

        userUpdateWrapper

            .like("name", "h")

            .set("name", "老李头")//除了可以查询还可以使用set设置修改的字段

            .setSql(" email = '123@qq.com'");//可以有子查询

       int result = userMapper.update(user, userUpdateWrapper);

    }

    UPDATE user SET age=?, update_time=?, name=?, email = '123@qq.com' WHERE deleted=0 AND name LIKE ? 

    13MP实现条件查询

    1MP条件查询构造器

     

    2常用方法

    1ge gt le lt

    2eq ne

    3) between

    4)like

    5)orderByDesc

    6)select

    3、测试

    //根据条件构造器查询
    @Test
    public void estSelect(){
        QueryWrapper<User> wrapper =
    new QueryWrapper<>();
       
    //ge gt le lt
        //wrapper.ge("age",20);
        //eq ne
        //wrapper.eq("name","zhang3");
        //between
        //wrapper.between("age",20,33);
        //like
        //wrapper.like("name","J");
        //orderByDesc
        wrapper.orderByDesc("age");
       
    //select
        wrapper.select("name","age");

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

     

     

  • 相关阅读:
    深入学习 History 对象管理浏览器会话历史
    js用斜率判断鼠标进入div的四个方向
    致敬各位10年阿里的前端开发
    JavaScript 时间与日期处理实战:你肯定被坑过
    圣杯/双飞翼布局
    ES6入门
    Javascript中类式继承和原型式继承的实现方法和区别
    五十行javascript代码实现简单的双向数据绑定
    JavaScript 巧学巧用
    VUE2.0学习总结
  • 原文地址:https://www.cnblogs.com/lvwuwa/p/14016009.html
Copyright © 2011-2022 走看看