網(wǎng)站設(shè)計服務(wù)有哪些/網(wǎng)頁seo
MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層開發(fā)
- 2,標(biāo)準(zhǔn)數(shù)據(jù)層開發(fā)
- 2.1 標(biāo)準(zhǔn)CRUD使用
- 2.2 新增
- 2.3 刪除
- 2.4 修改
- 2.5 根據(jù)ID查詢
- 2.6 查詢所有
- 2.7 Lombok
- 概念
- 使用步驟
- 步驟1:添加lombok依賴
- 步驟2:安裝Lombok的插件
- 步驟3:模型類上添加注解
- 2.8 分頁功能
- 步驟1:調(diào)用方法傳入?yún)?shù)獲取返回值
- 步驟2:設(shè)置分頁攔截器
- 步驟3:運行測試程序
目標(biāo)
- 掌握MyBatisPlus中的分頁及條件查詢構(gòu)建
2,標(biāo)準(zhǔn)數(shù)據(jù)層開發(fā)
在這一節(jié)中我們重點學(xué)習(xí)的是數(shù)據(jù)層標(biāo)準(zhǔn)的CRUD(增刪改查)的實現(xiàn)與分頁功能。代碼比較多,我們一個個來學(xué)習(xí)。
2.1 標(biāo)準(zhǔn)CRUD使用
對于標(biāo)準(zhǔn)的CRUD功能都有哪些以及MP都提供了哪些方法可以使用呢?
我們先來看張圖:
對于這張圖的方法,我們挨個來演示下:
首先說下,案例中的環(huán)境就是咱們?nèi)腴T案例的內(nèi)容,第一個先來完成新增
功能
2.2 新增
在進行新增之前,我們可以分析下新增的方法:
int insert (T t)
-
T:泛型,新增用來保存新增數(shù)據(jù)
-
int:返回值,新增成功后返回1,沒有新增成功返回的是0
在測試類中進行新增操作:
@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {@Autowiredprivate UserDao userDao;@Testvoid testSave() {User user = new User();user.setName("黑馬程序員");user.setPassword("itheima");user.setAge(12);user.setTel("4006184000");userDao.insert(user);}
}
執(zhí)行測試后,數(shù)據(jù)庫表中就會添加一條數(shù)據(jù)。
但是數(shù)據(jù)中的主鍵ID,有點長,那這個主鍵ID是如何來的?我們更想要的是主鍵自增,應(yīng)該是5才對,這個是我們后面要學(xué)習(xí)的主鍵ID生成策略,這塊的這個問題,我們暫時先放放。
2.3 刪除
在進行刪除之前,我們可以分析下刪除的方法:
int deleteById (Serializable id)
-
Serializable:參數(shù)類型
-
思考:參數(shù)類型為什么是一個序列化類?
從這張圖可以看出,
- String和Number是Serializable的子類,
- Number又是Float,Double,Integer等類的父類,
- 能作為主鍵的數(shù)據(jù)類型都已經(jīng)是Serializable的子類,
- MP使用Serializable作為參數(shù)類型,就好比我們可以用Object接收任何數(shù)據(jù)類型一樣。
-
-
int:返回值類型,數(shù)據(jù)刪除成功返回1,未刪除數(shù)據(jù)返回0。
在測試類中進行新增操作:
@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {@Autowiredprivate UserDao userDao;@Testvoid testDelete() {userDao.deleteById(1401856123725713409L);}
}
2.4 修改
在進行修改之前,我們可以分析下修改的方法:
int updateById(T t);
-
T:泛型,需要修改的數(shù)據(jù)內(nèi)容,注意因為是根據(jù)ID進行修改,所以傳入的對象中需要有ID屬性值
-
int:返回值,修改成功后返回1,未修改數(shù)據(jù)返回0
在測試類中進行新增操作:
@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {@Autowiredprivate UserDao userDao;@Testvoid testUpdate() {User user = new User();user.setId(1L);user.setName("Tom888");user.setPassword("tom888");userDao.updateById(user);}
}
**說明:**修改的時候,只修改實體對象中有值的字段。
2.5 根據(jù)ID查詢
在進行根據(jù)ID查詢之前,我們可以分析下根據(jù)ID查詢的方法:
T selectById (Serializable id)
- Serializable:參數(shù)類型,主鍵ID的值
- T:根據(jù)ID查詢只會返回一條數(shù)據(jù)
在測試類中進行新增操作:
@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {@Autowiredprivate UserDao userDao;@Testvoid testGetById() {User user = userDao.selectById(2L);System.out.println(user);}
}
2.6 查詢所有
在進行查詢所有之前,我們可以分析下查詢所有的方法:
List<T> selectList(Wrapper<T> queryWrapper)
- Wrapper:用來構(gòu)建條件查詢的條件,目前我們沒有可直接傳為Null
- List:因為查詢的是所有,所以返回的數(shù)據(jù)是一個集合
在測試類中進行新增操作:
@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {@Autowiredprivate UserDao userDao;@Testvoid testGetAll() {List<User> userList = userDao.selectList(null);System.out.println(userList);}
}
我們所調(diào)用的方法都是來自于DAO接口繼承的BaseMapper類中。里面的方法有很多,我們后面會慢慢去學(xué)習(xí)里面的內(nèi)容。
2.7 Lombok
代碼寫到這,我們會發(fā)現(xiàn)DAO接口類的編寫現(xiàn)在變成最簡單的了,里面什么都不用寫。反過來看看模型類的編寫都需要哪些內(nèi)容:
- 私有屬性
- setter…getter…方法
- toString方法
- 構(gòu)造函數(shù)
雖然這些內(nèi)容不難,同時也都是通過IDEA工具生成的,但是過程還是必須得走一遍,那么對于模型類的編寫有沒有什么優(yōu)化方法?就是我們接下來要學(xué)習(xí)的Lombok。
概念
- Lombok,一個Java類庫,提供了一組注解,簡化POJO實體類開發(fā)。
使用步驟
步驟1:添加lombok依賴
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!--<version>1.18.12</version>-->
</dependency>
**注意:**版本可以不用寫,因為SpringBoot中已經(jīng)管理了lombok的版本。
步驟2:安裝Lombok的插件
新版本IDEA已經(jīng)內(nèi)置了該插件,如果刪除setter和getter方法程序有報紅,則需要安裝插件
如果在IDEA中找不到lombok插件,可以訪問如下網(wǎng)站
https://plugins.jetbrains.com/plugin/6317-lombok/versions
根據(jù)自己IDEA的版本下載對應(yīng)的lombok插件,下載成功后,在IDEA中采用離線安裝的方式進行安裝。
步驟3:模型類上添加注解
Lombok常見的注解有:
- @Setter:為模型類的屬性提供setter方法
- @Getter:為模型類的屬性提供getter方法
- @ToString:為模型類的屬性提供toString方法
- @EqualsAndHashCode:為模型類的屬性提供equals和hashcode方法
- @Data:是個組合注解,包含上面的注解的功能
- @NoArgsConstructor:提供一個無參構(gòu)造函數(shù)
- @AllArgsConstructor:提供一個包含所有參數(shù)的構(gòu)造函數(shù)
Lombok的注解還有很多,上面標(biāo)紅的三個是比較常用的,其他的大家后期用到了,再去補充學(xué)習(xí)。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Long id;private String name;private String password;private Integer age;private String tel;
}
說明:
Lombok只是簡化模型類的編寫,我們之前的方法也能用,比如有人會問:我如果只想要有name和password的構(gòu)造函數(shù),該如何編寫?
@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;}
}
這種方式是被允許的。
2.8 分頁功能
基礎(chǔ)的增刪改查就已經(jīng)學(xué)習(xí)完了,剛才我們在分析基礎(chǔ)開發(fā)的時候,有一個分頁功能還沒有實現(xiàn),在MP中如何實現(xiàn)分頁功能,就是咱們接下來要學(xué)習(xí)的內(nèi)容。
分頁查詢使用的方法是:
IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
- IPage:用來構(gòu)建分頁查詢條件
- Wrapper:用來構(gòu)建條件查詢的條件,目前我們沒有可直接傳為Null
- IPage:返回值,你會發(fā)現(xiàn)構(gòu)建分頁條件和方法的返回值都是IPage
IPage是一個接口,我們需要找到它的實現(xiàn)類來構(gòu)建它,具體的實現(xiàn)類,可以進入到IPage類中按ctrl+h,會找到其有一個實現(xiàn)類為Page
。
步驟1:調(diào)用方法傳入?yún)?shù)獲取返回值
@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {@Autowiredprivate UserDao userDao;//分頁查詢@Testvoid testSelectPage(){//1 創(chuàng)建IPage分頁對象,設(shè)置分頁參數(shù),1為當(dāng)前頁碼,3為每頁顯示的記錄數(shù)IPage<User> page=new Page<>(1,3);//2 執(zhí)行分頁查詢userDao.selectPage(page,null);//3 獲取分頁結(jié)果System.out.println("當(dāng)前頁碼值:"+page.getCurrent());System.out.println("每頁顯示數(shù):"+page.getSize());System.out.println("一共多少頁:"+page.getPages());System.out.println("一共多少條數(shù)據(jù):"+page.getTotal());System.out.println("數(shù)據(jù):"+page.getRecords());}
}
步驟2:設(shè)置分頁攔截器
這個攔截器MP已經(jīng)為我們提供好了,我們只需要將其配置成Spring管理的bean對象即可。
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1 創(chuàng)建MybatisPlusInterceptor攔截器對象MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();//2 添加分頁攔截器mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mpInterceptor;}
}
**說明:**上面的代碼記不住咋辦呢?
這些內(nèi)容在MP的官方文檔中有詳細(xì)的說明,我們可以查看官方文檔類配置
步驟3:運行測試程序
如果想查看MP執(zhí)行的SQL語句,可以修改application.yml配置文件,
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印SQL日志到控制臺
打開日志后,就可以在控制臺打印出對應(yīng)的SQL語句,開啟日志功能性能就會受到影響,調(diào)試完后記得關(guān)閉。
學(xué)習(xí)筆記 from 黑馬程序員
By – Suki 2023/4/7