" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus 實現(xiàn)單表 CRUD的示例代碼

 更新時間:2026年04月02日 09:50:25   作者:小王不愛笑132  
本文主要介紹了MyBatis-Plus 實現(xiàn)單表 CRUD的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、MyBatis-Plus 核心認(rèn)知

1.1 什么是 MyBatis-Plus

MyBatis-Plus(簡稱 MP)是國內(nèi)「苞米豆」團隊開發(fā)的 MyBatis 增強工具,核心理念是只做增強、不做改變

  • 基于 MyBatis 擴展,引入后不影響原有 MyBatis 代碼邏輯;
  • 專注解決單表 CRUD 重復(fù)編碼問題,無需手寫 XML / 注解 SQL,大幅提升開發(fā)效率。

1.2 核心特性(對比原生 MyBatis 優(yōu)勢)

特性說明
無侵入性完全兼容 MyBatis,無需修改現(xiàn)有工程代碼
通用 CRUD 封裝內(nèi)置 BaseMapper/IService,繼承即擁有全量單表 CRUD 方法
主鍵自動生成支持自增、雪花算法、UUID 等 4+ 主鍵策略,解決分布式 ID 問題
Lambda 條件構(gòu)造用 Lambda 寫查詢條件,避免硬編碼字段名導(dǎo)致的錯誤
豐富內(nèi)置功能物理分頁、性能分析、邏輯刪除、樂觀鎖、代碼生成器等
多數(shù)據(jù)庫兼容支持 MySQL/Oracle/SQLServer 及達夢、人大金倉等國產(chǎn)數(shù)據(jù)庫

1.3 適用場景與多表處理

  • 核心場景:單表 CRUD(開發(fā)中 80% 以上的數(shù)據(jù)庫操作場景);
  • 多表處理方案
    1. 沿用 MyBatis 方式:編寫 XML 文件實現(xiàn)關(guān)聯(lián)查詢;
    2. Service 層組裝:通過多次單表條件查詢,手動拼接關(guān)聯(lián)數(shù)據(jù)。

二、快速集成 MP(Spring Boot + MySQL)

前置條件

  1. JDK 8+、IDEA/Eclipse、Maven;
  2. 熟悉 Spring Boot 基礎(chǔ)配置;
  3. 本地安裝 MySQL 并創(chuàng)建測試數(shù)據(jù)庫(如 boot)。

步驟 1:創(chuàng)建數(shù)據(jù)庫與測試表

-- 刪除原有表(避免沖突)
DROP TABLE IF EXISTS user;
-- 創(chuàng)建 user 表
CREATE TABLE user (
    id BIGINT(20) NOT NULL COMMENT '主鍵ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年齡',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
    PRIMARY KEY (id)
);
-- 插入測試數(shù)據(jù)
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

步驟 2:引入核心依賴(pom.xml)

?? 注意:不要同時導(dǎo)入 MyBatis 和 MP 依賴,避免版本沖突!

<!-- MySQL 驅(qū)動(適配 MySQL 8+) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- Lombok:簡化實體類(省去 get/set/構(gòu)造方法) -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!-- MyBatis-Plus 啟動器(核心依賴) -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

步驟 3:配置數(shù)據(jù)庫連接(application.properties)

# 數(shù)據(jù)源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 注意修改數(shù)據(jù)庫名(boot)、用戶名(root)、密碼(root)
    url: jdbc:mysql://localhost:3306/boot?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: root
# 可選:配置 MP 日志(控制臺打印自動生成的 SQL)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

步驟 4:編寫核心代碼(實體類 + Mapper 接口)

4.1 實體類 User(與數(shù)據(jù)庫表映射)

使用 Lombok 注解簡化代碼,字段與數(shù)據(jù)庫列一一對應(yīng):

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * 用戶實體類
 * 對應(yīng)數(shù)據(jù)庫 user 表
 */
@Data // 自動生成 get/set/toString/hashCode/equals 方法
@AllArgsConstructor // 全參構(gòu)造方法
@NoArgsConstructor  // 無參構(gòu)造方法
public class User {
    private Long id;      // 主鍵ID(對應(yīng)數(shù)據(jù)庫 id 字段)
    private String name;  // 姓名(對應(yīng)數(shù)據(jù)庫 name 字段)
    private Integer age;  // 年齡(對應(yīng)數(shù)據(jù)庫 age 字段)
    private String email; // 郵箱(對應(yīng)數(shù)據(jù)庫 email 字段)
}

4.2 Mapper 接口 UserMapper(核心!無需手寫 CRUD 方法)

只需繼承 MP 的 BaseMapper<T> 接口,即可自動獲得全量單表 CRUD 方法:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mp.pojo.User;
import org.apache.ibatis.annotations.Mapper;
/**
 * 用戶 Mapper 接口
 * 繼承 BaseMapper<User> 后,自動擁有單表 CRUD 方法
 */
@Mapper // 標(biāo)識為 MyBatis Mapper 接口(可替換為啟動類的 @MapperScan)
public interface UserMapper extends BaseMapper<User> {
    // 無需編寫任何方法,BaseMapper 已封裝所有單表操作
}

可選:批量掃描 Mapper(替代 @Mapper 注解)

在 Spring Boot 啟動類添加 @MapperScan,指定 Mapper 包路徑,無需每個接口加 @Mapper

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * Spring Boot 啟動類
 */
@MapperScan("com.mp.mapper") // 掃描 com.mp.mapper 包下所有 Mapper 接口
@SpringBootApplication
public class MpDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MpDemoApplication.class, args);
    }
}

步驟 5:測試 MP 的 CRUD 功能

編寫 Spring Boot 測試類,注入 UserMapper 直接調(diào)用內(nèi)置方法:

import com.mp.mapper.UserMapper;
import com.mp.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
 * MP 基礎(chǔ) CRUD 測試
 */
@SpringBootTest // 標(biāo)識為 Spring Boot 測試類
public class MpBasicTest {
    // 自動注入 UserMapper(Spring 容器管理)
    @Autowired
    private UserMapper userMapper;
    /**
     * 測試:查詢所有用戶
     * selectList(null):null 表示無查詢條件,查詢?nèi)?
     */
    @Test
    public void testSelectAll() {
        List<User> userList = userMapper.selectList(null);
        // 遍歷輸出所有用戶
        userList.forEach(System.out::println);
    }
}

執(zhí)行結(jié)果

控制臺輸出數(shù)據(jù)庫中 5 條用戶數(shù)據(jù),同時打印 MP 自動生成的 SQL:

==>  Preparing: SELECT id,name,age,email FROM user
==> Parameters:
<==    Columns: id, name, age, email
<==        Row: 1, Jone, 18, test1@baomidou.com
<==        Row: 2, Jack, 20, test2@baomidou.com
<==        Row: 3, Tom, 28, test3@baomidou.com
<==        Row: 4, Sandy, 21, test4@baomidou.com
<==        Row: 5, Billie, 24, test5@baomidou.com
<==      Total: 5
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

三、解決實體類與數(shù)據(jù)庫表 / 字段不一致問題

實際開發(fā)中,實體類名 / 字段名常與數(shù)據(jù)庫表名 / 列名不一致,通過 MP 注解快速解決:

3.1 表名不一致:@TableName

作用:指定實體類對應(yīng)的數(shù)據(jù)庫表名。示例:實體類 SysUser 對應(yīng)數(shù)據(jù)庫表 sys_user

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("sys_user") // 顯式指定數(shù)據(jù)庫表名
public class SysUser {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

3.2 字段名不一致:@TableField

作用:指定實體類字段對應(yīng)的數(shù)據(jù)庫列名。示例:實體類字段 userName 對應(yīng)數(shù)據(jù)庫列 user_name

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("sys_user")
public class SysUser {
    private Long id;
    @TableField("user_name") // 字段 userName 對應(yīng)列 user_name
    private String userName;
    private Integer age;
    @TableField("user_email") // 字段 userEmail 對應(yīng)列 user_email
    private String userEmail;
}

四、核心擴展:BaseMapper 內(nèi)置常用 CRUD 方法

方法名功能說明示例
selectList(Wrapper)根據(jù)條件查詢多條數(shù)據(jù)selectList(null) → 查詢?nèi)?/td>
selectById(主鍵)根據(jù)主鍵查詢單條數(shù)據(jù)selectById(1L) → 查詢 id=1
insert(實體)新增數(shù)據(jù)insert(new User(null, "Lucy", 22, "lucy@test.com"))
updateById(實體)根據(jù)主鍵更新數(shù)據(jù)updateById(new User(1L, "Jone", 19, "test1@baomidou.com"))
deleteById(主鍵)根據(jù)主鍵刪除數(shù)據(jù)deleteById(5L) → 刪除 id=5
selectCount(Wrapper)根據(jù)條件統(tǒng)計數(shù)量selectCount(null) → 統(tǒng)計全表行數(shù)

五、總結(jié)

核心要點

  1. MP 定位:MyBatis 增強工具,無侵入、專注簡化單表 CRUD,多表操作仍可沿用 MyBatis 方式;
  2. 核心簡化點:繼承 BaseMapper<T> 即可獲得全量單表 CRUD 方法,無需手寫 SQL;
  3. 關(guān)鍵配置
    • 日志配置:通過 mybatis-plus.configuration.log-impl 查看自動生成的 SQL,方便調(diào)試;
    • 映射注解:@TableName 解決表名不一致,@TableField 解決字段名不一致;
  4. 集成流程:建庫建表 → 引入依賴 → 配置數(shù)據(jù)源 → 編寫實體類 / Mapper → 測試 CRUD。

后續(xù)進階方向

  1. 主鍵生成策略(雪花算法、自增等);
  2. Lambda 條件構(gòu)造器(復(fù)雜條件查詢);
  3. 分頁查詢(物理分頁,替代 MyBatis 分頁插件);
  4. 邏輯刪除(軟刪除,保留數(shù)據(jù)記錄);
  5. 通用 Service(IService/ServiceImpl,封裝更上層的業(yè)務(wù)邏輯)。

到此這篇關(guān)于MyBatis-Plus 實現(xiàn)單表 CRUD的示例代碼的文章就介紹到這了,更多相關(guān)MyBatisPlus 單表 CRUD內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java操作PDF文件方法之轉(zhuǎn)換、合成、切分

    java操作PDF文件方法之轉(zhuǎn)換、合成、切分

    最近需要做?個把多個pdf報告合并成?個以?便預(yù)覽的需求,下面這篇文章主要給大家介紹了關(guān)于java操作PDF文件方法之轉(zhuǎn)換、合成、切分的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • java spring整合junit操作(有詳細(xì)的分析過程)

    java spring整合junit操作(有詳細(xì)的分析過程)

    這篇文章主要介紹了java spring整合junit操作(有詳細(xì)的分析過程),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Mybatis攔截器的實現(xiàn)介紹

    Mybatis攔截器的實現(xiàn)介紹

    MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實這是攔截器功能。MyBatis 允許你在已映射語句執(zhí)行過程中的某一點進行攔截調(diào)用。下面通過本文給大家介紹Mybatis攔截器知識,感興趣的朋友一起看看吧
    2016-10-10
  • Spring自動掃描無法掃描jar包中bean的解決方法

    Spring自動掃描無法掃描jar包中bean的解決方法

    在日常開發(fā)中往往會對公共的模塊打包發(fā)布,然后調(diào)用公共包的內(nèi)容。然而,最近對公司的公共模塊進行整理發(fā)布后。spring卻無法掃描到相應(yīng)的bean,下面這篇文章主要給大家介紹了關(guān)于Spring自動掃描時無法掃描jar包中bean的解決方法,需要的朋友可以參考下。
    2017-06-06
  • SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置

    SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置

    這篇文章主要介紹了SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Spring?Security權(quán)限管理小結(jié)

    Spring?Security權(quán)限管理小結(jié)

    SpringSecurity是一個權(quán)限管理框架,核心是認(rèn)證和授權(quán),前面已經(jīng)系統(tǒng)的給大家介紹過了認(rèn)證的實現(xiàn)和源碼分析,本文重點來介紹下權(quán)限管理,需要的朋友可以參考下
    2022-08-08
  • Java詳解ScriptEngine接口動態(tài)執(zhí)行JS腳本

    Java詳解ScriptEngine接口動態(tài)執(zhí)行JS腳本

    ScriptEngine是基本接口,其方法必須在本規(guī)范的每個實現(xiàn)中完全起作用。這些方法提供基本腳本功能。 寫入這個簡單接口的應(yīng)用程序可以在每個實現(xiàn)中進行最少的修改。 它包括執(zhí)行腳本的方法,以及設(shè)置和獲取值的方法
    2022-08-08
  • java 如何將圖片按照原尺寸比例存入word中

    java 如何將圖片按照原尺寸比例存入word中

    這篇文章主要介紹了java 如何將圖片按照原尺寸比例存入word中的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實現(xiàn)簡單的socket通信教程

    Java實現(xiàn)簡單的socket通信教程

    這篇文章主要介紹了Java實現(xiàn)簡單的socket通信教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Jmeter生成UUID作為唯一標(biāo)識符過程圖解

    Jmeter生成UUID作為唯一標(biāo)識符過程圖解

    這篇文章主要介紹了Jmeter生成UUID作為唯一標(biāo)識符過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論

手游| 边坝县| 蕲春县| 迁安市| 安泽县| 武邑县| 昌图县| 专栏| 榆树市| 翼城县| 留坝县| 九龙县| 长葛市| 岳阳县| 龙游县| 滦平县| 信宜市| 襄樊市| 新邵县| 朝阳市| 民勤县| 通江县| 东乌珠穆沁旗| 邵阳县| 彩票| 耒阳市| 朝阳市| 武冈市| 白水县| 义马市| 美姑县| 宜兰市| 康平县| 垦利县| 江北区| 诏安县| 什邡市| 横山县| 襄垣县| 丰镇市| 林甸县|