天天看點

6、Mybatis-Plus wrapper的使用

文章目錄

  • ​​1、wapper的介紹​​
  • ​​2、QueryWrapper(組裝查詢條件)​​
  • ​​3、QueryWrapper(組裝排序條件)​​
  • ​​4、QueryWrapper(組裝删除條件)​​
  • ​​5、QueryWrapper(資訊的修改)​​
  • ​​6、QueryWrapper(條件的優先級)​​
  • ​​7、QueryWrapper(組裝select子句)​​
  • ​​8、QueryWrapper(實作子查詢)​​
  • ​​8、QueryWrapper(UpdateWrapper)​​

1、wapper的介紹

6、Mybatis-Plus wrapper的使用
  • Wrapper : 條件構造抽象類,最頂端父類
  • AbstractWrapper : 用于查詢條件封裝,生成 sql 的 where 條件
  • QueryWrapper : 查詢條件封裝
  • UpdateWrapper : Update 條件封裝
  • AbstractLambdaWrapper : 使用Lambda 文法
  • LambdaQueryWrapper :用于Lambda文法使用的查詢Wrapper
  • LambdaUpdateWrapper : Lambda 更新封裝Wrapper

2、QueryWrapper(組裝查詢條件)

//條件構造器
    @Test
    public void test01(){
        /**
         * 查詢使用者名包含a,年齡在20到30之間,并且郵箱不為null的使用者資訊
         *
         * SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user
         * WHERE is_deleted=0 AND
         * (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name","三")
                    .between("age",20,25)
                    .isNotNull("email");
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);
    }      

3、QueryWrapper(組裝排序條件)

@Test
    public void test02(){
        /**
         * //按年齡降序查詢使用者,如果年齡相同則按id升序排列
         * //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,id ASC
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("id");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);

    }      

4、QueryWrapper(組裝删除條件)

@Test
    public void test03(){
        /**
         * 删除email為空的使用者
         *  UPDATE t_user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.isNull("email");
        int rs = userMapper.delete(queryWrapper);
        System.out.println(rs);
    }      

5、QueryWrapper(資訊的修改)

@Test
    public void test04(){
        /**使用queryWrapper實作使用者資訊的修改
         * 将(年齡大于20并且使用者名中包含有a)或郵箱為null的使用者資訊修改
         * UPDATE t_user SET user_name=?, age=? WHERE is_deleted=0 AND (age > ? AND user_name LIKE ? OR email IS NULL)
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age",20)
                .like("user_name","a")
                .or()
                .isNull("email");
        User user = new User();
        user.setName("孫悟空");
        user.setAge(32);
        int rs = userMapper.update(user,queryWrapper);
        System.out.println(rs);
    }      

6、QueryWrapper(條件的優先級)

@Test
    public void test05(){
        /**
         * 條件的優先級
         * 将使用者名中包含有a并且(年齡大于20或郵箱為null)的使用者資訊修改
         * lambda中的條件優先執行
         * UPDATE t_user SET user_name=?, age=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name","a")
                .and(i->i.gt("age",20).or().isNull("email"));
        User user = new User();
        user.setName("豬八戒");
        user.setAge(32);
        user.setEmail("[email protected]");
        int rs = userMapper.update(user,queryWrapper);
        System.out.println(rs);
    }      

7、QueryWrapper(組裝select子句)

@Test
    public void test06(){

        /**
         * 查詢使用者資訊的username、age和email字段
         * SELECT user_name,age,email FROM t_user WHERE is_deleted=0
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("user_name","age","email");
       List<Map<String,Object>> maps =  userMapper.selectMaps(queryWrapper);
       maps.forEach(System.out::println);
    }      

8、QueryWrapper(實作子查詢)

@Test
    public void test07(){
        /**
         *查詢uid小于等于100的使用者資訊
         * SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (uid IN (select uid from t_user where uid <= 100))
         */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("uid","select uid from t_user where uid <= 100");
        List<User> list = userMapper.selectList(queryWrapper);
        list.forEach(System.out::println);

    }      

8、QueryWrapper(UpdateWrapper)

@Test
    public void test08(){

        /**
         * 将使用者名中包含有a并且(年齡大于20或郵箱為null)的使用者資訊修改
         * UPDATE t_user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
         */
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.like("user_name","a")
                .and(i-> i.gt("age",20).or().isNull("email"));
        updateWrapper.set("user_name","唐僧").set("email","[email protected]");
        int rs = userMapper.update(null,updateWrapper);
        System.out.println(rs);
    }      

繼續閱讀