当前位置: 代码网 > it编程>编程语言>Java > MyBatis-Plus 实现单表 CRUD的示例代码

MyBatis-Plus 实现单表 CRUD的示例代码

2026年04月02日 Java 我要评论
一、mybatis-plus 核心认知1.1 什么是 mybatis-plusmybatis-plus(简称 mp)是国内「苞米豆」团队开发的 mybatis 增强工具,核心理念是只做增强、不做改变:

一、mybatis-plus 核心认知

1.1 什么是 mybatis-plus

mybatis-plus(简称 mp)是国内「苞米豆」团队开发的 mybatis 增强工具,核心理念是只做增强、不做改变

  • 基于 mybatis 扩展,引入后不影响原有 mybatis 代码逻辑;
  • 专注解决单表 crud 重复编码问题,无需手写 xml / 注解 sql,大幅提升开发效率。

1.2 核心特性(对比原生 mybatis 优势)

特性说明
无侵入性完全兼容 mybatis,无需修改现有工程代码
通用 crud 封装内置 basemapper/iservice,继承即拥有全量单表 crud 方法
主键自动生成支持自增、雪花算法、uuid 等 4+ 主键策略,解决分布式 id 问题
lambda 条件构造用 lambda 写查询条件,避免硬编码字段名导致的错误
丰富内置功能物理分页、性能分析、逻辑删除、乐观锁、代码生成器等
多数据库兼容支持 mysql/oracle/sqlserver 及达梦、人大金仓等国产数据库

1.3 适用场景与多表处理

  • 核心场景:单表 crud(开发中 80% 以上的数据库操作场景);
  • 多表处理方案
    1. 沿用 mybatis 方式:编写 xml 文件实现关联查询;
    2. service 层组装:通过多次单表条件查询,手动拼接关联数据。

二、快速集成 mp(spring boot + mysql)

前置条件

  1. jdk 8+、idea/eclipse、maven;
  2. 熟悉 spring boot 基础配置;
  3. 本地安装 mysql 并创建测试数据库(如 boot)。

步骤 1:创建数据库与测试表

-- 删除原有表(避免冲突)
drop table if exists user;
-- 创建 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)
);
-- 插入测试数据
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)

⚠️ 注意:不要同时导入 mybatis 和 mp 依赖,避免版本冲突!

<!-- mysql 驱动(适配 mysql 8+) -->
<dependency>
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-j</artifactid>
</dependency>
<!-- lombok:简化实体类(省去 get/set/构造方法) -->
<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:配置数据库连接(application.properties)

# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.driver
    # 注意修改数据库名(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(与数据库表映射)

使用 lombok 注解简化代码,字段与数据库列一一对应:

import lombok.allargsconstructor;
import lombok.data;
import lombok.noargsconstructor;
/**
 * 用户实体类
 * 对应数据库 user 表
 */
@data // 自动生成 get/set/tostring/hashcode/equals 方法
@allargsconstructor // 全参构造方法
@noargsconstructor  // 无参构造方法
public class user {
    private long id;      // 主键id(对应数据库 id 字段)
    private string name;  // 姓名(对应数据库 name 字段)
    private integer age;  // 年龄(对应数据库 age 字段)
    private string email; // 邮箱(对应数据库 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 // 标识为 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 直接调用内置方法:

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 基础 crud 测试
 */
@springboottest // 标识为 spring boot 测试类
public class mpbasictest {
    // 自动注入 usermapper(spring 容器管理)
    @autowired
    private usermapper usermapper;
    /**
     * 测试:查询所有用户
     * selectlist(null):null 表示无查询条件,查询全表
     */
    @test
    public void testselectall() {
        list<user> userlist = usermapper.selectlist(null);
        // 遍历输出所有用户
        userlist.foreach(system.out::println);
    }
}

执行结果

控制台输出数据库中 5 条用户数据,同时打印 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)

三、解决实体类与数据库表 / 字段不一致问题

实际开发中,实体类名 / 字段名常与数据库表名 / 列名不一致,通过 mp 注解快速解决:

3.1 表名不一致:@tablename

作用:指定实体类对应的数据库表名。示例:实体类 sysuser 对应数据库表 sys_user

import com.baomidou.mybatisplus.annotation.tablename;
import lombok.data;
@data
@tablename("sys_user") // 显式指定数据库表名
public class sysuser {
    private long id;
    private string name;
    private integer age;
    private string email;
}

3.2 字段名不一致:@tablefield

作用:指定实体类字段对应的数据库列名。示例:实体类字段 username 对应数据库列 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 对应列 user_name
    private string username;
    private integer age;
    @tablefield("user_email") // 字段 useremail 对应列 user_email
    private string useremail;
}

四、核心扩展:basemapper 内置常用 crud 方法

方法名功能说明示例
selectlist(wrapper)根据条件查询多条数据selectlist(null) → 查询全表
selectbyid(主键)根据主键查询单条数据selectbyid(1l) → 查询 id=1
insert(实体)新增数据insert(new user(null, "lucy", 22, "lucy@test.com"))
updatebyid(实体)根据主键更新数据updatebyid(new user(1l, "jone", 19, "test1@baomidou.com"))
deletebyid(主键)根据主键删除数据deletebyid(5l) → 删除 id=5
selectcount(wrapper)根据条件统计数量selectcount(null) → 统计全表行数

五、总结

核心要点

  1. mp 定位:mybatis 增强工具,无侵入、专注简化单表 crud,多表操作仍可沿用 mybatis 方式;
  2. 核心简化点:继承 basemapper<t> 即可获得全量单表 crud 方法,无需手写 sql;
  3. 关键配置
    • 日志配置:通过 mybatis-plus.configuration.log-impl 查看自动生成的 sql,方便调试;
    • 映射注解:@tablename 解决表名不一致,@tablefield 解决字段名不一致;
  4. 集成流程:建库建表 → 引入依赖 → 配置数据源 → 编写实体类 / mapper → 测试 crud。

后续进阶方向

  1. 主键生成策略(雪花算法、自增等);
  2. lambda 条件构造器(复杂条件查询);
  3. 分页查询(物理分页,替代 mybatis 分页插件);
  4. 逻辑删除(软删除,保留数据记录);
  5. 通用 service(iservice/serviceimpl,封装更上层的业务逻辑)。

到此这篇关于mybatis-plus 实现单表 crud的示例代码的文章就介绍到这了,更多相关mybatisplus 单表 crud内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com