-
MyBatis-Plus提供了强大的条件构造器。通过条件构造器可以写一些复杂的SQL语句,从而提高我们的开发效率。通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等。
-
举例
@Test void testWrapper1() { QueryWrapper<Person> wrapper=new QueryWrapper<>(); HashMap<String,Object> map=new HashMap<>(); map.put("name","zhangsan"); map.put("age",20); wrapper.allEq(map); List<Person> personList = personMapper.selectList(wrapper); personList.forEach(System.out::println); } @Test void testWrapper4() { QueryWrapper<Person> wrapper=new QueryWrapper<>(); wrapper.gt("age",18); //大于等于 List<Person> personList = personMapper.selectList(wrapper); personList.forEach(System.out::println); } @Test void testWrapper9() { QueryWrapper<Person> wrapper=new QueryWrapper<>(); //模糊查询 wrapper.like("name","o"); List<Person> personList = personMapper.selectList(wrapper); personList.forEach(System.out::println); } //根据年龄进行分组查询 @Test void testWrapper19() { QueryWrapper<Person> wrapper=new QueryWrapper<>(); wrapper.groupBy("age"); List<Person> personList = personMapper.selectList(wrapper); personList.forEach(System.out::println); }
-
自定义SQL:Mybatis-Plus(以下简称MBP)的初衷是为了简化开发,而不建议开发者自己写SQL语句的;但是有时客户需求比较复杂,仅使用MBP提供的Service,Mapper与Wrapper进行组合,难以实现可以需求; 这时我们就要用到自定义的SQL了。
- 注解SQL
public interface CarMapper extends BaseMapper<Car> { @Select("select * from car where car_seq = #{carSeq}") Car queryCar(String carSeq); }
- Wrapper传参+注解SQL
//创建Wrapper对象 QueryWrapper<Entity> wrapper = new QueryWrapper<>(); //设置查询条件 wrapper.eq("column1", value1) .ne("column2", value2) .like("column3", value3); //示例 wrapper.eq("car_state", "1") .like("car_id", "渝A"); //mapper接口 @Select("select * from car ${ew.customSqlSegment}") Page<Car> selectByPrimaryKey(Page<Car> page, @Param(Constants.WRAPPER) QueryWrapper<Car> queryWrapper); //完整代码 //分页查询方式1 QueryWrapper<Car> wrapper = new QueryWrapper<>(); Page<Car> resultPage = new Page<>(1, 10); wrapper.eq("car_state", "1") .like("car_id", "渝A") .orderByAsc("car_id");//排序 carMapper.selectByPrimaryKey(resultPage,wrapper); //分页查询方式2 IPage<Car> page = new Page<>(1, 10); // 分页查询 LambdaQueryWrapper<Car> qw = new LambdaQueryWrapper<Car>() .like(Car::getCarId, "渝A") // 车牌号 = .eq(Car::getCarState, 1); // 状态 //selectPage是BaseMapper自带方法 IPage<Car> userPage = carMapper.selectPage(page, qw)
- Wrapper传参+xml文件SQL
//mapper类 Car selectBySeq (@Param(Constants.WRAPPER) QueryWrapper<Car> queryWrapper); //xml配置文件 <select id="selectBySeq " resultMap="BaseResultMap"> select * from `car` ${ew.customSqlSegment} </select> //通过Wapper传递查询参数 @RequestMapping("/ok") public void testCustomSQL2() { LambdaQueryWrapper<Car> query = new LambdaQueryWrapper<>(); query.eq(Car::getCarId, "11"); Car car= carMapper.queryCarSeq(query); System.out.println(car.toString()); } //或者 Wrapper wrapper = new QueryWrapper<Car>().eq("car_state", 1).like("cai_id", "渝"); List<Car> userList = carMapper.queryCarSeq(wrapper);