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

Hanyta發表於2024-05-24
  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);
    

相關文章