版权声明本文原创作者谷哥的小弟作者博客地址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 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.32/version/dependency!-- Druid Connection Pool --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.10/version/dependency!-- MyBatis-Plus --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.9/version/dependency!-- MyBatis-Plus jsqlparser --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-jsqlparser/artifactIdversion3.5.9/version/dependency!-- PageHelper --dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper-spring-boot-starter/artifactIdversion2.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.nameSpringBootMyBatis-Plus # Server port server.port8080 # ------------------------------------------------------------------------------ # Datasource Settings (Druid connection pool) # ------------------------------------------------------------------------------ # Connection pool type: Druid spring.datasource.typecom.alibaba.druid.pool.DruidDataSource # JDBC driver spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver # Database URL spring.datasource.urljdbc:mysql://localhost:3306/mybatisdb?characterEncodingUTF-8 # Database username spring.datasource.usernameroot # Database password spring.datasource.passwordroot # ------------------------------------------------------------------------------ # MyBatis-Plus Settings # ------------------------------------------------------------------------------ # Mapper XML file locations mybatis-plus.mapper-locationsclasspath:com/cn/springbootmybatisplus/mapper/*.xml # Type aliases package (allows using short class names in XML) mybatis-plus.type-aliases-packagecom.cn.springbootmybatisplus.pojo # ID generation type: AUTO_INCREMENT mybatis-plus.global-config.db-config.id-typeauto # ------------------------------------------------------------------------------ # PageHelper Settings (for comparison with MyBatis-Plus built-in pagination) # ------------------------------------------------------------------------------ # PageHelper dialect pagehelper.helper-dialectmysql # Disable reasonable mode to avoid conflicts with MyBatis-Plus pagination pagehelper.reasonablefalse # ------------------------------------------------------------------------------ # Logging Settings # ------------------------------------------------------------------------------ # Root log level: INFO logging.level.rootinfo # Mapper package log level logging.level.com.cn.springbootmybatisplus.mapperdebugSpring 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(typeIdType.AUTO)privateIntegerid;privateStringname;privateStringgender;privateStringdepartment;privateStringposition;privateIntegersalary;TableField(hire_date)privateDatehireDate;publicEmployee(){}publicEmployee(Integerid,Stringname,Stringgender,Stringdepartment,Stringposition,Integersalary,DatehireDate){this.idid;this.namename;this.gendergender;this.departmentdepartment;this.positionposition;this.salarysalary;this.hireDatehireDate;}publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.idid;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicStringgetGender(){returngender;}publicvoidsetGender(Stringgender){this.gendergender;}publicStringgetDepartment(){returndepartment;}publicvoidsetDepartment(Stringdepartment){this.departmentdepartment;}publicStringgetPosition(){returnposition;}publicvoidsetPosition(Stringposition){this.positionposition;}publicIntegergetSalary(){returnsalary;}publicvoidsetSalary(Integersalary){this.salarysalary;}publicDategetHireDate(){returnhireDate;}publicvoidsetHireDate(DatehireDate){this.hireDatehireDate;}OverridepublicStringtoString(){returnEmployee{idid, namename\, gendergender\, departmentdepartment\, positionposition\, salarysalary, hireDatehireDate};}}创建接口文件在mapper中创建接口文件EmployeeMapper.java。该接口继承自BaseMapper Employee代码如下importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.cn.springbootmybatisplus.pojo.Employee;publicinterfaceEmployeeMapperextendsBaseMapperEmployee{}创建映射文件在mapper中创建映射文件EmployeeMapper.xml代码如下?xml version1.0 encodingUTF-8 ?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.cn.springbootmybatisplus.mapper.EmployeeMapper/mapper创建Service层接口在service包下创建Service层接口EmployeeService。该接口继承自 IService Employee核心代码如下importcom.baomidou.mybatisplus.extension.service.IService;importcom.cn.springbootmybatisplus.pojo.Employee;publicinterfaceEmployeeServiceextendsIServiceEmployee{}创建Service层接口实现类在service包下创建子包impl并在该子包中创建Service层接口实现类EmployeeServiceImpl。该实现类继承自ServiceImplEmployeeMapper, 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;ServicepublicclassEmployeeServiceImplextendsServiceImplEmployeeMapper,EmployeeimplementsEmployeeService{}测试在测试类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(){EmployeeempemployeeMapper.selectById(1);System.out.println(emp);}Testvoidtest_selectAll(){ListEmployeelistemployeeMapper.selectList(null);list.forEach(System.out::println);}Testvoidtest_insert(){EmployeeempnewEmployee();emp.setName(新人);emp.setGender(male);emp.setDepartment(测试部);emp.setPosition(实习生);emp.setSalary(6000);emp.setHireDate(newDate());introwsemployeeMapper.insert(emp);System.out.println(影响行数rows);// 插入后自动回填数据库生成的IDSystem.out.println(自动生成的 IDemp.getId());// 清理测试数据//employeeMapper.deleteById(emp.getId());}Testvoidtest_updateById(){// 先查询原始数据EmployeeempemployeeMapper.selectById(1);System.out.println(更新前emp);// 仅修改名字EmployeeupdatenewEmployee();update.setId(1);update.setName(张壮);introwsemployeeMapper.updateById(update);System.out.println(影响行数rows);// 重新查询验证更新结果EmployeeupdatedemployeeMapper.selectById(1);System.out.println(更新后updated);}Testvoidtest_deleteById(){introwsemployeeMapper.deleteById(1);System.out.println(影响行数rows);}Testvoidtest_service(){// 查询全部ListEmployeeallemployeeService.list();System.out.println(全部员工all.size() 条);// 按 ID 查询EmployeeempemployeeService.getById(1);System.out.println(ID1 的员工emp);// 插入EmployeenewEmpnewEmployee();newEmp.setName(Service测试);newEmp.setGender(female);newEmp.setDepartment(服务部);newEmp.setPosition(客服);newEmp.setSalary(7000);newEmp.setHireDate(newDate());booleansavedemployeeService.save(newEmp);System.out.println(插入成功saved生成的 IDnewEmp.getId());// 更新newEmp.setName(Service更新);booleanupdatedemployeeService.updateById(newEmp);System.out.println(更新成功updated);// 删除booleanremovedemployeeService.removeById(newEmp.getId());System.out.println(删除成功removed);}}