" />

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

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

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

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

1.1 什么是 MyBatis-Plus

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

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

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

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

1.3 適用場(chǎng)景與多表處理

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

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

前置條件

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

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

-- 刪除原有表(避免沖突)
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)
);
-- 插入測(cè)試數(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)

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

<!-- MySQL 驅(qū)動(dòng)(適配 MySQL 8+) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- Lombok:簡化實(shí)體類(省去 get/set/構(gòu)造方法) -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!-- MyBatis-Plus 啟動(dòng)器(核心依賴) -->
<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 日志(控制臺(tái)打印自動(dòng)生成的 SQL)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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

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

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

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

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

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

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

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

在 Spring Boot 啟動(dòng)類添加 @MapperScan,指定 Mapper 包路徑,無需每個(gè)接口加 @Mapper

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

步驟 5:測(cè)試 MP 的 CRUD 功能

編寫 Spring Boot 測(cè)試類,注入 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 測(cè)試
 */
@SpringBootTest // 標(biāo)識(shí)為 Spring Boot 測(cè)試類
public class MpBasicTest {
    // 自動(dòng)注入 UserMapper(Spring 容器管理)
    @Autowired
    private UserMapper userMapper;
    /**
     * 測(cè)試:查詢所有用戶
     * selectList(null):null 表示無查詢條件,查詢?nèi)?
     */
    @Test
    public void testSelectAll() {
        List<User> userList = userMapper.selectList(null);
        // 遍歷輸出所有用戶
        userList.forEach(System.out::println);
    }
}

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

控制臺(tái)輸出數(shù)據(jù)庫中 5 條用戶數(shù)據(jù),同時(shí)打印 MP 自動(dòng)生成的 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í)體類與數(shù)據(jù)庫表 / 字段不一致問題

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

3.1 表名不一致:@TableName

作用:指定實(shí)體類對(duì)應(yīng)的數(shù)據(jù)庫表名。示例:實(shí)體類 SysUser 對(duì)應(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

作用:指定實(shí)體類字段對(duì)應(yīng)的數(shù)據(jù)庫列名。示例:實(shí)體類字段 userName 對(duì)應(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 對(duì)應(yīng)列 user_name
    private String userName;
    private Integer age;
    @TableField("user_email") // 字段 userEmail 對(duì)應(yīng)列 user_email
    private String userEmail;
}

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

方法名功能說明示例
selectList(Wrapper)根據(jù)條件查詢多條數(shù)據(jù)selectList(null) → 查詢?nèi)?/td>
selectById(主鍵)根據(jù)主鍵查詢單條數(shù)據(jù)selectById(1L) → 查詢 id=1
insert(實(shí)體)新增數(shù)據(jù)insert(new User(null, "Lucy", 22, "lucy@test.com"))
updateById(實(shí)體)根據(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)計(jì)數(shù)量selectCount(null) → 統(tǒng)計(jì)全表行數(shù)

五、總結(jié)

核心要點(diǎn)

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

后續(xù)進(jìn)階方向

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

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

相關(guān)文章

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

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

    最近需要做?個(gè)把多個(gè)pdf報(bào)告合并成?個(gè)以?便預(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ì)的分析過程),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Mybatis攔截器的實(shí)現(xiàn)介紹

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

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

    Spring自動(dòng)掃描無法掃描jar包中bean的解決方法

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

盘锦市| 安顺市| 邵阳市| 彰化县| 湄潭县| 富蕴县| 黑山县| 平潭县| 顺昌县| 宁陵县| 富宁县| 庐江县| 凤台县| 高平市| 嘉善县| 乌兰察布市| 缙云县| 临江市| 巴里| 临西县| 明水县| 南宫市| 稻城县| 广水市| 饶平县| 赣州市| 泰顺县| 梁河县| 通山县| 南投县| 遂平县| 黔西| 抚顺县| 拉孜县| 德惠市| 略阳县| 甘洛县| 巴林左旗| 固始县| 虞城县| 同仁县|