SpringBoot集成mybatis-plus及分頁實現

前面咱們將了Spring Boot集成Mybatis相關的操做,而在Mybatis-plus則是基於Mybatis進行了更加豐富的基礎功能提供和封裝,好比預置了大量的默認方法以及分頁組件。java

好比其中提供的BaseMapper,用於其餘業務Mapper的集成接口變定義了以下常見的功能的接口:mysql

 

public interface BaseMapper<T> extends Mapper<T> {
/** * 插入一條記錄 * * @param entity 實體對象 */ int insert(T entity);
/** * 根據 ID 刪除 * * @param id 主鍵ID */ int deleteById(Serializable id);
/** * 根據 columnMap 條件,刪除記錄 * * @param columnMap 表字段 map 對象 */ int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/** * 根據 entity 條件,刪除記錄 * * @param wrapper 實體對象封裝操做類(能夠爲 null) */ int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
/** * 刪除(根據ID 批量刪除) * * @param idList 主鍵ID列表(不能爲 null 以及 empty) */ int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/** * 根據 ID 修改 * * @param entity 實體對象 */ int updateById(@Param(Constants.ENTITY) T entity);
/** * 根據 whereEntity 條件,更新記錄 * * @param entity 實體對象 (set 條件值,能夠爲 null) * @param updateWrapper 實體對象封裝操做類(能夠爲 null,裏面的 entity 用於生成 where 語句) */ int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
/** * 根據 ID 查詢 * * @param id 主鍵ID */ T selectById(Serializable id);
/** * 查詢(根據ID 批量查詢) * * @param idList 主鍵ID列表(不能爲 null 以及 empty) */ List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/** * 查詢(根據 columnMap 條件) * * @param columnMap 表字段 map 對象 */ List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/** * 根據 entity 條件,查詢一條記錄 * * @param queryWrapper 實體對象封裝操做類(能夠爲 null) */ T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/** * 根據 Wrapper 條件,查詢總記錄數 * * @param queryWrapper 實體對象封裝操做類(能夠爲 null) */ Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/** * 根據 entity 條件,查詢所有記錄 * * @param queryWrapper 實體對象封裝操做類(能夠爲 null) */ List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/** * 根據 Wrapper 條件,查詢所有記錄 * * @param queryWrapper 實體對象封裝操做類(能夠爲 null) */ List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/** * 根據 Wrapper 條件,查詢所有記錄 * <p>注意: 只返回第一個字段的值</p> * * @param queryWrapper 實體對象封裝操做類(能夠爲 null) */ List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/** * 根據 entity 條件,查詢所有記錄(並翻頁) * * @param page 分頁查詢條件(能夠爲 RowBounds.DEFAULT) * @param queryWrapper 實體對象封裝操做類(能夠爲 null) */ <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/** * 根據 Wrapper 條件,查詢所有記錄(並翻頁) * * @param page 分頁查詢條件 * @param queryWrapper 實體對象封裝操做類 */ <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);}

經過上述預置的接口及實現,咱們能夠節省大量的時間,減小大量重複代碼的編寫,本篇文章就帶你們瞭解一下如何在spring boot中集成mybatis-plus。web

依賴引入

mybatis-plus自己提供了spring boot的starter,注意這裏依舊不是springboot官方提供的。spring

相關核心依賴引入以下:sql

 

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<!-- 引入mybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency></dependencies>

這裏重點是mybatis-plus-boot-starter,其餘的引入依賴與mybatis類似,但沒有引入mybatis對應的starter。數據庫

數據庫配置

在application配置文件中進行數據庫的配置:springboot

 

spring.datasource.url=jdbc:mysql://localhost:3306/spring?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.username=rootspring.datasource.password=genesis_123spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

依舊採用spring的datasource配置。mybatis

開啓Mapper接口掃描

在啓動類上添加@MapperScan來指定Mapper接口對應的包路徑。app

 

@SpringBootApplication@MapperScan("com.secbro.mapper")public class SpringBootMainApplication {
public static void main(String[] args) { SpringApplication.run(SpringBootMainApplication.class, args); }
}

MybatisPlus分頁插件配置

這裏主要演示分頁功能使用,所以須要經過單獨的配置類來配置分頁組件:ide

 

@Configuration@ConditionalOnClass(value = {PaginationInterceptor.class})public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; }}

實體類與Mapper接口

實體類以下,注意若是類名與數據庫表名不一導致用@TableName指定數據庫表名。

 

  •  
@Data@TableName("tb_order")public class Order {
private int id;
private String orderNo;
private int amount;}

Mapper接口定義以下,集成BaseMapper,這樣便擁有了上面展現的BaseMapper的對應方法功能。

 

public interface OrderMapper extends BaseMapper<Order> {
}

此時,不用再寫任何代碼即可以注入OrderMapper,調用一系列默認的增產改查及分頁功能了。

單元測試

這裏以分頁功能的使用爲例來進行單元測試的演示:

  •  
  •  
  •  
  •  
  •  
@Slf4j@SpringBootTestclass OrderMapperTest {
@Resource private OrderMapper orderMapper;
@Test void queryByPage() { //參數一是當前頁,參數二是每頁個數 IPage<Order> orderPage = new Page<>(1, 2); orderPage = orderMapper.selectPage(orderPage, null); List<Order> list = orderPage.getRecords(); for (Order order : list) { System.out.println(order); } }
}

固然,在實踐中OrderMapper是要注入到對應service中進行使用的。

執行單元測試,發現成功查詢數據庫中記錄並打印,分頁功能正常使用。這裏Page有多個構造參數,也會返回各種數據,好比分頁總數,總條數等信息。你們可按照該思路調用對應方法嘗試使用。

相關文章
相關標籤/搜索