1. 程式人生 > 程式設計 >詳解MyBatis-Plus Wrapper條件構造器查詢大全

詳解MyBatis-Plus Wrapper條件構造器查詢大全

一、引言

那麼那麼那麼今天來說下MP中強大的條件查詢功能。

本章是基於上個案例來講的:MyBaits-Plus 快速入門案例

二、具體操作

首先來說說基本的查詢吧,根據主鍵或者簡單的查詢條件進行查詢。

  /**
   * 通過單個ID主鍵進行查詢
   */
  @Test
  public void selectById() {
    User user = userMapper.selectById(1094592041087729666L);
    System.out.println(user);
  }

  /**
   * 通過多個ID主鍵查詢
   */
  @Test
  public void selectByList() {
    List<Long> longs = Arrays.asList(1094592041087729666L,1094590409767661570L);
    List<User> users = userMapper.selectBatchIds(longs);
    users.forEach(System.out::println);
  }

  /**
   * 通過Map引數進行查詢
   */
  @Test
  public void selectByMap() {
    Map<String,Object> params = new HashMap<>();
    params.put("name","張雨琪");
    List<User> users = userMapper.selectByMap(params);
    users.forEach(System.out::println);
  }


MyBatis-Plus還提供了Wrapper條件構造器,具體使用看如下程式碼:

/**
   * 名字包含雨並且年齡小於40
   * <p>
   * WHERE name LIKE '%雨%' AND age < 40
   */
  @Test
  public void selectByWrapperOne() {
    QueryWrapper<User> wrapper = new QueryWrapper();
    wrapper.like("name","雨").lt("age",40);
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 名字包含雨
   * 年齡大於20小於40
   * 郵箱不能為空
   * <p>
   * WHERE name LIKE '%雨%' AND age BETWEEN 20 AND 40 AND email IS NOT NULL
   */
  @Test
  public void selectByWrapperTwo() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.like("name","雨").between("age",20,40).isNotNull("email");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 名字為王性
   * 或者年齡大於等於25
   * 按照年齡降序排序,年齡相同按照id升序排序
   * <p>
   * WHERE name LIKE '王%' OR age >= 25 ORDER BY age DESC,id ASC
   */
  @Test
  public void selectByWrapperThree() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.likeRight("name","王").or()
        .ge("age",25).orderByDesc("age").orderByAsc("id");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 查詢建立時間為2019年2月14
   * 並且上級領導姓王
   * <p>
   * WHERE date_format(create_time,'%Y-%m-%d') = '2019-02-14' AND manager_id IN (select id from user where name like '王%')
   */
  @Test
  public void selectByWrapperFour() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.apply("date_format(create_time,'%Y-%m-%d') = {0}","2019-02-14")
        .inSql("manager_id","select id from user where name like '王%'");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 查詢王姓
   * 並且年齡小於40或者郵箱不為空
   * <p>
   * WHERE name LIKE '王%' AND ( age < 40 OR email IS NOT NULL )
   */
  @Test
  public void selectByWrapperFive() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.likeRight("name","王").and(qw -> qw.lt("age",40).or().isNotNull("email"));
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 查詢王姓
   * 並且年齡大於20 、年齡小於40、郵箱不能為空
   * <p>
   * WHERE name LIKE ? OR ( age BETWEEN ? AND ? AND email IS NOT NULL )
   */
  @Test
  public void selectByWrapperSix() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.likeRight("name","王").or(
        qw -> qw.between("age",40).isNotNull("email")
    );
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * (年齡小於40或者郵箱不為空) 並且名字姓王
   * WHERE ( age < 40 OR email IS NOT NULL ) AND name LIKE '王%'
   */
  @Test
  public void selectByWrapperSeven() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.nested(qw -> qw.lt("age",40).or().isNotNull("email"))
        .likeRight("name","王");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 查詢年齡為30、31、32
   * WHERE age IN (?,?,?)
   */
  @Test
  public void selectByWrapperEight() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.in("age",Arrays.asList(30,31,32));
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

  /**
   * 查詢一條資料
   * limit 1
   */
  @Test
  public void selectByWrapperNine() {
    QueryWrapper<User> wrapper = Wrappers.query();
    wrapper.in("age",32)).last("limit 1");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
  }

到此這篇關於詳解MyBatis-Plus Wrapper條件構造器查詢大全的文章就介紹到這了,更多相關 MyBatis-Plus Wrapper條件構造器內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!