千家信息网

SpringBoot如何整合MyBatis-Plus

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要为大家展示了"SpringBoot如何整合MyBatis-Plus",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何整合M
千家信息网最后更新 2025年02月01日SpringBoot如何整合MyBatis-Plus

这篇文章主要为大家展示了"SpringBoot如何整合MyBatis-Plus",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何整合MyBatis-Plus"这篇文章吧。

环境

  • JDK 1.8.0 +

  • Maven 3.0 +

  • MySQL 5.6.17

  • SpringBoot 2.0.3

开发工具

  • IntelliJ IDEA

SQL脚本

DROP TABLE IF EXISTS `springboot_mybatis_plus` ;CREATE TABLE `springboot_mybatis_plus` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',  `type` varchar(2) DEFAULT NULL COMMENT '生活用品类别:1. 家电类 2. 厨具',  `name` varchar(50) DEFAULT NULL COMMENT '生活用品名称',  `description` varchar(200) DEFAULT NULL COMMENT '生活用品描述',  PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='springboot整合mybatis-plus测试表'; INSERT INTO springboot_mybatis_plus ( type , name , description )VALUES ('1','电饭煲','用来蒸饭'),('1','电热壶','用来烧水'),       ('1','空调','用来制冷或制热'),('2','菜刀','用来切菜'),       ('2','刨子','用来剥皮'),('2','打蛋器','用来搅拌鸡蛋');

正文

单工程

POM文件(注意)
    4.0.0                 org.springframework.boot        spring-boot-starter-parent        2.0.3.RELEASE             com.zwc    springboot-mybatis-plus-single    0.0.1-SNAPSHOT         springboot-mybatis-plus-single    springboot整合mybatis-plus         jar                         UTF-8                1.8                1.1.9                1.2.47        1.9.9                 3.0-RELEASE        1.3.2        1.1.0                                     org.springframework.boot            spring-boot-starter-web                                     com.alibaba            druid-spring-boot-starter            ${druid.version}                                     com.alibaba            fastjson            ${fastjson.version}                            org.codehaus.jackson            jackson-mapper-asl            ${jackson.mapper.asl.version}                                     org.mybatis.spring.boot            mybatis-spring-boot-starter            ${mybatis-spring-boot-starter.version}                            com.baomidou            mybatis-plus-boot-starter            ${mybatis-plus-boot-starter.version}                            org.mybatis.caches            mybatis-ehcache            ${mybatis.ehcache.version}                                     mysql            mysql-connector-java                                     org.projectlombok            lombok                                     org.springframework.boot            spring-boot-starter-test            test                                                                             src/main/java                                    **/*.xml                                true                                        src/main/resources                                    **/*                                true                                                        org.springframework.boot                spring-boot-maven-plugin                         
  • Maven 项目的核心文件,用来管理项目的依赖

  • 依赖 mybatis-plus-boot-starter 后就把 MyBatis-Plus 整合到 SpringBoot 中了

application.properties(注意)
# 端口server.port=8081 # 数据源 ## 驱动spring.datasource.driver-class-name=com.mysql.jdbc.Driver## url 注意把数据库换成你本地的数据库名称spring.datasource.url=jdbc:mysql://127.0.0.1:3306/base_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false## 用户名 注意把用户名换成你本地的用户名spring.datasource.username=root## 密码 注意把密码换成你本地的密码spring.datasource.password=123456 # mybatis-plusmybatis-plus.mapper-locations=classpath:com/zwc/base/mapper/xml/*.xmlmybatis-plus.type-aliases-package=com.zwc.base.domain# 日志logging.level.com.zwc.base.mapper=debug
  • SpringBoot 会默认读取加载 resources 文件夹下的 application.properties 文件里的配置信息

  • 配置 mybatis-plus:mapper-locations - > mapper 文件的位置;type-aliases-package - > 实体类所在的包

自定义配置(注意)
package com.zwc.base.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; /** * @ClassName MyBatisPlusConfig * @Desc TODO   mybatis-plus 配置 * @Date 2019/3/26 16:00 * @Version 1.0 */@Configurationpublic class MyBatisPlusConfig {     /*     * @ClassName MyBatisPlusConfig     * @Desc TODO   mybatis-plus 配置拦截     * @Date 2019/3/26 18:13     * @Version 1.0     */    @Bean    public PaginationInterceptor paginationInterceptor(){        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();        // 设置方言        paginationInterceptor.setDialectType("mysql");        return paginationInterceptor;    }}
  • @Configuration + @Bean 注解 注入 PaginationInterceptor 类 配置 MyBatis-Plus 分页插件

  • 设置方言为 MySQL 数据库

实体类(注意)

基础实体类,与数据库字段一一对应

package com.zwc.base.domain; import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.extension.activerecord.Model;import lombok.Data;import java.io.Serializable;/** * @ClassName SpringbootMybatisPlus * @Desc TODO   springboot整合mybatis-plus测试表 * @Date 2019/3/26 17:45 * @Version 1.0 */@Datapublic class SpringbootMybatisPlus extends Model {    private static final long serialVersionUID = -7876888313791106541L;    /**     * 自增ID     */    @TableId(value = "id", type = IdType.AUTO)    private Long id;     * 生活用品类别:1. 家电类 2. 厨具    private String type;     * 生活用品名称    private String name;     * 生活用品描述    private String description;    public static final String ID = "id";    public static final String TYPE = "type";    public static final String NAME = "name";    public static final String DESCRIPTION = "description";    @Override    protected Serializable pkVal() {        return this.id;    }}

需继承 MyBatis-Plus 的 Model 类,使用 @TableId 注解标注 id 字段

还有两个扩展实体类:封装请求参数(SpringbootMybatisPlusRequestQueryDTO)以及

封装响应结果(SpringbootMybatisPlusResponseDTO)

这里就不占篇幅了,可以到 GitHub 中获取源码。

Mapper 接口(注意)
package com.zwc.base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.zwc.base.domain.SpringbootMybatisPlus;import com.zwc.base.dto.request.SpringbootMybatisPlusRequestQueryDTO;import com.zwc.base.dto.response.SpringbootMybatisPlusResponseDTO;import org.apache.ibatis.annotations.Param;import java.util.List;/* * @ClassName SpringbootMybatisPlusMapper * @Desc TODO   springboot整合mybatis-plus测试表 mapper 接口 * @Date 2019/3/26 17:52 * @Version 1.0 */public interface SpringbootMybatisPlusMapper extends BaseMapper {    // 分页查询测试表数据    List query(@Param("data") SpringbootMybatisPlusRequestQueryDTO springbootMybatisPlusRequestQueryDTO , Page page);}

需继承 MyBatis-Plus 的 BaseMapper 接口,注意类型是继承过 MyBatis-Plus 的 Model 类的实体类。BaseMapper 定义了很多函数,方便开发使用

Service 服务实现类(注意)
@Servicepublic class SpringbootMybatisPlusServiceImpl extends ServiceImpl implements SpringbootMybatisPlusService {    // 这里只贴出了关键需要注意的代码块    ...}

需继承 MyBatis-Plus 的 ServiceImpl 类,即可调用 baseMapper 中的方法。如果还需调用其他自定义的 Mapper ,就用@Resource 注解注入

Controller 前端控制器(注意)
package com.zwc.base.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.zwc.base.dto.request.SpringbootMybatisPlusRequestQueryDTO;import com.zwc.base.dto.response.SpringbootMybatisPlusResponseDTO;import com.zwc.base.service.SpringbootMybatisPlusService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;/** * @ClassName SpringbootMybatisPlusController * @Desc TODO   springboot整合mybatis-plus测试表 前端控制器 * @Date 2019/3/26 18:14 * @Version 1.0 */@RestController@RequestMapping("smpc")public class SpringbootMybatisPlusController {    @Autowired    private SpringbootMybatisPlusService springbootMybatisPlusService;    /*     * @ClassName SpringbootMybatisPlusController     * @Desc TODO   新增数据     * @Date 2019/3/27 11:40     * @Version 1.0     */    @RequestMapping("/add")    @ResponseBody    public String add(){        return springbootMybatisPlusService.add();    }     * @Desc TODO   删除数据     * @Date 2019/3/27 13:15    @RequestMapping("/delete")    public String delete(){        return springbootMybatisPlusService.delete();     * @Desc TODO   更新数据     * @Date 2019/3/27 13:46    @RequestMapping("/update")    public String update(){        return springbootMybatisPlusService.update();     * @Desc TODO   分页查询测试表数据     * @Date 2019/3/26 18:10    @RequestMapping("/query")    public Page query(@RequestParam(value = "springbootMybatisPlusRequestQueryDTO",required = false) SpringbootMybatisPlusRequestQueryDTO springbootMybatisPlusRequestQueryDTO){        return springbootMybatisPlusService.getDataByPage(springbootMybatisPlusRequestQueryDTO);}

增删改查的方法各有一例

SpringBoot 启动类(注意)
package com.zwc; import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = "com.zwc")@MapperScan("com.zwc.base.mapper")public class SpringbootMybatisPlusSingleApplication {     public static void main(String[] args) {        SpringApplication.run(SpringbootMybatisPlusSingleApplication.class, args);    } }

使用 @MapperScan 注解扫描 Mapper 接口

启用项目,调用接口(注意)
  1. 端口:8081(具体可以根据自己的喜好,在 application.properties 配置文件中配置 server.port)

  2. 新增接口:http://localhost:8081/smpc/add

  3. 删除接口:http://localhost:8081/smpc/delete

  4. 更新接口:http://localhost:8081/smpc/update

  5. 分页查询接口:http://localhost:8081/smpc/query项目结构

以上就是单工程整合 MyBatis-Plus 需要注意的地方,下面说说多工程项目的结构

多工程

为什么要构建多工程?

一般在实际工作中,项目的代码量会很大,而且随着时间的推移,还要不停的追加新的功能,如果开始不注意,全部笼统的写到一个工程中,那样越到后面开发就会越困难。

如何划分模块?

一般开发中会将公共的部分提取出来,比如工具类,系统常量,公共配置等等.. 它们通常叫做 commons 工程;

还有一部分就是带有业务逻辑的工程,里面可能会包含 基础模块,用户模块,订单模块等等...,

它们通常叫做 service工程。

commons 工程 - POM 文件
    4.0.0         com.zwc    springboot-mybatis-plus-commons    0.0.1-SNAPSHOT         springboot-mybatis-plus-commons    公用工程         jar                         UTF-8                1.8                 Cairo-SR3                 1.1.9                1.2.47        1.9.9                 3.0-RELEASE        1.3.2        1.1.0                                         com.alibaba            druid-spring-boot-starter            ${druid.version}                                     mysql            mysql-connector-java                                     com.alibaba            fastjson            ${fastjson.version}                            org.codehaus.jackson            jackson-mapper-asl            ${jackson.mapper.asl.version}                                     org.mybatis.spring.boot            mybatis-spring-boot-starter            ${mybatis-spring-boot-starter.version}                            com.baomidou            mybatis-plus-boot-starter            ${mybatis-plus-boot-starter.version}                            org.mybatis.caches            mybatis-ehcache            ${mybatis.ehcache.version}                                                                                 io.spring.platform                platform-bom                ${platform-bom.version}                pom                import                                                                     org.springframework.boot                spring-boot-maven-plugin                         

配置一些共用依赖,其中包括 mybatis-plus-boot-starter 依赖用来整合

MyBatis-Plus commons 工程 - system.properties
# mybatis-plus## 扫描 mapper 文件mybatis-plus.mapper-locations=classpath*:com/zwc/*/mapper/xml/*.xml## 扫描实体类mybatis-plus.type-aliases-package=com.zwc.*.domain
  • 一些共用配置,不经常修改的,或者是可以统一修改的

  • 这里扫描 Mapper 文件和实体类都用了通配符的方式

  • 比如还可以配置 OSS 的配置信息,Redis 的配置信息,MongoDB 的配置信息等等..

commons 工程 - 自定义配置
package com.zwc.core.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;/** * @ClassName MyBatisPlusConfig * @Desc TODO   mybatis-plus 配置 * @Date 2019/3/26 16:00 * @Version 1.0 */@Configuration@PropertySource("classpath:system.properties")public class MyBatisPlusConfig {    /*     * @ClassName MyBatisPlusConfig     * @Desc TODO   mybatis-plus 配置拦截     * @Date 2019/3/26 18:13     * @Version 1.0     */    @Bean    public PaginationInterceptor paginationInterceptor(){        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();        // 设置方言        paginationInterceptor.setDialectType("mysql");        return paginationInterceptor;    }}

注意这里在注入类的时候,还要加载自定的配置文件,因为 SpringBoot 不会默认加载 system.properties

其他代码就与单工程差不多一致了

commons 工程 - 项目结构

service 工程 - 项目结构

  • 在 service 总工程中创建了一个 base-service 的基础模块

  • 每一个模块中都包含 api 和 core

  • api:主要包含接口,常量以及实体类的扩展类

  • core:带有启动类的工程,此模块的核心代码都在里面

把多工程项目使用 IntelliJ IDEA 打开

  • 把项目从 GitHub 中下载到你的本地

  • 打开 IntelliJ IDEA

  • 点击 File -> Open

  • 打开你下载到本地的项目目录

  • springboot-mybatis-plus -> multi-module -> springboot-mybatis-plus-service(选择打开此工程)

  • 打开 service 工程后

  • 再次点击 File -> Project Structrue

  • 选择 Modules,点击 '+' 符号

  • 点击 Import Module

  • 还是打开你下载到本地的项目目录

  • springboot-mybatis-plus -> multi-module -> springboot-mybatis-plus-commons -> pom.xml

  • 点击 OK

  • 点击 Next,Finish

  • 点击 Apply,OK

以上是"SpringBoot如何整合MyBatis-Plus"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0