一、標準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語句,開啓日誌功能性能就會受到影響,調試完後記得關閉。