Java開發學習(四十一)----MyBatisPlus標準數據層(增刪查改分頁)開發 Java開發學習(四十)----MyBatisPlus入門案例與簡介

一、標準CRUD使用

對於標準的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢?

我們先來看張圖:

1.1 環境準備

這裏用的環境就是Java開發學習(四十)----MyBatisPlus入門案例與簡介中使用的環境

二、新增

在進行新增之前,我們可以分析下新增的方法:

int insert (T t)
  • T:泛型,新增用來保存新增數據

  • int:返回值,新增成功後返回1,沒有新增成功返回的是0

在測試類中進行新增操作:

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {
​
    @Autowired
    private UserDao userDao;
​
    @Test
    void testSave() {
        User user = new User();
        user.setName("黑馬程序員");
        user.setPassword("itheima");
        user.setAge(12);
        user.setTel("4006184000");
        userDao.insert(user);
    }
}

執行測試後,數據庫表中就會添加一條數據。

但是數據中的主鍵ID,有點長,那這個主鍵ID是如何來的?我們更想要的是主鍵自增,應該是5纔對,這個是我們後面要介紹的主鍵ID生成策略,這塊的這個問題,我們暫時先放放。

三、刪除

在進行刪除之前,我們可以分析下刪除的方法:

int deleteById (Serializable id)
  • Serializable:參數類型

    • 思考:參數類型爲什麼是一個序列化類?

      從這張圖可以看出,

      • String和Number是Serializable的子類,

      • Number又是Float,Double,Integer等類的父類,

      • 能作爲主鍵的數據類型都已經是Serializable的子類,

      • MyBatisPlus使用Serializable作爲參數類型,就好比我們可以用Object接收任何數據類型一樣。

  • int:返回值類型,數據刪除成功返回1,未刪除數據返回0。

在測試類中進行新增操作:

 @SpringBootTest
class Mybatisplus01QuickstartApplicationTests {
​
    @Autowired
    private UserDao userDao;
​
    @Test
    void testDelete() {
        // 傳入主鍵id
        userDao.deleteById(1401856123725713409L);
    }
}
​

四、修改

在進行修改之前,我們可以分析下修改的方法:

int updateById(T t);
  • T:泛型,需要修改的數據內容,注意因爲是根據ID進行修改,所以傳入的對象中需要有ID屬性值

  • int:返回值,修改成功後返回1,未修改數據返回0

在測試類中進行新增操作:

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {
​
    @Autowired
    private UserDao userDao;
​
    @Test
    void testUpdate() {
        User user = new User();
        user.setId(1L);
        user.setName("Tom888");
        user.setPassword("tom888");
        userDao.updateById(user);
    }
}

說明:修改的時候,只修改實體對象中有值的字段。

五、根據ID查詢

在進行根據ID查詢之前,我們可以分析下根據ID查詢的方法:

T selectById (Serializable id)
  • Serializable:參數類型,主鍵ID的值

  • T:根據ID查詢只會返回一條數據

在測試類中進行新增操作:

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {
​
    @Autowired
    private UserDao userDao;
    
    @Test
    void testGetById() {
        User user = userDao.selectById(2L);
        System.out.println(user);
    }
}

六、查詢所有

在進行查詢所有之前,我們可以分析下查詢所有的方法:

List<T> selectList(Wrapper<T> queryWrapper)
  • Wrapper:用來構建條件查詢的條件,目前我們沒有可直接傳爲Null

  • List<T>:因爲查詢的是所有,所以返回的數據是一個集合

在測試類中進行新增操作:

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {
​
    @Autowired
    private UserDao userDao;
    
    @Test
    void testGetAll() {
        List<User> userList = userDao.selectList(null);
        System.out.println(userList);
    }
}

七、Lombok

代碼寫到這,我們會發現DAO接口類的編寫現在變成最簡單的了,裏面什麼都不用寫。反過來看看模型類的編寫都需要哪些內容:

  • 私有屬性

  • setter...getter...方法

  • toString方法

  • 構造函數

雖然這些內容不難,同時也都是通過IDEA工具生成的,但是過程還是必須得走一遍,那麼對於模型類的編寫有沒有什麼優化方法?就是我們接下來的Lombok。

概念

  • Lombok,一個Java類庫,提供了一組註解,簡化POJO實體類開發。

使用步驟

步驟1:添加lombok依賴
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <!--<version>1.18.12</version>-->
</dependency>

注意:版本可以不用寫,因爲SpringBoot中已經管理了lombok的版本。

步驟2:安裝Lombok的插件

新版本IDEA已經內置了該插件,如果刪除setter和getter方法程序有報紅,則需要安裝插件

如果在IDEA中找不到lombok插件,可以訪問如下網站

https://plugins.jetbrains.com/plugin/6317-lombok/versions

根據自己IDEA的版本下載對應的lombok插件,下載成功後,在IDEA中採用離線安裝的方式進行安裝。

步驟3:模型類上添加註解

Lombok常見的註解有:

  • @Setter:爲模型類的屬性提供setter方法

  • @Getter:爲模型類的屬性提供getter方法

  • @ToString:爲模型類的屬性提供toString方法

  • @EqualsAndHashCode:爲模型類的屬性提供equals和hashcode方法

  • @Data:是個組合註解,包含上面的註解的功能

  • @NoArgsConstructor:提供一個無參構造函數

  • @AllArgsConstructor:提供一個包含所有參數的構造函數

Lombok的註解還有很多,上面標紅的三個是比較常用的。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private String password;
    private Integer age;
    private String tel;
}

說明:

Lombok只是簡化模型類的編寫,我們之前的方法也能用,比如有人會問:我如果只想要有name和password的構造函數,該如何編寫?

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private String password;
    private Integer age;
    private String tel;
​
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }
}

這種方式是被允許的。

八、分頁功能

分頁查詢使用的方法是:

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
  • IPage:用來構建分頁查詢條件

  • Wrapper:用來構建條件查詢的條件,目前我們沒有可直接傳爲Null

  • IPage:返回值,你會發現構建分頁條件和方法的返回值都是IPage

IPage是一個接口,我們需要找到它的實現類來構建它,具體的實現類,可以進入到IPage類中按ctrl+h,會找到其有一個實現類爲Page

步驟1:調用方法傳入參數獲取返回值

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {
​
    @Autowired
    private UserDao userDao;
    
    //分頁查詢
    @Test
    void testSelectPage(){
        //1 創建IPage分頁對象,設置分頁參數,1爲當前頁碼,3爲每頁顯示的記錄數
        IPage<User> page=new Page<>(1,3);
        //2 執行分頁查詢
        userDao.selectPage(page,null);
        //3 獲取分頁結果
        System.out.println("當前頁碼值:"+page.getCurrent());
        System.out.println("每頁顯示數:"+page.getSize());
        System.out.println("一共多少頁:"+page.getPages());
        System.out.println("一共多少條數據:"+page.getTotal());
        System.out.println("數據:"+page.getRecords());
    }
}

步驟2:設置分頁攔截器

這個攔截器MyBatisPlus已經爲我們提供好了,我們只需要將其配置成Spring管理的bean對象即可。

@Configuration
public class MybatisPlusConfig {
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1 創建MybatisPlusInterceptor攔截器對象
        MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
        //2 添加分頁攔截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}

說明:上面的代碼記不住咋辦呢?

這些內容在的官方文檔中有詳細的說明,我們可以查看官方文檔類配置

步驟3:運行測試程序

如果想查看MybatisPlus執行的SQL語句,可以修改application.yml配置文件,

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印SQL日誌到控制檯

打開日誌後,就可以在控制檯打印出對應的SQL語句,開啓日誌功能性能就會受到影響,調試完後記得關閉。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章