使用 MyBatis-Plus 可以减少大量的开发时间,单表的增删改查可以不用写 sql 语句。
本博客主要说明整合需要特别注意的地方。
本博客分别构建了一个单工程项目以及一个多工程项目,主要分析单工程项目的细节。
如有不正确的地方,欢迎指正。
GitHub地址:https://github.com/intomylife/SpringBoot
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','打蛋器','用来搅拌鸡蛋');
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
# 端口
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
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;
}
}
基础实体类,与数据库字段一一对应
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 {
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;
}
}
还有两个扩展实体类:封装请求参数(SpringbootMybatisPlusRequestQueryDTO)以及
封装响应结果(SpringbootMybatisPlusResponseDTO)
这里就不占篇幅了,可以到 GitHub 中获取源码。
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);
}
@Service
public class SpringbootMybatisPlusServiceImpl extends ServiceImpl implements SpringbootMybatisPlusService {
// 这里只贴出了关键需要注意的代码块
...
}
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();
}
/*
* @ClassName SpringbootMybatisPlusController
* @Desc TODO 删除数据
* @Date 2019/3/27 13:15
* @Version 1.0
*/
@RequestMapping("/delete")
@ResponseBody
public String delete(){
return springbootMybatisPlusService.delete();
}
/*
* @ClassName SpringbootMybatisPlusController
* @Desc TODO 更新数据
* @Date 2019/3/27 13:46
* @Version 1.0
*/
@RequestMapping("/update")
@ResponseBody
public String update(){
return springbootMybatisPlusService.update();
}
/*
* @ClassName SpringbootMybatisPlusController
* @Desc TODO 分页查询测试表数据
* @Date 2019/3/26 18:10
* @Version 1.0
*/
@RequestMapping("/query")
@ResponseBody
public Page query(@RequestParam(value = "springbootMybatisPlusRequestQueryDTO",required = false) SpringbootMybatisPlusRequestQueryDTO springbootMybatisPlusRequestQueryDTO){
return springbootMybatisPlusService.getDataByPage(springbootMybatisPlusRequestQueryDTO);
}
}
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);
}
}
端口:8081(具体可以根据自己的喜好,在 application.properties 配置文件中配置 server.port)
新增接口:http://localhost:8081/smpc/add
删除接口:http://localhost:8081/smpc/delete
更新接口:http://localhost:8081/smpc/update
以上就是单工程整合 MyBatis-Plus 需要注意的地方,下面说说多工程项目的结构
为什么要构建多工程?
一般在实际工作中,项目的代码量会很大,而且随着时间的推移,还要不停的追加新的功能,如果开始不注意,全部笼统的写到一个工程中,那样越到后面开发就会越困难。
如何划分模块?
一般开发中会将公共的部分提取出来,比如工具类,系统常量,公共配置等等.. 它们通常叫做 commons 工程;
还有一部分就是带有业务逻辑的工程,里面可能会包含 基础模块,用户模块,订单模块等等...,
它们通常叫做 service工程。
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
## 扫描 mapper 文件
mybatis-plus.mapper-locations=classpath*:com/zwc/*/mapper/xml/*.xml
## 扫描实体类
mybatis-plus.type-aliases-package=com.zwc.*.domain
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 整合 MyBatis-Plus 就结束了,关键的点就这么多,多多尝试,一定会成功的!
希望能够帮助到你
over