首頁>技術>

Mybatis Plus本身提供基於Service和Mapper的各種增刪改查的方法。

我們來詳細看一下Mybatis Plus中Mapper的查詢功能。

Mybatis Plus mapper查詢用法

Mybatis Plus的查詢預設提供了10種查詢方式,主要支援單條查詢和批次查詢,還有就是返回值的區別,我們來看看每種查詢的使用方式。

1、根據主鍵查詢單條記錄

程式碼 :

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

輸出 :

==>  Preparing: SELECT id,name,age,email FROM user WHERE id=? ==> Parameters: 1(Integer)<==    Columns: ID, NAME, AGE, EMAIL<==        Row: 1, Jone, 18, [email protected]<==      Total: 1

System.out.println輸出:

User(id=1, name=Jone, age=18, [email protected])

2、根據指定條件,查詢單條資料

程式碼:

    @Test    public void testSelectOne() {        System.out.println(("----- selectOne method test ------"));        QueryWrapper wrapper = new QueryWrapper();        wrapper.eq("Name", "Jack");        User user = userMapper.selectOne(wrapper);        System.out.println(user);    }

輸出:

==>  Preparing: SELECT id,name,age,email FROM user WHERE (Name = ?) ==> Parameters: Jack(String)<==    Columns: ID, NAME, AGE, EMAIL<==        Row: 2, Jack, 20, [email protected]<==      Total: 1

System.out.println輸出:

User(id=2, name=Jack, age=20, [email protected])

3、根據主鍵的集合,查詢多條資料

程式碼:

    @Test    public void testSelectBatchIds() {        System.out.println(("----- selectBatchIds method test ------"));        List<Integer> ids =  new ArrayList<>();        ids.add(1);        ids.add(2);        List<User> users = userMapper.selectBatchIds(ids);        users.forEach(System.out::println);    }

輸出 :

==>  Preparing: SELECT id,name,age,email FROM user WHERE id IN ( ? , ? ) ==> Parameters: 1(Integer), 2(Integer)<==    Columns: ID, NAME, AGE, EMAIL<==        Row: 1, Jone, 18, [email protected]<==        Row: 2, Jack, 20, [email protected]<==      Total: 2

System.out.println輸出:

User(id=1, name=Jone, age=18, [email protected])User(id=2, name=Jack, age=20, [email protected])

4、根據Map作為條件,查詢多條資料

程式碼:

    @Test    public void testSelectByMap() {        System.out.println(("----- selectByMap method test ------"));        Map<String,Object> columnMap = new HashMap<>();        columnMap.put("Name","Jack");        columnMap.put("Name","Jone");        columnMap.put("Age",20);        List<User> users = userMapper.selectByMap(columnMap);        users.forEach(System.out::println);    }

輸出:

==>  Preparing: SELECT id,name,age,email FROM user WHERE Age = ? AND Name = ? ==> Parameters: 20(Integer), Jone(String)<==      Total: 0Closing non transactio

這裡查詢結果為0條是資料,看日誌輸出,age:20,Name:Jone。

我實際的Name設定了兩次,分別是:

columnMap.put("Name","Jack");columnMap.put("Name","Jone");

我們都知道map的特性,key不能重複,所以設定兩次肯定是以最後一次為準,所以這裡的引數是Name:Jone。

實際Jone的age是18,我引數設定了20,肯定查不出來,設定為18是可以查出結果的。

selectByMap的作用就是基於一列的多個欄位作為條件來查詢,並且條件是and的關係。

5、根據設定條件統計總記錄數

程式碼:

    @Test    public void testSelectCount() {        System.out.println(("----- selectCount method test ------"));        Map<String,Object> columnMap = new HashMap<>();        columnMap.put("Name","Jack");        columnMap.put("Name","Jone");        columnMap.put("Age",20);        Integer integer = userMapper.selectCount(null);        System.out.println(("----- 總記錄數: "+integer));    }

輸出:

==>  Preparing: SELECT COUNT( 1 ) FROM user ==> Parameters: <==    Columns: COUNT(*)<==        Row: 5<==      Total: 1

System.out.println輸出:

----- 總記錄數: 5

6、根據條件查詢列表,這個我們在第一節就演示過了,看下原始碼定義:

/**     * 根據 entity 條件,查詢全部記錄     *     * @param queryWrapper 實體物件封裝操作類(可以為 null)     */    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

第一節內容的程式碼:

    @Test    public void testSelect() {        System.out.println(("----- selectAll method test ------"));        List<User> userList = userMapper.selectList(null);        Assert.assertEquals(5, userList.size());        userList.forEach(System.out::println);    }

7、基於條件將查詢結果以List<Map>返回

程式碼:

    @Test    public void testSelectMaps() {        System.out.println(("----- selectMaps method test ------"));        QueryWrapper wrapper = new QueryWrapper();        wrapper.gt("Age", 21);        List<Map<String, Object>> list = userMapper.selectMaps(wrapper);        list.forEach(user -> user.forEach((k,v)->{            // 列印鍵,列印值            System.out.println(k + "----" +v);        }));    }

輸出:

==>  Preparing: SELECT id,name,age,email FROM user WHERE (Age > ?) ==> Parameters: 21(Integer)<==    Columns: ID, NAME, AGE, EMAIL<==        Row: 3, Tom, 28, [email protected]<==        Row: 5, Billie, 24, [email protected]<==      Total: 2

上面是SQL輸出,下面是程式碼列印輸出:

ID----3EMAIL----test3@baomidou.comNAME----TomAGE----28ID----5EMAIL----test5@baomidou.comNAME----BillieAGE----24

sql查詢條件是年齡大於21的人,列印了兩條資料,是key—-value的格式列印的。

8、基於條件查詢,返回一個主鍵的list,也就是返回的是主鍵的集合

程式碼:

    @Test    public void testSelectObjs() {        System.out.println(("----- selectObjs method test ------"));        QueryWrapper wrapper = new QueryWrapper();        wrapper.gt("Age", 21);        List users = userMapper.selectObjs(wrapper);        users.forEach(System.out::println);    }

輸出:

==>  Preparing: SELECT id,name,age,email FROM user WHERE (Age > ?) ==> Parameters: 21(Integer)<==    Columns: ID, NAME, AGE, EMAIL<==        Row: 3, Tom, 28, [email protected]<==        Row: 5, Billie, 24, [email protected]<==      Total: 2

System.out::println的輸出:

35

9、基於條件的分頁查詢,在第二節已經講過,這裡貼出原始碼的方法定義

    /**     * 根據 entity 條件,查詢全部記錄(並翻頁)     *     * @param page         分頁查詢條件(可以為 RowBounds.DEFAULT)     * @param queryWrapper 實體物件封裝操作類(可以為 null)     */    <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

第二節內容的程式碼:

    @Test    public void testSelectPage() {        System.out.println(("----- selectAll method test ------"));        Page<User> userPage = userMapper.selectPage(new Page<User>(1, 2), null);        List<User> records = userPage.getRecords();        records.forEach(System.out::println);    }

10、基於條件的分頁查詢,在第二節已經講過,這裡貼出原始碼的方法定義

    /**     * 根據 Wrapper 條件,查詢全部記錄(並翻頁)     *     * @param page         分頁查詢條件     * @param queryWrapper 實體物件封裝操作類     */    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

21
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • VScode摸魚神器之——小霸王,網易雲