java實(shí)現(xiàn)通用分頁(yè)(后端)
1.通用分頁(yè)是什么?
Java通用分頁(yè)是指在Java編程語(yǔ)言中實(shí)現(xiàn)的一種通用分頁(yè)功能。它通常用于在Java Web應(yīng)用中展示大量數(shù)據(jù)或查詢結(jié)果,并將其分頁(yè)顯示給用戶。
在Java中,通常會(huì)使用以下幾個(gè)組件或類來(lái)實(shí)現(xiàn)通用分頁(yè)功能:
1. 分頁(yè)查詢:通常會(huì)通過(guò)數(shù)據(jù)庫(kù)查詢或其他方式獲取大量數(shù)據(jù),然后使用分頁(yè)查詢技術(shù)來(lái)獲取特定頁(yè)的數(shù)據(jù)。這通常包括設(shè)置每頁(yè)顯示的數(shù)據(jù)數(shù)量、當(dāng)前頁(yè)碼和排序規(guī)則等參數(shù),然后根據(jù)參數(shù)篩選和返回相應(yīng)頁(yè)的數(shù)據(jù)。
2. 頁(yè)面展示:通用分頁(yè)需要在前端頁(yè)面上展示分頁(yè)數(shù)據(jù),可以使用Java的模板引擎或前端框架來(lái)實(shí)現(xiàn)。在頁(yè)面上通常會(huì)顯示當(dāng)前頁(yè)的數(shù)據(jù)列表、頁(yè)碼導(dǎo)航、上一頁(yè)和下一頁(yè)按鈕等控件,以便用戶瀏覽和導(dǎo)航不同頁(yè)的數(shù)據(jù)。
3. 分頁(yè)邏輯:在Java中,通常會(huì)使用一些邏輯代碼或工具類來(lái)處理分頁(yè)邏輯,例如計(jì)算總頁(yè)數(shù)、當(dāng)前頁(yè)起始索引、數(shù)據(jù)轉(zhuǎn)換等。這些代碼可以根據(jù)每頁(yè)顯示的數(shù)據(jù)數(shù)量、總數(shù)據(jù)量和當(dāng)前頁(yè)碼等來(lái)計(jì)算所需的數(shù)據(jù)范圍,并在數(shù)據(jù)庫(kù)查詢中使用相應(yīng)的參數(shù)。
4. 控制器和路由:在Java Web應(yīng)用中,控制器和路由負(fù)責(zé)處理用戶的請(qǐng)求,并將相應(yīng)的數(shù)據(jù)傳遞給前端頁(yè)面。在通用分頁(yè)中,控制器會(huì)接收用戶請(qǐng)求的頁(yè)碼等參數(shù),并將相應(yīng)頁(yè)的數(shù)據(jù)查詢結(jié)果傳遞給頁(yè)面展示部分進(jìn)行渲染。
總體而言,Java通用分頁(yè)是通過(guò)數(shù)據(jù)庫(kù)查詢、分頁(yè)邏輯、頁(yè)面展示和控制器等組件配合工作,實(shí)現(xiàn)在Java Web應(yīng)用中對(duì)大量數(shù)據(jù)進(jìn)行分頁(yè)顯示的一種功能。它可以提升用戶體驗(yàn)、優(yōu)化數(shù)據(jù)加載性能,并方便用戶瀏覽和導(dǎo)航大數(shù)據(jù)集。
通用分頁(yè)通常會(huì)包括如下元素:
- 1. 頁(yè)面切換按鈕或鏈接:用于在不同頁(yè)面之間切換。
- 2. 當(dāng)前頁(yè)碼信息:顯示當(dāng)前所在的頁(yè)面。
- 3. 總頁(yè)面數(shù)信息:顯示內(nèi)容總共被分成了多少頁(yè)。
- 4. 上一頁(yè)和下一頁(yè)按鈕或鏈接:用于直接跳轉(zhuǎn)到上一頁(yè)或下一頁(yè)。
- 5. 條目計(jì)數(shù)信息:顯示當(dāng)前頁(yè)面的內(nèi)容數(shù)量。
2.通用分頁(yè)的作用
Java通用分頁(yè)在Java Web應(yīng)用中具有以下幾個(gè)作用:
- 1. 改善用戶體驗(yàn):通用分頁(yè)可以將大量數(shù)據(jù)分頁(yè)展示,避免一次性加載大量數(shù)據(jù)導(dǎo)致頁(yè)面加載過(guò)慢的問(wèn)題。通過(guò)分頁(yè)顯示,用戶可以更快速地獲取所需信息,提升用戶體驗(yàn)。
- 2. 優(yōu)化數(shù)據(jù)加載性能:通過(guò)分頁(yè)查詢,Java通用分頁(yè)可以減少每次數(shù)據(jù)查詢返回的數(shù)據(jù)量,減輕服務(wù)器的負(fù)載壓力,降低數(shù)據(jù)庫(kù)查詢的開(kāi)銷,提高數(shù)據(jù)檢索的效率和性能。
- 3. 方便數(shù)據(jù)導(dǎo)航和瀏覽:Java通用分頁(yè)提供了方便的導(dǎo)航和瀏覽功能,用戶可以通過(guò)頁(yè)碼導(dǎo)航、上一頁(yè)和下一頁(yè)按鈕等進(jìn)行頁(yè)面切換,快速瀏覽各個(gè)分頁(yè)的數(shù)據(jù)內(nèi)容。
- 4. 防止數(shù)據(jù)溢出:當(dāng)需要展示的數(shù)據(jù)量非常大時(shí),如果不使用分頁(yè),可能會(huì)導(dǎo)致內(nèi)存溢出或網(wǎng)絡(luò)傳輸超時(shí)等問(wèn)題。通過(guò)使用Java通用分頁(yè),將數(shù)據(jù)分批加載和展示,可以避免這種情況的發(fā)生。
- 5. 支持可配置性:Java通用分頁(yè)通常提供了一些可配置的參數(shù),如每頁(yè)顯示的數(shù)據(jù)數(shù)量、排序規(guī)則等,允許用戶根據(jù)需求進(jìn)行個(gè)性化配置,滿足不同用戶對(duì)分頁(yè)展示的需求。
總之,Java通用分頁(yè)在Java Web應(yīng)用中起到提升用戶體驗(yàn)、優(yōu)化數(shù)據(jù)加載性能、支持?jǐn)?shù)據(jù)導(dǎo)航和瀏覽等作用。它使得展示大量數(shù)據(jù)更加高效、靈活,并能夠滿足用戶對(duì)數(shù)據(jù)展示的需求。
3. 通用分頁(yè)的優(yōu)缺點(diǎn)
Java通用分頁(yè)的優(yōu)點(diǎn):
- 1. 提高用戶體驗(yàn):通用分頁(yè)可以將大量數(shù)據(jù)劃分為多個(gè)頁(yè)面,避免加載過(guò)長(zhǎng)的頁(yè)面,提高頁(yè)面加載速度,讓用戶能夠快速瀏覽和查找所需內(nèi)容,提升用戶體驗(yàn)。
- 2. 優(yōu)化性能:通過(guò)分頁(yè)查詢,可以減少一次性加載大量數(shù)據(jù)的開(kāi)銷,節(jié)省內(nèi)存和網(wǎng)絡(luò)資源,提高數(shù)據(jù)查詢和展示性能,減輕服務(wù)器壓力。
- 3. 方便導(dǎo)航和瀏覽:通用分頁(yè)提供了直觀的導(dǎo)航和瀏覽方式,用戶可以通過(guò)上一頁(yè)和下一頁(yè)按鈕或頁(yè)碼導(dǎo)航快速切換頁(yè)面,瀏覽不同頁(yè)的內(nèi)容,方便數(shù)據(jù)的導(dǎo)航和查找。
- 4. 可配置性強(qiáng):通用分頁(yè)通常支持配置每頁(yè)顯示的數(shù)據(jù)量、排序規(guī)則等參數(shù),可以根據(jù)具體需求進(jìn)行個(gè)性化配置,滿足不同用戶的需求。
- 5. 可復(fù)用性高:Java通用分頁(yè)的實(shí)現(xiàn)一般是基于模塊化和可擴(kuò)展的原則,通過(guò)封裝和抽象,可以將通用分頁(yè)的功能模塊復(fù)用于不同的應(yīng)用場(chǎng)景。
Java通用分頁(yè)的缺點(diǎn):
- 1. 數(shù)據(jù)一致性:當(dāng)數(shù)據(jù)在分頁(yè)過(guò)程中發(fā)生變化時(shí),例如新增或刪除了一部分?jǐn)?shù)據(jù),會(huì)導(dǎo)致分頁(yè)結(jié)果的數(shù)據(jù)不一致性,需要注意及時(shí)更新分頁(yè)數(shù)據(jù)以保持一致性。
- 2. 數(shù)據(jù)查詢效率:在某些場(chǎng)景下,特別是在數(shù)據(jù)量非常大的情況下,分頁(yè)查詢可能會(huì)對(duì)數(shù)據(jù)庫(kù)性能產(chǎn)生較大的影響,因?yàn)槊看尾樵冎环祷夭糠謹(jǐn)?shù)據(jù),可能需要多次查詢才能得到完整的結(jié)果。
- 3. 分頁(yè)參數(shù)管理:在應(yīng)用中需要合理管理分頁(yè)的參數(shù),特別是上一頁(yè)、下一頁(yè)的狀態(tài)和頁(yè)碼等信息,這需要一定的編碼和邏輯控制,否則可能導(dǎo)致分頁(yè)顯示混亂或錯(cuò)誤。
需要根據(jù)具體應(yīng)用場(chǎng)景和需求綜合考慮這些優(yōu)缺點(diǎn),并選擇合適的實(shí)現(xiàn)方式以達(dá)到最佳的效果和用戶體驗(yàn)。
4.通用分頁(yè)的核心思想
Java通用分頁(yè)的核心思想是將大量數(shù)據(jù)進(jìn)行分割,每次只返回部分?jǐn)?shù)據(jù),以便更好地展示和處理數(shù)據(jù)。
其主要的核心思想包括:
- 1. 數(shù)據(jù)切片:將大量數(shù)據(jù)劃分為多個(gè)較小的數(shù)據(jù)塊或頁(yè),每頁(yè)包含固定數(shù)量的數(shù)據(jù)。這樣可以減少一次性加載所有數(shù)據(jù)的壓力,提高數(shù)據(jù)的檢索和加載性能。
- 2. 分頁(yè)參數(shù):定義和管理分頁(yè)的參數(shù),例如當(dāng)前頁(yè)碼、每頁(yè)顯示的數(shù)據(jù)量等。通過(guò)這些參數(shù),可以精確控制要返回的數(shù)據(jù)范圍。
- 3. 數(shù)據(jù)導(dǎo)航:提供導(dǎo)航和切換不同頁(yè)的功能,讓用戶能夠方便地瀏覽和導(dǎo)航數(shù)據(jù)。通常會(huì)包括上一頁(yè)和下一頁(yè)按鈕、頁(yè)碼導(dǎo)航等控件,用于切換不同頁(yè)的數(shù)據(jù)。
- 4. 數(shù)據(jù)查詢和過(guò)濾:根據(jù)分頁(yè)參數(shù),對(duì)數(shù)據(jù)進(jìn)行查詢和篩選,只返回當(dāng)前頁(yè)的數(shù)據(jù)。這可以通過(guò)數(shù)據(jù)庫(kù)查詢語(yǔ)句的limit和offset等關(guān)鍵字來(lái)實(shí)現(xiàn),限制返回的數(shù)據(jù)量和數(shù)據(jù)起始位置。
- 5. 數(shù)據(jù)展示和渲染:將查詢到的分頁(yè)數(shù)據(jù)進(jìn)行呈現(xiàn)和展示,可以使用Java的模板引擎或前端框架來(lái)實(shí)現(xiàn)數(shù)據(jù)的渲染和展示。
通過(guò)這些核心思想,Java通用分頁(yè)可以更好地控制數(shù)據(jù)的加載和展示,提高用戶體驗(yàn)和數(shù)據(jù)處理的效率。它允許大數(shù)據(jù)集的分頁(yè)展示,并提供了靈活的導(dǎo)航和配置選項(xiàng),滿足不同用戶對(duì)數(shù)據(jù)瀏覽需求的需求。
5.通用分頁(yè)實(shí)例
書籍實(shí)體類:
package com.liao.enity;
public class Book {
private int bid;
private String bname;
private float price;
@Override
public String toString() {
return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
}
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}封裝pageBean類:
package com.liao.utils;
/**
* 分頁(yè)工具類
*
*/
public class PageBean {
private int page = 1;// 頁(yè)碼
private int rows = 10;// 頁(yè)大小
private int total = 0;// 總記錄數(shù)
private boolean pagination = true;// 是否分頁(yè)
public PageBean() {
super();
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public void setTotal(String total) {
this.total = Integer.parseInt(total);
}
public boolean isPagination() {
return pagination;
}
public void setPagination(boolean pagination) {
this.pagination = pagination;
}
/**
* 獲得起始記錄的下標(biāo)
*
* @return
*/
public int getStartIndex() {
return (this.page - 1) * this.rows;
}
@Override
public String toString() {
return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
}
}書籍“分頁(yè)模糊查詢所有”方法
package com.liao.Dao;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.liao.enity.Book;
import com.liao.utils.DBAccess;
import com.liao.utils.PageBean;
import com.liao.utils.StringUtils;
/**
* 傳統(tǒng)dao方法
* 重復(fù)代碼:
* Connection conn = DBAccess.getConnection();
* CallableStatement ps = conn.prepareCall(sql);
ResultSet rs = ps.executeQuery();
*
* 流程重復(fù):
* 1.需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類對(duì)象
* 2.將查詢出來(lái)的結(jié)果集添加到實(shí)例化對(duì)象屬性中
* 3.已經(jīng)被填充的實(shí)體對(duì)象,加入集合中
* while(rs.next()) {
Book b = new Book();
b.setBid(rs.getInt("bid"));
b.setBname(rs.getString("bname"));
b.setPrice(rs.getFloat("price"));
list.add(b);
}
*
*
*
* @author Administrator
*
*/
public class BookDao extends BaseDoa<Book>{
/**
* 查詢Dao方法 優(yōu)化前
* @param book
* @param pagebean
* @return
* @throws Exception
*/
public List<Book> list1(Book book,PageBean pagebean) throws Exception{
List<Book> list = new ArrayList<Book>();
//獲取連接
Connection conn = DBAccess.getConnection();
//查詢sql語(yǔ)句
String sql ="select * from t_mvc_book where 1=1 ";
String bname = book.getBname();
if(StringUtils.isNotBlank(bname)) {
sql += "and bname like '%"+bname+"%'";
}
CallableStatement ps = conn.prepareCall(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
Book b = new Book();
b.setBid(rs.getInt("bid"));
b.setBname(rs.getString("bname"));
b.setPrice(rs.getFloat("price"));
list.add(b);
}
return list;
}
/**
* 優(yōu)化后
* @param book
* @param pagebean
* @return
* @throws Exception
*/
public List<Book> list2(Book book,PageBean pagebean) throws Exception{
//查詢sql語(yǔ)句
String sql ="select * from t_mvc_book where 1=1 ";
String bname = book.getBname();
if(StringUtils.isNotBlank(bname)) {
sql += "and bname like '%"+bname+"%'";
}
return super.executeQuery(sql, Book.class, pagebean);
}
public static void main(String[] args) throws Exception {
BookDao bookDao = new BookDao();
Book book = new Book();
book.setBname("圣墟");
PageBean pagebean = new PageBean();
List<Book> list = bookDao.list2(book, pagebean);
//查詢第二頁(yè)
pagebean.setPage(2);
for (Book b : list) {
System.out.println(b);
}
// bookDao.list2(book, pagebean);
// 查詢總記錄數(shù)
System.out.println(pagebean);
}
}封裝baseDao通用分頁(yè)模糊查詢的方法
package com.liao.Dao;
import java.lang.reflect.Field;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.liao.enity.Book;
import com.liao.utils.DBAccess;
import com.liao.utils.PageBean;
import com.liao.utils.StringUtils;
/**
*/
public class BaseDoa<T> {
/**
* 通用Dao 利用反射機(jī)制
* @param sql
* @param cls
* @param pagebean
* @return
* @throws Exception
*/
public List<T> executeQuery(String sql,Class cls,PageBean pagebean) throws Exception{
List<T> list = new ArrayList<T>();
Connection conn = null;
CallableStatement ps = null;
ResultSet rs = null;
// select * from t_mvc_book where bname LIKE '%圣墟%'
// SELECT count(1) as n from (SELECT * FROM t_mvc_book WHERE bname LIKE '%圣墟%') t
// select * from t_mvc_book where bname LIKE '%圣墟%' LIMIT 0,10
if(pagebean !=null && pagebean.isPagination()) {
String countSQL = getcount(sql);
conn = DBAccess.getConnection();
ps = conn.prepareCall(countSQL);
rs = ps.executeQuery();
if(rs.next()){
pagebean.setTotal(rs.getObject("n").toString());
}
String pageSQL = getpage(sql,pagebean);
conn = DBAccess.getConnection();
ps = conn.prepareCall(pageSQL);
rs = ps.executeQuery();
}else {
conn = DBAccess.getConnection();
ps = conn.prepareCall(sql);
rs = ps.executeQuery();
}
while(rs.next()) {
T t =(T) cls.newInstance();
Field[] fields = cls.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
f.set(t, rs.getObject(f.getName()));
}
list.add(t);
}
return list;
}
/**
* 拼接最終展示數(shù)據(jù)
* @param sql 原生態(tài)sql語(yǔ)句
* @param pagebean
* @return
*/
private String getpage(String sql, PageBean pagebean) {
return sql+"LIMIT "+pagebean.getStartIndex()+","+pagebean.getRows();
}
/**
* 拼接出查詢符合條件的總記錄數(shù)sql
* @param sql
* @return
*/
private String getcount(String sql) {
// TODO Auto-generated method stub
return "SELECT count(1) as n from ("+sql+") t";
}
}運(yùn)行結(jié)果:

使用工具: MySQL數(shù)據(jù)庫(kù),eclipse
6.單元測(cè)試框架JUnit4
JUnit是一個(gè)廣泛使用的Java單元測(cè)試框架,其最新版本為JUnit 5。
JUnit 4提供了一組基于注解的API來(lái)編寫和運(yùn)行單元測(cè)試。以下是JUnit 4的一些主要特點(diǎn)和用法:
- 1. 定義測(cè)試方法:通過(guò)在測(cè)試方法上添加@Test注解,可以將普通的Java方法標(biāo)記為測(cè)試方法,JUnit會(huì)自動(dòng)執(zhí)行這些測(cè)試方法并驗(yàn)證預(yù)期的行為和結(jié)果。
- 2. 設(shè)置測(cè)試前置條件:@Before和@BeforeClass注解用于在每個(gè)測(cè)試方法和測(cè)試類之前執(zhí)行指定的方法,可以用來(lái)初始化測(cè)試環(huán)境或加載測(cè)試數(shù)據(jù)。
- 3. 設(shè)置測(cè)試后置條件:@After和@AfterClass注解用于在每個(gè)測(cè)試方法和測(cè)試類之后執(zhí)行指定的方法,可以用來(lái)清理臨時(shí)數(shù)據(jù)或資源。
- 4. 斷言和驗(yàn)證:JUnit提供了一組斷言方法(如assertEquals、assertTrue、assertFalse等)來(lái)驗(yàn)證實(shí)際結(jié)果與預(yù)期結(jié)果是否一致。如果斷言失敗,測(cè)試將會(huì)被標(biāo)記為失敗。
- 5. 異常測(cè)試:通過(guò)在測(cè)試方法上添加@Test注解,并指定期望拋出的異常類型,可以對(duì)拋出異常的情況進(jìn)行測(cè)試,確保代碼在異常條件下能夠正確處理。
- 6. 參數(shù)化測(cè)試:通過(guò)使用@RunWith(Parameterized.class)注解和@Parameters注解,可以支持參數(shù)化測(cè)試,即對(duì)同一個(gè)測(cè)試方法進(jìn)行多組參數(shù)的測(cè)試。
- 7. 忽略測(cè)試:通過(guò)在測(cè)試方法上添加@Ignore注解,可以標(biāo)記某個(gè)測(cè)試方法為忽略,JUnit將不會(huì)執(zhí)行該測(cè)試方法。
除了以上的功能,JUnit 4還支持測(cè)試套件(@RunWith(Suite.class))、超時(shí)設(shè)置(@Test(timeout = xxx))、測(cè)試規(guī)則(@Rule)等高級(jí)特性,可以進(jìn)行更靈活、高效的單元測(cè)試。
下面是一個(gè)簡(jiǎn)單的JUnit 4測(cè)試類的示例:
import org.junit.Test;
import static org.junit.Assert.*;
public class MyTest {
@Test
public void testAddition() {
int result = 2 + 2;
assertEquals(4, result);
}
}
```在這個(gè)示例中,我們使用@Test注解將方法testAddition標(biāo)記為測(cè)試方法,并使用assertEquals斷言來(lái)驗(yàn)證加法的結(jié)果。
以上是一些JUnit 4的主要特點(diǎn)和用法,JUnit 4是Java開(kāi)發(fā)中非常常用的單元測(cè)試框架,它可以幫助開(kāi)發(fā)者編寫可靠的、自動(dòng)化的測(cè)試代碼來(lái)驗(yàn)證程序的正確性,提高代碼質(zhì)量和可維護(hù)性。
eclipse中使用JUnit4
第一步:選擇并且需要添加JUnit4的項(xiàng)目
操作步驟如下:

第二步:

第三步:

保存并且關(guān)閉即可完成
為什么是JUnit4不是JUnit5?
以下是JUnit 4和JUnit 5的一些主要對(duì)比:
- 編程模型:JUnit 4使用基于注解的編程模型,而JUnit 5引入了基于注解與基于擴(kuò)展模型的組合。JUnit 5引入了新的注解和接口,如@Test、@BeforeAll、@AfterAll 等注解,以及TestInstance.Lifecycle等接口,幫助開(kāi)發(fā)者更靈活地編寫測(cè)試代碼。
- 擴(kuò)展性:JUnit 5提供了更靈活的擴(kuò)展機(jī)制,支持自定義擴(kuò)展,編寫測(cè)試擴(kuò)展可以實(shí)現(xiàn)更強(qiáng)大的測(cè)試功能,如參數(shù)化測(cè)試、條件執(zhí)行等。
- 參數(shù)化測(cè)試:JUnit 4中參數(shù)化測(cè)試是通過(guò)使用特定的庫(kù)來(lái)實(shí)現(xiàn),而JUnit 5內(nèi)置了參數(shù)化測(cè)試的支持,提供了更簡(jiǎn)潔、易讀的語(yǔ)法。JUnit 5的參數(shù)化測(cè)試使用@ParameterizedTest、@ValueSource等注解,更方便地進(jìn)行參數(shù)化測(cè)試。
- 條件執(zhí)行:JUnit 5引入了@EnabledXxx與@DisabledXxx注解,可以根據(jù)條件更靈活地決定是否執(zhí)行某個(gè)測(cè)試方法或整個(gè)測(cè)試類。
- 斷言庫(kù):JUnit 5支持使用不同的斷言庫(kù),不再限定于JUnit 4的斷言方法。JUnit 5內(nèi)置的斷言方法更加靈活、易于使用,并提供了額外的功能,如展示自定義失敗消息、懶加載、對(duì)比器等。
- 兼容性 :JUnit 4和JUnit 5的測(cè)試代碼在語(yǔ)法上是不兼容的。JUnit 5是作為獨(dú)立的框架,并且允許與JUnit 4的測(cè)試代碼共存,但需要使用適配器或運(yùn)行器來(lái)運(yùn)行JUnit 4的測(cè)試。
- 并行執(zhí)行:JUnit 5支持并行執(zhí)行測(cè)試??梢酝ㄟ^(guò)在測(cè)試類上添加@Execution注解來(lái)指定并行執(zhí)行的策略。
總的來(lái)說(shuō),JUnit 5在擴(kuò)展性、參數(shù)化測(cè)試和條件執(zhí)行等方面改進(jìn)了JUnit 4,提供了更多的靈活性和功能。它還提供了更簡(jiǎn)潔、易用的斷言方法和更好的兼容性。無(wú)論使用JUnit 4還是JUnit 5,都能夠有效地進(jìn)行Java單元測(cè)試,具體選擇取決于項(xiàng)目需求和個(gè)人喜好。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot 限制IP訪問(wèn)指定的網(wǎng)址實(shí)現(xiàn)
本文主要介紹了Springboot 限制IP訪問(wèn)指定的網(wǎng)址實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Mybatis Properties 配置優(yōu)先級(jí)詳解
這篇文章主要介紹了Mybatis Properties 配置優(yōu)先級(jí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
解決SpringMVC項(xiàng)目連接RabbitMQ出錯(cuò)的問(wèn)題
這篇文章主要介紹了解決SpringMVC項(xiàng)目連接RabbitMQ出錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
SpringBoot整合SSO(single sign on)單點(diǎn)登錄
這篇文章主要介紹了SpringBoot整合SSO(single sign on)單點(diǎn)登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot實(shí)現(xiàn)返回值數(shù)據(jù)脫敏的步驟詳解
這篇文章主要給大家介紹一下SpringBoot實(shí)現(xiàn)返回值數(shù)據(jù)脫敏的步驟,文章通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
SpringMVC中controller接收json數(shù)據(jù)的方法
這篇文章主要為大家詳細(xì)介紹了SpringMVC中controller接收json數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Springboot+WebSocket實(shí)現(xiàn)在線聊天功能
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。這篇文章主要為大家介紹了如何利用Springboot和WebSocket實(shí)現(xiàn)在線聊天功能,感興趣的小伙伴可以了解一下2023-02-02

