MyBatis實現(xiàn)分頁的兩種方式
在 MyBatis 中實現(xiàn)分頁通常有兩種方式:使用數(shù)據(jù)庫廠商提供的分頁查詢語句(如 MySQL 的 LIMIT)或者通過自定義 SQL 來實現(xiàn)分頁邏輯等
MyBatis分頁方式對比
MyBatis提供了多種分頁方式,每種方式都有其特定的應用場景和優(yōu)缺點。以下是對MyBatis中幾種常見分頁方式的對比:
- 基于RowBounds的分頁(邏輯分頁):
○ 原理:執(zhí)行完整的SQL查詢,將結(jié)果集全部加載到內(nèi)存中,然后根據(jù)RowBounds指定的偏移量和限制數(shù)進行分頁處理。
○ 優(yōu)點:減少IO次數(shù),對于頻繁訪問且數(shù)據(jù)量較小的情況較為適合。
○ 缺點:當數(shù)據(jù)量非常大時,容易造成內(nèi)存溢出,性能下降。 - 基于數(shù)據(jù)庫的分頁(物理分頁):
○ 原理:在SQL查詢語句中使用LIMIT和OFFSET關(guān)鍵字來實現(xiàn)分頁,直接在數(shù)據(jù)庫層面進行分頁處理。
○ 優(yōu)點:適用于大數(shù)據(jù)量的情況,避免了內(nèi)存溢出的風險,性能較好。
○ 缺點:需要數(shù)據(jù)庫支持LIMIT和OFFSET語法,不同數(shù)據(jù)庫廠商的語法可能有所不同。 - 基于插件的分頁:
○ 原理:MyBatis提供了插件機制,通過自定義插件來攔截SQL語句的執(zhí)行,并在查詢結(jié)果返回之前添加分頁邏輯。
○ 優(yōu)點:插件封裝了分頁的具體實現(xiàn)細節(jié),使用起來簡單方便,適用于多種分頁需求。
○ 缺點:可能需要一定的開發(fā)成本來編寫和維護插件。 - 數(shù)組分頁:
○ 原理:首先查詢出全部數(shù)據(jù),然后在Java代碼的List中截取需要的部分。
○ 優(yōu)點:實現(xiàn)簡單。
○ 缺點:當數(shù)據(jù)量很大時,會消耗大量內(nèi)存,并可能導致性能問題。
綜上所述,選擇哪種分頁方式取決于具體的應用場景和數(shù)據(jù)量大小。對于小數(shù)據(jù)量或頻繁訪問的場景,邏輯分頁(如RowBounds)可能是一個不錯的選擇。而對于大數(shù)據(jù)量或需要高效分頁的場景,物理分頁(如基于數(shù)據(jù)庫的分頁)或基于插件的分頁可能更為合適。在實際應用中,還需要考慮數(shù)據(jù)庫類型、系統(tǒng)性能、開發(fā)成本等因素來做出決策。
使用數(shù)據(jù)庫廠商提供的分頁查詢語句
許多數(shù)據(jù)庫廠商都提供了用于分頁的特定語法,如 MySQL 的 LIMIT、Oracle 的 ROWNUM、SQL Server 的 OFFSET FETCH 等。你可以直接在 SQL 查詢語句中使用這些語法來實現(xiàn)分頁,然后將分頁參數(shù)傳遞給 MyBatis 的方法即可。
示例(MySQL):
<select id="getUserList" resultType="User">
SELECT * FROM users
LIMIT #{offset}, #{pageSize}
</select>
List<User> getUserList(@Param("offset") int offset, @Param("pageSize") int pageSize);通過自定義 SQL 實現(xiàn)分頁邏輯
如果你使用的數(shù)據(jù)庫不支持特定的分頁語法,或者想要更多靈活性,你可以通過自定義 SQL 實現(xiàn)分頁邏輯。通常,你需要通過 RowBounds 或 PageHelper 來實現(xiàn)分頁。
1. 使用 RowBounds 實現(xiàn)分頁
原理:通過RowBounds實現(xiàn)分頁和通過數(shù)組方式分頁原理差不多,都是一次獲取所有符合條件的數(shù)據(jù),然后在內(nèi)存中對大數(shù)據(jù)進行操作,實現(xiàn)分頁效果。只是數(shù)組分頁需要我們自己去實現(xiàn)分頁邏輯,這里更加簡化而已。
存在問題:一次性從數(shù)據(jù)庫獲取的數(shù)據(jù)可能會很多,對內(nèi)存的消耗很大,可能導師性能變差,甚至引發(fā)內(nèi)存溢出。
適用場景:在數(shù)據(jù)量很大的情況下,建議還是適用攔截器實現(xiàn)分頁效果。RowBounds建議在數(shù)據(jù)量相對較小的情況下使用。
RowBounds分頁是Mybatis提供的一種分頁方式,其原理主要是在執(zhí)行SQL查詢后,將返回的所有結(jié)果集加載到內(nèi)存中,然后在內(nèi)存中根據(jù)指定的偏移量(offset)和限制數(shù)(limit)進行分頁處理。
具體來說,當我們在Mybatis的Mapper接口中調(diào)用查詢方法時,可以傳入一個RowBounds對象作為參數(shù)。這個RowBounds對象包含了分頁所需的信息,比如當前頁碼、每頁顯示的記錄數(shù)等。在執(zhí)行查詢時,Mybatis會首先執(zhí)行完整的SQL查詢語句,獲取到所有滿足條件的結(jié)果集。然后,Mybatis會根據(jù)RowBounds對象中指定的偏移量和限制數(shù),在內(nèi)存中對這些結(jié)果集進行截取,從而得到當前頁需要展示的數(shù)據(jù)。
需要注意的是,RowBounds分頁方式是一種邏輯分頁,即在內(nèi)存中進行分頁處理。當數(shù)據(jù)量非常大時,這種方式可能會導致內(nèi)存溢出的問題。因此,對于大數(shù)據(jù)量的分頁需求,建議使用物理分頁方式,即在SQL查詢語句中添加LIMIT和OFFSET子句,直接在數(shù)據(jù)庫層面進行分頁處理。
此外,Mybatis還提供了另一種分頁插件PageHelper,它使用攔截器的方式實現(xiàn)了物理分頁。PageHelper插件會在Mybatis執(zhí)行SQL查詢之前,自動根據(jù)傳入的分頁參數(shù)改寫SQL語句,添加LIMIT和OFFSET子句,從而實現(xiàn)物理分頁。這種方式可以更有效地處理大數(shù)據(jù)量的分頁需求,避免內(nèi)存溢出的問題。
List getUserList(RowBounds rowBounds);
RowBounds rowBounds = new RowBounds(offset, pageSize);
List users = sqlSession.selectList(“getUserList”, rowBounds);
2. 使用 PageHelper 實現(xiàn)分頁
PageHelper的分頁原理主要基于MyBatis的插件機制。具體來說,PageHelper內(nèi)部實現(xiàn)了一個PageInterceptor攔截器,這個攔截器會在MyBatis執(zhí)行SQL查詢之前進行攔截。
當我們在代碼中調(diào)用PageHelper的startPage方法時,它會在當前線程上下文中設置一個ThreadLocal變量,用于保存分頁的參數(shù),如當前頁碼、每頁顯示的數(shù)量等。
隨后,當MyBatis執(zhí)行SQL查詢時,PageInterceptor攔截器會攔截到這一操作。攔截器會從ThreadLocal中獲取到分頁參數(shù),并根據(jù)這些參數(shù)來改寫原始的SQL語句,添加LIMIT和OFFSET子句,以實現(xiàn)分頁查詢。
改寫后的SQL語句會被發(fā)送到數(shù)據(jù)庫執(zhí)行,數(shù)據(jù)庫返回的結(jié)果集就是根據(jù)分頁參數(shù)查詢得到的結(jié)果。
最后,PageInterceptor攔截器會將ThreadLocal中的分頁參數(shù)清除,避免對后續(xù)操作產(chǎn)生影響。
通過這種方式,PageHelper實現(xiàn)了對MyBatis查詢結(jié)果的分頁處理,而無需修改原有的SQL語句、Mapper接口和XML文件,因此具有無侵入性和易用性。同時,由于分頁操作是在數(shù)據(jù)庫層面進行的,因此也具有較高的性能。
需要注意的是,PageHelper使用了ThreadLocal來保存分頁參數(shù),因此分頁參數(shù)是與線程綁定的,這意味著不同的線程之間不會共享分頁參數(shù),從而保證了分頁的準確性和獨立性。
總的來說,PageHelper通過攔截MyBatis的SQL查詢操作,并在查詢語句中添加LIMIT和OFFSET子句,實現(xiàn)了對查詢結(jié)果的分頁處理,從而簡化了分頁操作的實現(xiàn)過程,提高了開發(fā)效率。
PageHelper 是一個 MyBatis 的分頁插件,可以簡化分頁操作。
首先,在 MyBatis 的配置文件中配置 PageHelper 插件:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
然后,在需要分頁的查詢方法中添加分頁參數(shù):
List<User> getUserList(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.getUserList(pageNum, pageSize);
這兩種方式都可以實現(xiàn)分頁查詢,你可以根據(jù)實際需求選擇合適的方式。數(shù)組分頁
使用數(shù)組進行分頁通常意味著在數(shù)據(jù)庫中獲取所有數(shù)據(jù),然后在應用程序中對數(shù)據(jù)進行分割和展示。這種方法在數(shù)據(jù)量較小且不頻繁變化時比較適用,但在數(shù)據(jù)量較大時可能會影響性能。下面是一個簡單的 Java 代碼示例,演示如何使用數(shù)組進行分頁:
import java.util.ArrayList;
import java.util.List;
public class PaginationWithArrayExample {
// 模擬從數(shù)據(jù)庫中獲取數(shù)據(jù)的方法,返回所有數(shù)據(jù)
public List<String> fetchDataFromDatabase() {
// 這里假設從數(shù)據(jù)庫中獲取了一些數(shù)據(jù),實際情況根據(jù)需求修改
List<String> dataList = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
dataList.add("Data " + i);
}
return dataList;
}
// 根據(jù)頁碼和每頁顯示數(shù)量,從數(shù)據(jù)集中獲取指定頁的數(shù)據(jù)
public List<String> getDataForPage(List<String> dataList, int pageNumber, int pageSize) {
int startIndex = (pageNumber - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, dataList.size());
if (startIndex >= endIndex) {
return new ArrayList<>(); // 如果起始索引大于等于結(jié)束索引,返回空列表
}
return dataList.subList(startIndex, endIndex);
}
// 示例用法
public static void main(String[] args) {
PaginationWithArrayExample example = new PaginationWithArrayExample();
List<String> dataList = example.fetchDataFromDatabase(); // 模擬從數(shù)據(jù)庫中獲取數(shù)據(jù)
int pageNumber = 2; // 第2頁
int pageSize = 10; // 每頁顯示10條數(shù)據(jù)
List<String> pageData = example.getDataForPage(dataList, pageNumber, pageSize);
// 輸出當前頁的數(shù)據(jù)
System.out.println("Page " + pageNumber + " data:");
for (String data : pageData) {
System.out.println(data);
}
}
}在這個示例中,fetchDataFromDatabase 方法模擬從數(shù)據(jù)庫中獲取數(shù)據(jù),返回一個包含了所有數(shù)據(jù)的列表。然后,getDataForPage 方法根據(jù)傳入的頁碼和每頁顯示數(shù)量,從數(shù)據(jù)集中獲取指定頁的數(shù)據(jù),返回一個包含了當前頁數(shù)據(jù)的子列表。在示例的 main 方法中,演示了如何使用這兩個方法來獲取指定頁的數(shù)據(jù),并將其打印輸出。
使用 MyBatis-Plus 進行分頁
MyBatis-Plus進行分頁的原理主要依賴于其內(nèi)置的分頁插件和Page對象。
首先,MyBatis-Plus提供了分頁插件,該插件會在MyBatis執(zhí)行SQL查詢之前進行攔截。當使用MyBatis-Plus進行分頁查詢時,分頁插件會自動識別分頁相關(guān)的參數(shù),并對原始的SQL語句進行改寫,添加LIMIT和OFFSET子句,以實現(xiàn)物理分頁。
其次,MyBatis-Plus中的Page對象用于表示分頁信息。這個對象包含了當前頁碼、每頁記錄數(shù)、總記錄數(shù)等信息。在進行分頁查詢時,可以通過傳遞Page對象給MyBatis-Plus的查詢方法,來告訴MyBatis-Plus需要進行分頁查詢以及分頁的具體參數(shù)。
當MyBatis-Plus執(zhí)行分頁查詢時,它會根據(jù)Page對象中的信息生成對應的分頁SQL語句,并通過數(shù)據(jù)庫執(zhí)行這個語句。數(shù)據(jù)庫會根據(jù)LIMIT和OFFSET子句返回指定范圍的結(jié)果集。
最后,MyBatis-Plus將查詢結(jié)果封裝到Page對象中,并返回給調(diào)用者。這個Page對象不僅包含了實際的查詢結(jié)果列表,還包含了分頁相關(guān)的信息,如總記錄數(shù)、總頁數(shù)等。這使得分頁操作更加方便,同時也提高了代碼的可維護性。
需要注意的是,MyBatis-Plus的分頁實現(xiàn)是基于物理分頁的,即直接在數(shù)據(jù)庫層面進行分頁處理,而不是在內(nèi)存中處理。這種方式在處理大數(shù)據(jù)量時性能較好,避免了內(nèi)存溢出的風險。
總結(jié)來說,MyBatis-Plus進行分頁的原理是通過分頁插件和Page對象來實現(xiàn)物理分頁,通過在SQL語句中添加LIMIT和OFFSET子句來獲取指定范圍的結(jié)果集,并將結(jié)果封裝到Page對象中返回給調(diào)用者。
MyBatis-Plus 是 MyBatis 的增強工具包,提供了很多便捷的功能,其中包括了分頁功能。MyBatis-Plus 的分頁功能可以輕松地實現(xiàn)物理分頁,讓分頁操作變得更加簡單。
首先,你需要在項目中引入 MyBatis-Plus 的依賴。在 Maven 項目中,你可以在 pom.xml 文件中添加如下依賴:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>latest_version</version>
</dependency>接下來,假設你有一個 UserMapper 接口,用于操作用戶信息。你可以在該接口中直接定義分頁查詢的方法,無需額外編寫 XML 映射文件。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
public interface UserMapper extends BaseMapper<User> {
Page<User> selectUserPage(Page<User> page);
}在該方法中,我們使用了 MyBatis-Plus 提供的 Page 類來實現(xiàn)分頁。Page 類繼承自 MyBatis 的 RowBounds 類,它除了包含分頁信息外,還包含了分頁查詢返回的數(shù)據(jù)列表。
然后,你可以在 Service 層中調(diào)用這個方法來進行分頁查詢:
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public Page<User> getUserPage(int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
return userMapper.selectUserPage(page);
}
}在這個示例中,我們創(chuàng)建了一個新的 Page 對象,并傳入了當前頁碼和每頁顯示數(shù)量。然后調(diào)用 selectUserPage 方法進行分頁查詢,并將結(jié)果返回。
最后,在 Controller 層中調(diào)用 Service 方法并將結(jié)果返回給前端即可完成分頁查詢的操作。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public Page<User> getUserPage(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return userService.getUserPage(pageNum, pageSize);
}
}通過 MyBatis-Plus,你可以很方便地實現(xiàn)分頁查詢,而無需編寫繁瑣的 SQL 語句或者額外的 XML 映射文件。
MyBatis物理分頁和邏輯分頁
MyBatis中的物理分頁和邏輯分頁是兩種不同的分頁方式,它們在實現(xiàn)方式和性能上有顯著的區(qū)別。
物理分頁:
物理分頁是在數(shù)據(jù)庫層面上實現(xiàn)的分頁,它依賴于數(shù)據(jù)庫自身提供的分頁功能。在MyBatis中,物理分頁通常是通過在SQL語句中添加LIMIT和OFFSET子句來實現(xiàn)的。這種方式在查詢數(shù)據(jù)庫時,數(shù)據(jù)庫會根據(jù)指定的偏移量和限制數(shù)直接返回分頁后的結(jié)果,而不需要加載全部數(shù)據(jù)到內(nèi)存中。因此,物理分頁在處理大數(shù)據(jù)量時性能較好,避免了內(nèi)存溢出的風險。然而,需要注意的是,不同的數(shù)據(jù)庫可能具有不同的分頁語法,因此在使用物理分頁時需要考慮到數(shù)據(jù)庫方言的問題。
邏輯分頁:
邏輯分頁則是在應用層面上實現(xiàn)的分頁,它依賴于查詢結(jié)果集。邏輯分頁首先會查詢出全部的數(shù)據(jù),然后將這些數(shù)據(jù)加載到內(nèi)存中,再根據(jù)分頁要求篩選出合適的數(shù)據(jù)進行分頁。這種方式在數(shù)據(jù)量較小時可能比較方便,但在處理大數(shù)據(jù)量時,會消耗大量的內(nèi)存,并可能導致性能問題。因此,邏輯分頁通常適用于數(shù)據(jù)量較小或?qū)?shù)據(jù)實時性要求不高的場景。
在實際應用中,選擇物理分頁還是邏輯分頁需要根據(jù)具體的需求和場景來決定。對于大數(shù)據(jù)量或?qū)?shù)據(jù)性能要求較高的場景,建議使用物理分頁以提高性能和避免內(nèi)存溢出。而對于數(shù)據(jù)量較小或?qū)?shù)據(jù)實時性要求不高的場景,可以選擇邏輯分頁以簡化實現(xiàn)過程。
此外,MyBatis還提供了分頁插件如PageHelper來簡化分頁操作的實現(xiàn)。這些插件內(nèi)部實現(xiàn)了物理分頁的邏輯,使得開發(fā)者可以更方便地進行分頁操作,而無需手動編寫復雜的分頁SQL語句。然而,在使用分頁插件時,仍然需要注意插件的性能和兼容性等問題。
MyBatis 手寫一個 攔截器分頁
MyBatis 攔截器可以用于在 SQL 執(zhí)行前后進行一些額外的處理,例如實現(xiàn)分頁功能。下面我會給出一個簡單的示例,包含了 DAO 層和業(yè)務層的代碼。
假設你有一個 UserDao 接口,其中定義了獲取用戶列表的方法:
public interface UserDao {
List<User> getUserList();
}
接下來,我們創(chuàng)建一個攔截器來實現(xiàn)分頁功能:
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import java.util.Properties;
@Intercepts(@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}))
public class PaginationInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object[] args = invocation.getArgs();
MappedStatement mappedStatement = (MappedStatement) args[0];
Object parameter = args[1];
RowBounds rowBounds = (RowBounds) args[2];
// 判斷是否需要進行分頁
if (rowBounds != RowBounds.DEFAULT) {
BoundSql boundSql = mappedStatement.getBoundSql(parameter);
String sql = boundSql.getSql();
// 自己實現(xiàn)分頁邏輯,這里簡單起見,直接拼接 LIMIT
sql += " LIMIT " + rowBounds.getOffset() + ", " + rowBounds.getLimit();
BoundSql newBoundSql = new BoundSql(mappedStatement.getConfiguration(), sql, boundSql.getParameterMappings(), boundSql.getParameterObject());
MappedStatement newMappedStatement = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql));
args[0] = newMappedStatement;
args[2] = RowBounds.DEFAULT;
}
return invocation.proceed();
}
private MappedStatement copyFromMappedStatement(MappedStatement ms, BoundSqlSqlSource newSqlSource) {
MappedStatement.Builder builder = new MappedStatement.Builder(ms.getConfiguration(), ms.getId(), newSqlSource, ms.getSqlCommandType());
builder.resource(ms.getResource());
builder.fetchSize(ms.getFetchSize());
builder.statementType(ms.getStatementType());
builder.keyGenerator(ms.getKeyGenerator());
builder.keyProperty(ms.getKeyProperty());
builder.timeout(ms.getTimeout());
builder.parameterMap(ms.getParameterMap());
builder.resultMaps(ms.getResultMaps());
builder.cache(ms.getCache());
builder.flushCacheRequired(ms.isFlushCacheRequired());
builder.useCache(ms.isUseCache());
return builder.build();
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
// 這里可以接收配置參數(shù),但我們這里不需要配置參數(shù)
}
private static class BoundSqlSqlSource implements org.apache.ibatis.mapping.SqlSource {
private final BoundSql boundSql;
public BoundSqlSqlSource(BoundSql boundSql) {
this.boundSql = boundSql;
}
@Override
public BoundSql getBoundSql(Object parameterObject) {
return boundSql;
}
}
}
然后,在你的 MyBatis 配置文件中配置該攔截器:
<plugins>
<plugin interceptor="your.package.name.PaginationInterceptor"/>
</plugins>
最后,在業(yè)務代碼中使用分頁功能:
import org.apache.ibatis.session.RowBounds;
public class UserService {
private final UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public List<User> getUsersByPage(int pageNum, int pageSize) {
// 計算 offset
int offset = (pageNum - 1) * pageSize;
// 使用 RowBounds 進行分頁
RowBounds rowBounds = new RowBounds(offset, pageSize);
return userDao.getUserList(rowBounds);
}
}這樣,當調(diào)用 getUsersByPage 方法時,會自動進行分頁查詢。
到此這篇關(guān)于MyBatis實現(xiàn)分頁的文章就介紹到這了,更多相關(guān)MyBatis實現(xiàn)分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis的分頁實現(xiàn)方式
- SpringBoot+Mybatis-plus實現(xiàn)分頁查詢的示例代碼
- mybatisplus 多表關(guān)聯(lián)條件分頁查詢的實現(xiàn)
- SpringBoot+MyBatis-Plus實現(xiàn)分頁的項目實踐
- MyBatis-Flex實現(xiàn)分頁查詢的示例代碼
- 使用MyBatis-Plus實現(xiàn)聯(lián)表查詢分頁的示例代碼
- MyBatis-Plus實現(xiàn)對查詢結(jié)果進行分頁的基本步驟
- mybatis-plus分頁查詢的實現(xiàn)實例
- Springboot?Mybatis使用pageHelper如何實現(xiàn)分頁查詢
- SpringBoot中使用MyBatis-Plus實現(xiàn)分頁接口的詳細教程
相關(guān)文章
spring-boot-maven-plugin?配置有啥用
這篇文章主要介紹了spring-boot-maven-plugin?配置是干啥的,這個是SpringBoot的Maven插件,主要用來打包的,通常打包成jar或者war文件,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-08-08
解決mybatis-plus動態(tài)數(shù)據(jù)源切換不生效的問題
本文主要介紹了解決mybatis-plus動態(tài)數(shù)據(jù)源切換不生效的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
JAVA初級項目——實現(xiàn)圖書管理系統(tǒng)
這篇文章主要介紹了JAVA如何實現(xiàn)圖書管理系統(tǒng),文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下2020-06-06
IntelliJ?IDEA?2022.2.3最新激活圖文教程(親測有用永久激活)
今天給大家分享一個?IDEA?2022.2.3?的激活破解教程,全文通過文字+圖片的方式講解,手把手教你如何激活破解?IDEA,?只需要幾分鐘即可搞定,對idea2022.2.3激活碼感興趣的朋友跟隨小編一起看看吧2022-11-11

