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