探索 MyBatis-Plus

引言

在當今的 Java 開發領域,數據庫操作是一個至關重要的環節。MyBatis 作為一款優秀的持久層框架,已經被廣泛應用。而 MyBatis-Plus 則是在 MyBatis 基礎上進行增強的工具,它簡化了開發流程,提高了開發效率。本文將詳細介紹 MyBatis-Plus 的使用,結合具體的代碼示例,幫助你快速上手。

環境搭建

項目創建

首先,我們使用 Spring Boot 來創建一個基礎項目。這里使用 Maven 作為項目管理工具,在?pom.xml?中添加必要的依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qcby</groupId><artifactId>Mybatis-plus</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.4</version></parent><properties><java.version>1.8</java.version> <!-- 或更高版本 --></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!-- 注解替代 get/set 方法 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

配置數據源

在?application.yml?中配置數據庫連接信息:

spring:# 配置數據源信息datasource:# 配置數據源類型type: com.zaxxer.hikari.HikariDataSource# 配置連接數據庫信息driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_plususername: rootpassword: 123456
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

實體類定義

創建一個?User?實體類,使用 Lombok 注解簡化代碼

package com.qcby.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;@Data
public class User {@TableId(type = IdType.AUTO)private long id;private String name;private Integer age;private String email;
}

Mapper 接口定義

定義一個?UserMapper?接口,繼承?BaseMapper<User>,MyBatis-Plus 會自動為我們提供基本的增刪改查方法:

package com.qcby.mapper;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qcby.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;@Mapper
public interface UserMapper extends BaseMapper<User> {// 插入一條記錄int insert(User user);int deleteById(int id);int deleteById(User entity);int deleteByMap(@Param("columnMap") Map<String, Object> columnMap);int delete(@Param("wrapper") Wrapper<User> queryWrapper);// 刪除(根據 ID 批量刪除)int deleteBatchIds(@Param("collection") Collection<?> idList);// 根據 ID 修改int updateById(@Param("entity") User user);int update(@Param("entity") User user, @Param("wrapper") Wrapper<User> updateWrapper);// 查詢(根據 ID 批量查詢)List<User> selectBatchIds(@Param("collection") Collection<? extends Serializable> idList);// 查詢(根據 columnMap 條件)List<User> selectByMap(@Param("columnMap") Map<String, Object> columnMap);// 根據 entity 條件,查詢一條記錄default User selectOne(@Param("wrapper") Wrapper<User> queryWrapper) {List<User> ts = this.selectList(queryWrapper);if (ts != null && !ts.isEmpty()) {if (ts.size() != 1) {throw new RuntimeException("One record is expected, but the query result is multiple records");}return ts.get(0);}return null;}// 根據 Wrapper 條件,查詢總記錄數Long selectCount(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 entity 條件,查詢全部記錄List<User> selectList(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 Wrapper 條件,查詢全部記錄List<Map<String, Object>> selectMaps(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 Wrapper 條件,查詢全部記錄(只返回第一個字段的值)List<Object> selectObjs(@Param("wrapper") Wrapper<User> queryWrapper);// 根據 entity 條件,查詢全部記錄(并翻頁)<P extends IPage<User>> P selectPage(P page, @Param("wrapper") Wrapper<User> queryWrapper);
}

基本操作示例

插入數據

import com.qcby.entity.User;
import com.qcby.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MybatisPlusTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setAge(18);user.setEmail("test@qcby.com");int insert = userMapper.insert(user);System.out.println("受影響行數:" + insert);System.out.println("id 自動獲取:" + user.getId());}
}

?刪除數據

@Test
public void testDelete() {int delete = userMapper.deleteById(1948707997203062787L);System.out.println(delete);
}

修改數據

@Test
public void testUpdateById() {User user = new User();user.setId(5);user.setName("test");user.setAge(18);user.setEmail("test@qcby.com");int update = userMapper.updateById(user);System.out.println(update);
}

?查詢數據

@Test
public void testSelectList() {userMapper.selectList(null).forEach(System.out::println);
}

分頁查詢

@Test
public void testSelectPage() {// 設置分頁參數,這里查詢第 1 頁,每頁 10 條記錄Page<User> page = new Page<>(1, 10);// 構建查詢條件,這里查詢年齡大于 16 的用戶QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("age", 16);// 調用 selectPage 方法進行分頁查詢IPage<User> userPage = userMapper.selectPage(page, queryWrapper);// 輸出分頁信息System.out.println("當前頁碼: " + userPage.getCurrent());System.out.println("每頁記錄數: " + userPage.getSize());System.out.println("總記錄數: " + userPage.getTotal());System.out.println("總頁數: " + userPage.getPages());// 輸出查詢結果userPage.getRecords().forEach(System.out::println);
}

總結

通過以上的介紹和示例代碼,我們可以看到 MyBatis-Plus 極大地簡化了數據庫操作的開發流程。它提供了豐富的方法和強大的條件構造器,讓我們可以更高效地完成增刪改查操作。無論是小型項目還是大型項目,MyBatis-Plus 都是一個值得選擇的持久層框架。希望本文能幫助你快速掌握 MyBatis-Plus 的使用,在實際開發中發揮出它的優勢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92780.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hive【安裝 01】hive-3.1.2版本安裝配置(含 mysql-connector-java-5.1.47.jar 網盤資源)

我使用的安裝文件是 apache-hive-3.1.2-bin.tar.gz &#xff0c;以下內容均以此版本進行說明。 以下環境測試安裝成功&#xff1a; openEuler 22.03 (LTS-SP1)系統 MySQL-8.0.40 1.前置條件 MySQL數據庫 我安裝的是 mysql-5.7.28 版本的&#xff0c;安裝方法可參考《Linux環境…

璞致 PZSDR-P101:ZYNQ7100+AD9361 架構軟件無線電平臺,重塑寬頻信號處理范式

璞致電子 PZSDR-P101 軟件無線電平臺以 "異構計算 寬頻射頻 工業級可靠性" 為核心設計理念&#xff0c;基于 Xilinx ZYNQ7100 處理器與 ADI AD9361 射頻芯片構建&#xff0c;為工程師提供從 70MHz 到 6GHz 的全頻段信號處理解決方案。無論是頻譜監測、無線通信原型…

【基礎】go基礎學習筆記

基礎及關鍵字if for switch都支持使用隱形聲明&#xff08;:&#xff09;來快速聲明一個變量&#xff0c;無需在上面一行額外聲明&#xff0c;這可以增加代碼簡潔性&#xff0c;但不太符合其他常規語言的寫法&#xff0c;需要習慣一下if for switch都不需要使用&#xff08;&am…

AI驅動的企業知識管理革新

Baklib&#xff1a;人工智能引領的知識管理平臺Baklib 是領先的 AI 驅動知識管理系統&#xff0c;專為企業打造智能化、模塊化的知識共享平臺。功能覆蓋在線幫助中心、內聯網、CMS 網站、客戶支持系統、視頻中心、活動教學平臺和客戶社區&#xff0c;全面提升組織在知識管理、員…

使用 FFmpeg 實現 RTP 音頻傳輸與播放

&#x1f50a; 使用 FFmpeg 實現 RTP 音頻傳輸與播放&#xff08;Ubuntu&#xff09; 在音視頻開發或遠程通信場景中&#xff0c;RTP&#xff08;Real-time Transport Protocol&#xff09; 是一種常用的實時音頻傳輸協議。本文將介紹如何使用 FFmpeg 在 Ubuntu 上實現從一臺主…

Android 導出聯系人為 vCard(.vcf)

有時需要將聯系人數據導出為可共享的標準格式&#xff1a;vCard&#xff08;.vcf&#xff09;格式&#xff0c;可被系統直接導入通訊錄一、導出聯系人為 vCard&#xff08;.vcf&#xff09;? 支持字段我們支持導出的字段包括&#xff1a;姓名個人電話家庭電話工作電話郵箱備注…

大模型-bacth之chunked prefills

一、chunked prefills 1.1 chunked prefills核心思想 ORCA雖然很優秀&#xff0c;但是依然存在兩個問題&#xff1a;GPU利用率不高&#xff0c;流水線依然可能導致氣泡問題。 我們來看sarathi-serve做的一個實驗。左右兩圖分別刻畫了在不同的batch size下&#xff0c;prefil…

multiprocessing模塊使用方法(一)

結合Python代碼示例說明multiprocessing模塊的使用方法、Linux啟動命令、服務部署及真實應用場景&#xff1a;一、multiprocessing基礎用法 Python的multiprocessing模塊通過創建子進程實現并行計算&#xff0c;核心步驟如下&#xff08;引用&#xff09;&#xff1a;創建進程對…

vector如何判斷應該擴容?

std::vector 的擴容機制是 C 容器性能優化的一個核心點。它的判斷標準、行為特征和實現細節如下所示&#xff1a;? 一、vector 的核心結構 std::vector 內部維護三個指針&#xff1a; begin -> 指向數據起始位置 end -> 指向當前已使用的元素末尾&#xff08;size…

ICMP考點

在網絡工程師、運維工程師、安全工程師等崗位的面試中&#xff0c;??ICMP&#xff08;Internet Control Message Protocol&#xff0c;互聯網控制報文協議&#xff09;?? 是高頻必考知識點。ICMP作為IP協議的“輔助協議”&#xff0c;雖然不直接傳輸用戶數據&#xff0c;但…

服務器帶寬具體是指什么意思?

企業在選擇服務器租用或托管服務時&#xff0c;需要根據自身的業務情況來選擇合適的服務器帶寬&#xff0c;以便于能夠讓其業務持續穩定的運行工作&#xff0c;做到及時響應用戶的訪問請求&#xff0c;但是很多用戶對于帶寬一詞沒有過多的概念&#xff0c;本文就來探討一下服務…

CANape之ASAP2 Studio介紹

提到ECU的測量標定工具&#xff0c;很多小伙伴第一個想到的就是CANape。但其實&#xff0c;除了強大的測量標定功能之外&#xff0c;CANape還有很多其他功能。例如&#xff0c;CANape中集成的小工具——ASAP2 Studio&#xff0c;其支持對A2L文件&#xff08;由ASAM組織所定義&a…

【debug日記】MONAI SwinUNETR 目標檢測項目調試總結(AI自動總結)

MONAI SwinUNETR 目標檢測項目調試總結 日期: 2025年7月25日 項目: 使用 MONAI&#xff0c;以預訓練的 SwinUNETR 為骨干網絡&#xff0c;微調 RetinaNet 進行3D肺結節檢測。 本文檔旨在記錄在項目配置、數據處理和模型訓練過程中遇到的一系列問題及其解決方案&#xff0c;作為…

AI同傳領域,字節跳動與科大訊飛激戰進行時

在AI同聲傳譯市場&#xff0c;行業巨頭科大訊飛長期占據主導地位&#xff0c;但新晉玩家字節跳動正以迅猛姿態發起挑戰。7月24日&#xff0c;字節旗下火山引擎正式發布豆包同聲傳譯模型 Seed LiveInterpret 2.0&#xff0c;主打“人類級延遲”和“0樣本聲音復刻”&#xff0c;試…

[C++]string::substr

string substr (size_t pos 0, size_t len npos) const;substr() 主要功能是復制&#xff08;截取更準確&#xff09;子字符串&#xff0c;要求從指定位置 pos 開始&#xff0c;并具有指定的長度 len 。如果沒有指定長度或者超出了源字符串的長度&#xff0c;則子字符串將延續…

KNN算法:從原理到實戰全解析

一 算法介紹 K近鄰&#xff08;K-Nearest Neighbors, KNN&#xff09;是一種基于實例的監督學習算法&#xff0c;適用于分類和回歸任務。其核心思想是通過計算待預測樣本與訓練集中樣本的距離&#xff0c;選取距離最近的K個鄰居&#xff0c;根據這些鄰居的標簽進行投票&#xf…

醫療器械:DFEMA和PFEMA

在醫療器械行業&#xff0c;DFMEA&#xff08;Design FMEA&#xff0c;設計失效模式及影響分析&#xff09;和 PFMEA&#xff08;Process FMEA&#xff0c;過程失效模式及影響分析&#xff09;是核心的風險管理工具&#xff0c;旨在通過系統性識別潛在風險、分析影響并采取預防…

Qt 與 SQLite 嵌入式數據庫開發

Qt 與 SQLite 的結合是開發輕量級、跨平臺嵌入式數據庫應用的理想選擇。SQLite 作為一種零配置、文件型數據庫&#xff0c;無需獨立的服務器進程&#xff0c;非常適合集成到 Qt 應用中。本文將深入探討 Qt 與 SQLite 的嵌入式數據庫開發&#xff0c;包括基礎操作、高級特性、性…

Oracle OMF 非OMF 文件 轉化 不需要重建 file#.incarnation#

不需要重建就要重啟&#xff0c; alter database datafile move 就可以在線 file#.incarnation# 是 incarnation 不是dbid Goal How to convert non OMF files to OMF files with ASM storage Datafiles are not deleted at dropping tablespace if files are non-OMF and …

大型微服務項目:聽書——11 Redisson分布式布隆過濾器+Redisson分布式鎖改造專輯詳情接口

11 Redisson分布式布隆過濾器Redisson分布式鎖改造專輯詳情接口 11.1 緩存穿透解決方案&布隆過濾器 緩存穿透解決方案&#xff1a; 布隆過濾器&#xff1a; 布隆過濾器的使用&#xff1a; 11.2 遠程調用查詢所有的專輯id集合 修改&#xff1a; /*** 查詢所有的專輯…