SpringBoot整合MyBatis-Plus的示例代码

目录
  • 前言
  • 源码
  • 环境
  • 开发工具
  •  SQL脚本 
  • 正文
    • 单工程
      • POM文件(注意)
      •  application.properties(注意)
      • 自定义配置(注意)
      • 实体类(注意)
      • Mapper 接口(注意)
      • Service 服务实现类(注意)
      • Controller 前端控制器(注意)
      • SpringBoot 启动类(注意)
      • 启用项目,调用接口(注意)
    • 多工程
      • commons 工程 - POM 文件
      • MyBatis-Plus commons 工程 - system.properties
      • commons 工程 - 自定义配置
      • commons 工程 - 项目结构
      • service 工程 - 项目结构
  • 结语

    前言

      使用 MyBatis-Plus 可以减少大量的开发时间,单表的增删改查可以不用写 sql 语句。

      本博客主要说明整合需要特别注意的地方。

      本博客分别构建了一个单工程项目以及一个多工程项目,主要分析单工程项目的细节。

      如有不正确的地方,欢迎指正。

    源码

      GitHub地址:https://github.com/intomylife/SpringBoot

    环境

    • 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文件(注意)

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
     
        <!-- 继承父 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
        </parent>
     
        <!-- 三坐标 -->
        <groupId>com.zwc</groupId>
        <artifactId>springboot-mybatis-plus-single</artifactId>
        <version>0.0.1-SNAPSHOT</version>
     
        <!-- 工程名称和描述 -->
        <name>springboot-mybatis-plus-single</name>
        <description>springboot整合mybatis-plus</description>
     
        <!-- 打包方式 -->
        <packaging>jar</packaging>
     
        <!-- 在properties下声明相应的版本信息,然后在dependency下引用的时候用${spring-version}就可以引入该版本jar包了 -->
        <properties>
            <!-- 编码 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!-- jdk -->
            <java.version>1.8</java.version>
            <!-- ali 连接池 -->
            <druid.version>1.1.9</druid.version>
            <!-- ali json -->
            <fastjson.version>1.2.47</fastjson.version>
            <jackson.mapper.asl.version>1.9.9</jackson.mapper.asl.version>
     
            <!-- mybatis -->
            <mybatis-plus-boot-starter.version>3.0-RELEASE</mybatis-plus-boot-starter.version>
            <mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
            <mybatis.ehcache.version>1.1.0</mybatis.ehcache.version>
        </properties>
     
        <dependencies>
            <!-- springboot 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
     
            <!-- ali 连接池依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
     
            <!-- ali json依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>${jackson.mapper.asl.version}</version>
            </dependency>
     
            <!-- mybatis 依赖 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.caches</groupId>
                <artifactId>mybatis-ehcache</artifactId>
                <version>${mybatis.ehcache.version}</version>
            </dependency>
     
            <!-- mysql 依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
     
            <!-- 自动生成get,set方法 依赖 -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
     
            <!-- springboot 测试依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
     
        <build>
            <resources>
                <!-- 打包时 maven 默认只打包 src/main/resource 下的资源 -->
                <!-- 这里自定义要打包的资源文件的路径,一般是 Mapper 文件的位置 -->
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
     
    </project>
    • 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-plus
    mybatis-plus.mapper-locations=classpath:com/zwc/base/mapper/xml/*.xml
    mybatis-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
     */
    @Configuration
    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;
        }
    }
    • @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
     */
    @Data
    public class SpringbootMybatisPlus extends Model<SpringbootMybatisPlus> {
        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<SpringbootMybatisPlus> {
        // 分页查询测试表数据
        List<SpringbootMybatisPlusResponseDTO> query(@Param("data") SpringbootMybatisPlusRequestQueryDTO springbootMybatisPlusRequestQueryDTO , Page<SpringbootMybatisPlusResponseDTO> page);
    }

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

    Service 服务实现类(注意)

    @Service
    public class SpringbootMybatisPlusServiceImpl extends ServiceImpl<SpringbootMybatisPlusMapper,SpringbootMybatisPlus> 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<SpringbootMybatisPlusResponseDTO> 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 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
     
        <!-- 三坐标 -->
        <groupId>com.zwc</groupId>
        <artifactId>springboot-mybatis-plus-commons</artifactId>
        <version>0.0.1-SNAPSHOT</version>
     
        <!-- 工程名称和描述 -->
        <name>springboot-mybatis-plus-commons</name>
        <description>公用工程</description>
     
        <!-- 打包方式 -->
        <packaging>jar</packaging>
     
        <!-- 在properties下声明相应的版本信息,然后在dependency下引用的时候用${spring-version}就可以引入该版本jar包了 -->
        <properties>
            <!-- 编码 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!-- jdk -->
            <java.version>1.8</java.version>
     
            <!-- springboot -->
            <platform-bom.version>Cairo-SR3</platform-bom.version>
     
            <!-- ali 连接池 -->
            <druid.version>1.1.9</druid.version>
            <!-- ali json -->
            <fastjson.version>1.2.47</fastjson.version>
            <jackson.mapper.asl.version>1.9.9</jackson.mapper.asl.version>
     
            <!-- mybatis -->
            <mybatis-plus-boot-starter.version>3.0-RELEASE</mybatis-plus-boot-starter.version>
            <mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
            <mybatis.ehcache.version>1.1.0</mybatis.ehcache.version>
        </properties>
     
        <!-- 加入依赖 -->
        <dependencies>
            <!-- ali 连接池依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
     
            <!-- mysql 依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
     
            <!-- ali json依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>${jackson.mapper.asl.version}</version>
            </dependency>
     
            <!-- mybatis 依赖 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.caches</groupId>
                <artifactId>mybatis-ehcache</artifactId>
                <version>${mybatis.ehcache.version}</version>
            </dependency>
        </dependencies>
     
        <!-- 依赖 jar 包版本管理的管理器 -->
        <!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 -->
        <!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 -->
        <!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 -->
        <dependencyManagement>
            <dependencies>
                <!-- SpringBoot -->
                <dependency>
                    <groupId>io.spring.platform</groupId>
                    <artifactId>platform-bom</artifactId>
                    <version>${platform-bom.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
     
        <!-- 插件依赖 -->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
     
    </project>

    配置一些共用依赖,其中包括 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 就结束了,关键的点就这么多,多多尝试,一定会成功的!

    本文转自网络,如有侵权请联系客服删除。