news 2026/5/28 14:16:48

图文详解Spring Boot整合MyBatisPlus(附源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图文详解Spring Boot整合MyBatisPlus(附源码)

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

教程概述

本教程以图文形式详细讲解SpringBoot整合MyBatisPlus的流程以及具体步骤及其注意事项。本教材仅为演示案例,请在项目开发过程中将相关信息替换为与实际情况吻合的代码和配置。

数据准备

准备本教程所需的数据库、数据表及其数据。SQL脚本代码如下:

-- 创建数据库DROPDATABASEIFEXISTSmybatisdb;CREATEDATABASEmybatisdb;USEmybatisdb;-- 创建员工表CREATETABLEemployee(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(50),genderVARCHAR(10),departmentVARCHAR(50),positionVARCHAR(50),salaryINT,hire_dateDATE);-- 插入员工数据INSERTINTOemployee(name,gender,department,position,salary,hire_date)VALUES('张三','male','技术部','软件工程师',15000,'2021-03-15'),('李四','male','市场部','市场专员',8000,'2022-07-01'),('王五','female','人力资源部','HR经理',12000,'2020-11-20'),('赵六','male','财务部','会计',9000,'2023-01-10'),('孙七','female','技术部','测试工程师',13000,'2021-08-25'),('周八','male','运营部','运营主管',11000,'2019-05-14'),('吴九','female','市场部','品牌经理',14000,'2022-04-18'),('郑十','male','技术部','架构师',20000,'2018-12-01');-- 查询员工数据SELECT*FROMemployee;

利用Navicat等工具运行以上SQL脚本文件。

创建Spring Boot项目

请创建SpringBoot项目并完成JDK、SDK以及Maven等配置。相关详情请参见 https://blog.csdn.net/lfdfhl/article/details/161308364,在此不再赘述。

项目创建完毕,图示如下:

项目创建完毕后,请添加项目所需依赖;代码如下:

<!-- MySQL Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- Druid Connection Pool --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!-- MyBatis-Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.9</version></dependency><!-- MyBatis-Plus jsqlparser --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-jsqlparser</artifactId><version>3.5.9</version></dependency><!-- PageHelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>2.1.0</version></dependency>

图示如下:

完善Spring Boot 项目结构

在此,提前准备好项目中可能用到的包和相关资源。

创建与Java代码相关的包

首先,请在java包下的com.cn.springbootmybatisplus中创建与Java代码相关的包;常见的有:config、controller、pojo、service、mapper、utils等,请依据项目实际情况创建;图示如下:

注意事项:

Spring Boot项目的启动类SpringBootMyBatisPlusApplication与子包是并行的关系。请勿将SpringBootMyBatisPlusApplication置于任意子包中。

创建与resources代码相关的包

请在resources下以com/cn/springbootmybatisplus/mapper的方式创建com.cn.springbootmybatisplus.mapper包用于存放mapper的映射文件,图示如下:

配置Spring Boot项目

完善项目结构后,对Spring Boot项目进行配置。

配置项目启动类

请在项目启动类SpringBootMyBatisPlusApplication上使用@MapperScan注解扫描mapper接口文件,图示如下:

编写项目配置文件

完善项目配置文件application.properties的编写;代码如下:

# ------------------------------------------------------------------------------ # Application Settings # ------------------------------------------------------------------------------ # Application name spring.application.name=SpringBootMyBatis-Plus # Server port server.port=8080 # ------------------------------------------------------------------------------ # Datasource Settings (Druid connection pool) # ------------------------------------------------------------------------------ # Connection pool type: Druid spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # JDBC driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Database URL spring.datasource.url=jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=UTF-8 # Database username spring.datasource.username=root # Database password spring.datasource.password=root # ------------------------------------------------------------------------------ # MyBatis-Plus Settings # ------------------------------------------------------------------------------ # Mapper XML file locations mybatis-plus.mapper-locations=classpath:com/cn/springbootmybatisplus/mapper/*.xml # Type aliases package (allows using short class names in XML) mybatis-plus.type-aliases-package=com.cn.springbootmybatisplus.pojo # ID generation type: AUTO_INCREMENT mybatis-plus.global-config.db-config.id-type=auto # ------------------------------------------------------------------------------ # PageHelper Settings (for comparison with MyBatis-Plus built-in pagination) # ------------------------------------------------------------------------------ # PageHelper dialect pagehelper.helper-dialect=mysql # Disable reasonable mode to avoid conflicts with MyBatis-Plus pagination pagehelper.reasonable=false # ------------------------------------------------------------------------------ # Logging Settings # ------------------------------------------------------------------------------ # Root log level: INFO logging.level.root=info # Mapper package log level logging.level.com.cn.springbootmybatisplus.mapper=debug

Spring Boot项目开发

完成开发准备工作后,正式进入项目开发。

创建实体类

在pojo中创建员工实体类Employee,并在该实体类中使用如下注解。

  • @TableName:用于在类上指定实体类对应的数据库表名。
  • @TableId(type = IdType.AUTO):用于标记主键字段,AUTO 表示数据表的主键是自增的。
  • @TableField(“hire_date”) :用于在普通字段上指定 Java 属性对应的数据库列名。

实体类Employee代码如下:

packagecom.cn.springbootmybatisplus.pojo;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableField;importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.TableName;importjava.util.Date;@TableName("employee")publicclassEmployee{@TableId(type=IdType.AUTO)privateIntegerid;privateStringname;privateStringgender;privateStringdepartment;privateStringposition;privateIntegersalary;@TableField("hire_date")privateDatehireDate;publicEmployee(){}publicEmployee(Integerid,Stringname,Stringgender,Stringdepartment,Stringposition,Integersalary,DatehireDate){this.id=id;this.name=name;this.gender=gender;this.department=department;this.position=position;this.salary=salary;this.hireDate=hireDate;}publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetGender(){returngender;}publicvoidsetGender(Stringgender){this.gender=gender;}publicStringgetDepartment(){returndepartment;}publicvoidsetDepartment(Stringdepartment){this.department=department;}publicStringgetPosition(){returnposition;}publicvoidsetPosition(Stringposition){this.position=position;}publicIntegergetSalary(){returnsalary;}publicvoidsetSalary(Integersalary){this.salary=salary;}publicDategetHireDate(){returnhireDate;}publicvoidsetHireDate(DatehireDate){this.hireDate=hireDate;}@OverridepublicStringtoString(){return"Employee{"+"id="+id+", name='"+name+'\''+", gender='"+gender+'\''+", department='"+department+'\''+", position='"+position+'\''+", salary="+salary+", hireDate="+hireDate+'}';}}

创建接口文件

在mapper中创建接口文件EmployeeMapper.java。该接口继承自BaseMapper< Employee>;代码如下:

importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.cn.springbootmybatisplus.pojo.Employee;publicinterfaceEmployeeMapperextendsBaseMapper<Employee>{}

创建映射文件

在mapper中创建映射文件EmployeeMapper.xml,代码如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.cn.springbootmybatisplus.mapper.EmployeeMapper"></mapper>

创建Service层接口

在service包下创建Service层接口EmployeeService。该接口继承自 IService< Employee>,核心代码如下:

importcom.baomidou.mybatisplus.extension.service.IService;importcom.cn.springbootmybatisplus.pojo.Employee;publicinterfaceEmployeeServiceextendsIService<Employee>{}

创建Service层接口实现类

在service包下创建子包impl,并在该子包中创建Service层接口实现类EmployeeServiceImpl。该实现类继承自ServiceImpl<EmployeeMapper, Employee>并实现了EmployeeService接口;代码如下:

importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importcom.cn.springbootmybatisplus.mapper.EmployeeMapper;importcom.cn.springbootmybatisplus.pojo.Employee;importcom.cn.springbootmybatisplus.service.EmployeeService;importorg.springframework.stereotype.Service;@ServicepublicclassEmployeeServiceImplextendsServiceImpl<EmployeeMapper,Employee>implementsEmployeeService{}

测试

在测试类SpringBootMyBatisPlusApplicationTests中,注入EmployeeMapper和EmployeeService,并测试其功能;代码如下:

packagecom.cn.springbootmybatisplus;importcom.cn.springbootmybatisplus.mapper.EmployeeMapper;importcom.cn.springbootmybatisplus.pojo.Employee;importcom.cn.springbootmybatisplus.service.EmployeeService;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importjava.util.Date;importjava.util.List;@SpringBootTestclassSpringBootMyBatisPlusApplicationTests{@TestvoidcontextLoads(){}@AutowiredprivateEmployeeMapperemployeeMapper;@AutowiredprivateEmployeeServiceemployeeService;@Testvoidtest_selectById(){Employeeemp=employeeMapper.selectById(1);System.out.println(emp);}@Testvoidtest_selectAll(){List<Employee>list=employeeMapper.selectList(null);list.forEach(System.out::println);}@Testvoidtest_insert(){Employeeemp=newEmployee();emp.setName("新人");emp.setGender("male");emp.setDepartment("测试部");emp.setPosition("实习生");emp.setSalary(6000);emp.setHireDate(newDate());introws=employeeMapper.insert(emp);System.out.println("影响行数:"+rows);// 插入后自动回填数据库生成的IDSystem.out.println("自动生成的 ID:"+emp.getId());// 清理测试数据//employeeMapper.deleteById(emp.getId());}@Testvoidtest_updateById(){// 先查询原始数据Employeeemp=employeeMapper.selectById(1);System.out.println("更新前:"+emp);// 仅修改名字Employeeupdate=newEmployee();update.setId(1);update.setName("张壮");introws=employeeMapper.updateById(update);System.out.println("影响行数:"+rows);// 重新查询,验证更新结果Employeeupdated=employeeMapper.selectById(1);System.out.println("更新后:"+updated);}@Testvoidtest_deleteById(){introws=employeeMapper.deleteById(1);System.out.println("影响行数:"+rows);}@Testvoidtest_service(){// 查询全部List<Employee>all=employeeService.list();System.out.println("全部员工:"+all.size()+" 条");// 按 ID 查询Employeeemp=employeeService.getById(1);System.out.println("ID=1 的员工:"+emp);// 插入EmployeenewEmp=newEmployee();newEmp.setName("Service测试");newEmp.setGender("female");newEmp.setDepartment("服务部");newEmp.setPosition("客服");newEmp.setSalary(7000);newEmp.setHireDate(newDate());booleansaved=employeeService.save(newEmp);System.out.println("插入成功:"+saved+",生成的 ID:"+newEmp.getId());// 更新newEmp.setName("Service更新");booleanupdated=employeeService.updateById(newEmp);System.out.println("更新成功:"+updated);// 删除booleanremoved=employeeService.removeById(newEmp.getId());System.out.println("删除成功:"+removed);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 14:15:13

QuickRecorder:3分钟解决macOS录屏难题的轻量级神器

QuickRecorder&#xff1a;3分钟解决macOS录屏难题的轻量级神器 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode.com/GitHub_Trend…

作者头像 李华
网站建设 2026/5/28 14:11:38

Labelme 3.16.7 保姆级安装与避坑指南:为什么我推荐这个特定版本?

Labelme 3.16.7 深度安装指南&#xff1a;为什么这个版本值得你选择&#xff1f;在计算机视觉和图像标注领域&#xff0c;Labelme一直以其简洁高效的特性受到开发者和研究人员的青睐。然而&#xff0c;许多新手在初次接触这个工具时&#xff0c;往往会在安装环节遇到各种意想不…

作者头像 李华
网站建设 2026/5/28 14:08:02

跨越平台壁垒:Electron音乐软件的云原生部署新范式

跨越平台壁垒&#xff1a;Electron音乐软件的云原生部署新范式 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 引言&#xff1a;传统部署的困境与容器化破局 你是否曾为在不同操…

作者头像 李华
网站建设 2026/5/28 14:04:05

正版复刻 1.03H,《剑与翼奇迹》手游重铸黄金奇迹时代

《剑与翼》又名《剑与翼-奇迹MU》是由英杰互娱官网上线正版手游&#xff0c;由英杰互娱官网负责后续游戏资讯、攻略、礼包发放。游戏高度还原端游体验&#xff0c;凭借公平的运营模式与经典玩法&#xff0c;深受怀旧玩家喜爱&#xff0c;曾登上 18183、英杰互娱、好游快爆、Tap…

作者头像 李华