前言
使用 MyBatis-Plus 可以减少大量的开发时间,单表的增删改查可以不用写 sql 语句。
本博客主要说明整合需要特别注意的地方。
本博客分别构建了一个单工程项目以及一个多工程项目,主要分析单工程项目的细节。
如有不正确的地方,欢迎指正。
源码
GitHub地址:https://github.com/intomylife/SpringBoot
环境
- JDK 1.8.0 +
- Maven 3.0 +
- MySQL 5.6.17
- SpringBoot 2.0.3
开发工具
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文件(注意)
- 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 接口
启用项目,调用接口(注意)
- 端口:8081(具体可以根据自己的喜好,在 application.properties 配置文件中配置 server.port)
- 新增接口:http://localhost:8081/smpc/add
- 删除接口:http://localhost:8081/smpc/delete
- 更新接口:http://localhost:8081/smpc/update
- 分页查询接口:http://localhost:8081/smpc/query项目结构

以上就是单工程整合 MyBatis-Plus 需要注意的地方,下面说说多工程项目的结构
多工程
为什么要构建多工程?
一般在实际工作中,项目的代码量会很大,而且随着时间的推移,还要不停的追加新的功能,如果开始不注意,全部笼统的写到一个工程中,那样越到后面开发就会越困难。
如何划分模块?
一般开发中会将公共的部分提取出来,比如工具类,系统常量,公共配置等等.. 它们通常叫做 commons 工程;
还有一部分就是带有业务逻辑的工程,里面可能会包含 基础模块,用户模块,订单模块等等...,
它们通常叫做 service工程。
commons 工程 - POM 文件
配置一些共用依赖,其中包括 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


- 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 就结束了,关键的点就这么多,多多尝试,一定会成功的!
到此这篇关于SpringBoot整合MyBatis-Plus的示例代码的文章就介绍到这了,更多相关SpringBoot整合MyBatis-Plus内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!