Mybatis-plus核心功能-自定义SQL

  1. MyBatis-Plus提供了强大的条件构造器。通过条件构造器可以写一些复杂的SQL语句,从而提高我们的开发效率。通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等。

  2. 举例

    @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);
    }
    
    
  3. 自定义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);
    
posted @ 2024-05-24 19:22  Hanyta  阅读(294)  评论(0编辑  收藏  举报