欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)通用分頁(yè)(后端)

 更新時(shí)間:2023年12月05日 16:40:42   作者:Ar.小白  
這篇文章主要介紹了java實(shí)現(xiàn)通用分頁(yè)(后端)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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)

    本文主要介紹了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í)詳解

    這篇文章主要介紹了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)題

    這篇文章主要介紹了解決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)登錄

    這篇文章主要介紹了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ù)脫敏的步驟詳解

    這篇文章主要給大家介紹一下SpringBoot實(shí)現(xiàn)返回值數(shù)據(jù)脫敏的步驟,文章通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java Calendar日歷類原理及使用方法

    Java Calendar日歷類原理及使用方法

    這篇文章主要介紹了Java Calendar日歷類原理及使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringMVC中controller接收json數(shù)據(jù)的方法

    SpringMVC中controller接收json數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了SpringMVC中controller接收json數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Springboot+WebSocket實(shí)現(xiàn)在線聊天功能

    Springboot+WebSocket實(shí)現(xiàn)在線聊天功能

    WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。這篇文章主要為大家介紹了如何利用Springboot和WebSocket實(shí)現(xiàn)在線聊天功能,感興趣的小伙伴可以了解一下
    2023-02-02
  • Spring依賴注入和控制反轉(zhuǎn)詳情

    Spring依賴注入和控制反轉(zhuǎn)詳情

    這篇文章主要介紹了Spring依賴注入和控制反轉(zhuǎn)詳情,控制反轉(zhuǎn)是面向?qū)ο缶幊讨惺褂玫男g(shù)語(yǔ),通過(guò)該術(shù)語(yǔ),對(duì)象或?qū)ο蠹目刂茩?quán)被賦予框架或由框架提供的容器。下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • DragChartPanel可拖拽曲線應(yīng)用詳解

    DragChartPanel可拖拽曲線應(yīng)用詳解

    這篇文章主要為大家詳細(xì)介紹了DragChartPanel可拖拽曲線的應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評(píng)論