版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址: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=debugSpring 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);}}