對於標準的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢?
我們先來看張圖:
這裡用的環境就是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查詢的方法:
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);
}
}
程式碼寫到這,我們會發現DAO介面類的編寫現在變成最簡單的了,裡面什麼都不用寫。反過來看看模型類的編寫都需要哪些內容:
私有屬性
setter...getter...方法
toString方法
建構函式
雖然這些內容不難,同時也都是通過IDEA工具生成的,但是過程還是必須得走一遍,那麼對於模型類的編寫有沒有什麼優化方法?就是我們接下來的Lombok。
Lombok,一個Java類庫,提供了一組註解,簡化POJO實體類開發。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--<version>1.18.12</version>-->
</dependency>
注意:版本可以不用寫,因為SpringBoot中已經管理了lombok的版本。
新版本IDEA已經內建了該外掛,如果刪除setter和getter方法程式有報紅,則需要安裝外掛
如果在IDEA中找不到lombok外掛,可以存取如下網站
https://plugins.jetbrains.com/plugin/6317-lombok/versions
根據自己IDEA的版本下載對應的lombok外掛,下載成功後,在IDEA中採用離線安裝的方式進行安裝。
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
。
@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());
}
}
這個攔截器MyBatisPlus已經為我們提供好了,我們只需要將其設定成Spring管理的bean物件即可。
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//1 建立MybatisPlusInterceptor攔截器物件
MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
//2 新增分頁攔截器
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mpInterceptor;
}
}
說明:上面的程式碼記不住咋辦呢?
這些內容在的官方檔案中有詳細的說明,我們可以檢視官方檔案類設定
如果想檢視MybatisPlus執行的SQL語句,可以修改application.yml組態檔,
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #列印SQL紀錄檔到控制檯
開啟紀錄檔後,就可以在控制檯列印出對應的SQL語句,開啟紀錄檔功能效能就會受到影響,偵錯完後記得關閉。
本文來自部落格園,作者:|舊市拾荒|,轉載請註明原文連結:https://www.cnblogs.com/xiaoyh/p/16468175.html