1. 程式人生 > 其它 >Mybatis-plus的查詢操作

Mybatis-plus的查詢操作

Mybatis-plus的查詢操作

通過UserMapper可以看出有這麼多的查詢方法:

接下來我們分別介紹一下其中的每一種方法

1.selectObjects()

這個方法傳入的引數是Wrapper型別的,關於條件構造器(Wrapper)的介紹請看https://mp.baomidou.com/guide/wrapper.html#alleq

當傳入引數為null的時候,查詢的就是全部的資料,返回的值型別就是Object型別的。

   @Test
    void contextLoads() {
        //引數是一個wrapper,條件構造器,
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.eq("name","wp223");
        List<Object> objects = userMapper.selectObjs(qw);
        objects.forEach(System.out::println);
    }

查詢結果:

通過查詢結果可以看出,只是通過主鍵查詢出來了主鍵ID,返回的是一個Object物件

2.SelectMaps()

這些方法的引數傳入的一般都是條件構造器,所以下面就不說名引數的傳遞了

可以看出返回的是一個Map型別,String作為鍵,Object作為值的。

@Test
void contextLoads() {
    //查詢全部使用者
    //引數是一個wrapper,條件構造器,這裡我們先用null
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.eq("name","wp223");
    List<Map<String, Object>> maps = userMapper.selectMaps(qw);
    System.out.println("輸出的資料條件");
    maps.forEach(System.out::println);
}

輸出的結果:

可以看出結果都是資料對的形式。

3.SelectCount()

此函式查詢的是返回資料的記錄條數,

@Test
public void test2() {
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.eq("name","wp223");
    Integer integer = userMapper.selectCount(qw);
    System.out.println("輸出的結果"+integer);
   
}

執行結果:相當於呼叫了Count*

4.selectOne()

做單值查詢的函式

@Test
public void test3() {
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.eq("name","wp223");
    User user = userMapper.selectOne(qw);
    System.out.println("輸出的結果"+user.getId()+user.getName()+user.getAge()+user.getEmail());
}

這裡需要注意如果你的查詢條件查出來的結果不是唯一的值的話會報錯。意思就是說期待的值是1或者是空,這是需要控制查詢條件

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

修改條件控制器之後:

 @Test
        public void test3() {
            QueryWrapper<User> qw = new QueryWrapper<>();
            qw.eq("id","1");
            User user = userMapper.selectOne(qw);
            System.out.println("輸出的結果"+user.getId()+user.getName()+user.getAge()+user.getEmail());
        }

查詢結果:

5.selectList()

查詢返回List集合,List中元素的型別是實體類物件型別

 @Test
    public void test4() {
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.isNotNull("name")
                .gt("age",18);
        List<User> users = userMapper.selectList(qw);
        users.forEach(System.out::println);
    }

查詢結果:可以看出影響的結果

6.selectPage(page, qw)

這裡做了一個分頁查詢,分頁查詢的使用了一個簡答的分頁外掛Page繼承自IPage

@Test
public void test5() {
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.isNotNull("name")
            .gt("age",18);
    Page<User> page = new Page<>(2,5);

    IPage<User> userIPage = userMapper.selectPage(page, qw); //查詢到分頁記錄
    List<User> records = userIPage.getRecords();  //直接取到分頁列表的物件記錄
    records.forEach(System.out::println);

}

查詢結果:

7.selectByMap(map)

使用Map來控制查詢條件,

@Test
public void test6() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("name","wp223");
    List<User> users = userMapper.selectByMap(map);
    users.forEach(System.out::println);
}

為什麼要再出現map去做查詢的,條件控制器不是更香嗎?設計者是從什麼角度考慮的呢?

下面是查詢結果:

8.selectById(id)

通過主鍵查詢,

@Test
public void testSelectById() {
    User user = userMapper.selectById(1L);
    System.out.println(user);
}

查詢結果,可以看到他底層的sql

9.selectBatchIds(Arrays.asList(1, 2, 3))

這個用來做id的批量查詢,需要注意的是引數傳入的需要的是集合。在使用的時候要注意建立集合。

@Test
public void testSelectBanchId() {
    List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
    users.forEach(System.out::println);
}

查詢結果:

10.selectMapsPage(page, qw)

這裡做得是一個分頁查詢條件

@Test
public void tes7() {
    Page page = new Page(2,5);
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.isNotNull("name")
            .gt("age",18);
    Page page1 = userMapper.selectMapsPage(page, qw);
    page.getRecords().forEach(System.out::println);

}

查詢結果: