MyBatisPlus学习(5)—— Wrapper条件构造器

通过条件构造器来设置操作数据库的条件

一. 创建实体类

package com.xdu.mybatisplus.pojo;

import lombok.*;

@Data
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

二. 创建Mapper接口

package com.xdu.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

三. 测试

1. QueryWrapper

① 组装查询条件

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //查询用户名包含 o 且年龄21到23之间用户信息,结果按照年龄的降序排序,若年龄相同,则按照id升序排序
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name", "o").between("age", 21, 23).orderByDesc("age").orderByAsc("id");   //表中的字段名

        List<User> list = userMapper.selectList(queryWrapper);  //SELECT id,name,age FROM user WHERE (name LIKE ? AND age BETWEEN ? AND ?) ORDER BY age DESC,id ASC
        list.forEach(System.out::println);
    }
}

② 组装删除条件

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //删除姓名为null的用户
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.isNull("name");    //表中的字段名
 
        int result = userMapper.delete(queryWrapper);  //DELETE FROM user WHERE (name IS NULL)
        System.out.println(result);
    }
}

③ 组装更新条件

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //修改id大于5且姓名中包含o 或 年龄小于20的用户 
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("id", 5).like("name", "o").or().lt("age", 20);  //表中的字段名

        User user = new User();
        user.setName("Joe");
        user.setAge(23);
        //将满足条件的用户设置为user的内容
        int result = userMapper.update(user, queryWrapper);  //UPDATE user SET name=?, age=? WHERE (id > ? AND name LIKE ? OR age < ?)
        System.out.println(result);
    }
}

④ 设置条件优先级

​
package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //修改id大于5且(姓名中包含o或年龄小于20)的用户
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //需要设置优先级 (or()中也可以这样设置)
        queryWrapper.gt("id", 5).and(i -> i.like("name", "o").or().lt("age", 20));//表中的字段名

        User user = new User();
        user.setName("Tom");
        user.setAge(22);
        //将满足条件的用户设置为user的内容
        int result = userMapper.update(user, queryWrapper);  //UPDATE user SET name=?, age=? WHERE (id > ? AND (name LIKE ? OR age < ?))
        System.out.println(result);
    }
}

​

⑤ 查询某些字段

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //查询用户名和年龄
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("name", "age");   //表中的字段名
        
        List<Map<String, Object>> mapList = userMapper.selectMaps(queryWrapper);  //SELECT name,age FROM user
        mapList.forEach(System.out::println);
    }
}

⑥ 子查询

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //查询id小于等于5的用户  (展示子查询功能)
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("id", "select id from user where id <= 100");

        List<User> list = userMapper.selectList(queryWrapper);  //SELECT id,name,age FROM user WHERE (id IN (select id from user where id <= 100))
        list.forEach(System.out::println);
    }
}

2. UpdateWrapper

① 组装更新条件

可以之间使用set方法设置更新内容,比QueryWrapper更方便

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //修改id大于5且(姓名中包含o或年龄小于20)的用户
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.gt("id", 5).and(i -> i.like("name", "o").or().lt("age", 20));//表中的字段名

        updateWrapper.set("name", "Tom").set("age", 22);
        //将满足条件的用户设置为user的内容
        int result = userMapper.update(null, updateWrapper);  //UPDATE user SET name=?,age=? WHERE (id > ? AND (name LIKE ? OR age < ?))
        System.out.println(result);
    }
}

3. LambdaQueryWrapper

可以直接获取实体类对象的属性 

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //查询id大于5且姓名中包含o 或 年龄小于20的用户
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.gt(User::getId, 5).like(User::getName, "o").or().lt(User::getAge, 20);

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

4. LambdaUpdateWrapper

package com.xdu.mybatisplus;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.xdu.mybatisplus.mapper.UserMapper;
import com.xdu.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testWrapper(){
        //修改id大于5且(姓名中包含o或年龄小于20)的用户
        LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        lambdaUpdateWrapper.gt(User::getId, 5).and(i -> i.like(User::getName, "o").or().lt(User::getAge, 20));

        lambdaUpdateWrapper.set(User::getName, "Tom").set(User::getAge, 22);
        int result = userMapper.update(null, lambdaUpdateWrapper);  //UPDATE user SET name=?,age=? WHERE (id > ? AND (name LIKE ? OR age < ?))
        System.out.println(result);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatisplus 自定义sql 使用条件构造可以在自定义 SQL 语句中使用 Mybatisplus条件构造,方便快捷地构造查询条件。 使用步骤: 1. 在 Mapper 接口中定义自定义 SQL 语句的方法,方法返回值为 List 或者其他需要返回的结果类型。 2. 在自定义 SQL 语句中使用 ${} 占位符来引用条件构造生成的 SQL 片段。 3. 在方法参数中使用 @Param 注解来指定条件构造生成的 SQL 片段的参数名称和类型,同时在自定义 SQL 语句中使用 #{参数名} 占位符来引用参数。 4. 在方法中使用 QueryWrapper 类来构造查询条件,然后将 QueryWrapper 对象作为参数传递给自定义 SQL 语句方法即可。 示例代码如下: ``` @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user ${ew.customSqlSegment}") List<User> selectByCustomSql(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper); } ``` 其中,${ew.customSqlSegment} 是 Mybatisplus 条件构造生成的 SQL 片段,@Param(Constants.WRAPPER) 指定了 wrapper 参数的名称和类型。 调用示例: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 18).like("name", "张"); List<User> userList = userMapper.selectByCustomSql(wrapper); ``` 以上代码中,使用 QueryWrapper 构造了查询条件,然后将 QueryWrapper 对象作为参数传递给 selectByCustomSql 方法,该方法会根据传入的 QueryWrapper 对象生成自定义 SQL 语句,并返回符合条件的用户列表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值