1 mybatis-plus概述

1.1 官方地址
https://baomidou.com/
image.png

2 搭建mybatis-plus 环境

2.1 pom.xm导包

控制包版本

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <mybatis-plus-version>3.4.3.4</mybatis-plus-version>
  4. <mybatis-plus-generator-version>3.5.1</mybatis-plus-generator-version>
  5. <fastjson-version>1.2.47</fastjson-version>
  6. <freemarker.version>2.3.28</freemarker.version>
  7. <swagger2.version>2.9.2</swagger2.version>
  8. </properties>

导入包

  1. <!-- mysql数据库驱动-->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <scope>runtime</scope>
  6. </dependency>
  7. <!-- mybatis plus 代码生成器 -->
  8. <dependency>
  9. <groupId>com.baomidou</groupId>
  10. <artifactId>mybatis-plus-generator</artifactId>
  11. <version>${mybatis-plus-generator-version}</version>
  12. </dependency>
  13. <!-- mybatis plus 依赖包-->
  14. <dependency>
  15. <groupId>com.baomidou</groupId>
  16. <artifactId>mybatis-plus-boot-starter</artifactId>
  17. <version>${mybatis-plus-version}</version>
  18. </dependency>
  19. <!-- fastjson,阿里json包-->
  20. <dependency>
  21. <groupId>com.alibaba</groupId>
  22. <artifactId>fastjson</artifactId>
  23. <version>${fastjson-version}</version>
  24. </dependency>
  25. <!-- freemarker模板引擎-->
  26. <dependency>
  27. <groupId>org.freemarker</groupId>
  28. <artifactId>freemarker</artifactId>
  29. <version>${freemarker.version}</version>
  30. </dependency>
  31. <!-- swagger文档依赖包-->
  32. <dependency>
  33. <groupId>io.springfox</groupId>
  34. <artifactId>springfox-swagger2</artifactId>
  35. <version>${swagger2.version}</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>io.springfox</groupId>
  39. <artifactId>springfox-swagger-ui</artifactId>
  40. <version>${swagger2.version}</version>
  41. </dependency>

2.2 新建application.yml,并且配置如下

  1. server:
  2. port: 8081
  3. servlet:
  4. context-path: /
  5. spring:
  6. datasource:
  7. driver-class-name: com.mysql.cj.jdbc.Driver
  8. url: jdbc:mysql://127.0.0.1:3306/cundao?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
  9. username: root
  10. password: 123456
  11. jackson:
  12. date-format: yyyy-MM-dd HH:mm:ss
  13. time-zone: GMT+8
  14. serialization:
  15. write-dates-as-timestamps: false
  16. mybatis-plus:
  17. configuration:
  18. map-underscore-to-camel-case: true
  19. auto-mapping-behavior: full
  20. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  21. mapper-locations: classpath*:mapper/**/*Mapper.xml
  22. global-config:
  23. # 逻辑删除配置
  24. db-config:
  25. # 删除前
  26. logic-not-delete-value: 1
  27. # 删除后
  28. logic-delete-value: 0
  29. # 开发环境配置
  30. #Swagger 展示设置 生产环境关闭
  31. swagger:
  32. enable: true
  33. title: 后台管理 APIs
  34. package: com.alpaak.hellospringboot.controller
  35. version: 1.0.0

2.3 mybatisplus分页插件MybatisPlusConfig

  1. package com.alpaak.hellospringboot.config;
  2. import com.baomidou.mybatisplus.annotation.DbType;
  3. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  4. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. //Spring boot方式
  9. @Configuration
  10. @MapperScan("com.alpaak.hellospringboot.mapper")
  11. public class MybatisPlusConfig {
  12. // 旧版
  13. // @Bean
  14. // public PaginationInterceptor paginationInterceptor() {
  15. // PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  16. // // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
  17. // // paginationInterceptor.setOverflow(false);
  18. // // 设置最大单页限制数量,默认 500 条,-1 不受限制
  19. // // paginationInterceptor.setLimit(500);
  20. // // 开启 count 的 join 优化,只针对部分 left join
  21. // paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
  22. // return paginationInterceptor;
  23. // }
  24. // 最新版
  25. @Bean
  26. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  27. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  28. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  29. return interceptor;
  30. }
  31. }

2.4 mybatisplus自动生成代码MybatisGenerator.java

  1. package com.alpaak.hellospringboot;
  2. import com.baomidou.mybatisplus.generator.FastAutoGenerator;
  3. import com.baomidou.mybatisplus.generator.config.OutputFile;
  4. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  5. import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
  6. import java.util.Collections;
  7. /**
  8. * @Description: 类描述 代码生成器
  9. * @author: alpaak
  10. * @date: 2021/12/22 15:30
  11. * @Since 1.0
  12. */
  13. public class MybatisGenerator {
  14. // 本地项目路径 - 要改
  15. private final static String LOCAL_PATH = "D:\\3-study\\cundao\\hello-springboot";
  16. // xml包路径
  17. private final static String MAPPER_XML_PATH = "/src/main/resources/mapper";
  18. // 包路径
  19. private final static String PACKAGE_PATH = "/src/main/java";
  20. //项目包路径
  21. private final static String PACKAGE_NAME = "com.alpaak.hellospringboot";
  22. //作者
  23. private final static String AUTHOR = "alpaak";
  24. //数据库
  25. private final static String DATABASE = "cundao";
  26. //服务器地址
  27. private final static String DB_HOST = "127.0.0.1:3306";
  28. //帐号
  29. private final static String DB_USERNAME = "root";
  30. //密码
  31. private final static String DB_PASSWORD = "123456";
  32. //数据库表 - 通过表成成代码 - 要改
  33. private final static String[] TABLES = new String[]{
  34. "user"
  35. };
  36. public static void main(String[] args) {
  37. String dbUrl = "jdbc:mysql://" + DB_HOST + "/" + DATABASE + "?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false";
  38. FastAutoGenerator.create(dbUrl,DB_USERNAME ,DB_PASSWORD)
  39. .globalConfig(builder -> {
  40. builder.author(AUTHOR) // 设置作者
  41. .enableSwagger() // 开启 swagger 模式
  42. .fileOverride() // 覆盖已生成文件
  43. .outputDir(LOCAL_PATH + PACKAGE_PATH); // 指定输出目录
  44. })
  45. .packageConfig(builder -> {
  46. builder.parent(PACKAGE_NAME) // 设置父包名
  47. .moduleName("") // 设置父包模块名
  48. .pathInfo(Collections.singletonMap(OutputFile.mapperXml, LOCAL_PATH + MAPPER_XML_PATH)); // 设置mapperXml生成路径
  49. })
  50. .strategyConfig(builder -> {
  51. builder.addInclude(TABLES); // 设置需要生成的表名
  52. // .addTablePrefix("t_", "c_"); // 设置过滤表前缀
  53. })
  54. .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
  55. .execute();
  56. }
  57. }

2.5 测试MybatisGenerator功能

2.5.1 自动生成controller、service、impl、entity、mapper接口、mapper的xml

image.png

2.5.2 类结构

image.png

2.5.3 service接口结构

image.png

2.5.4 service实现类结构

通过官网,可以看到此结构为我们提供了30多个已经实现的方法,任君享用
image.png

2.5.5 mapper接口结构

通过官网,可以看到此结构为我们提供了10多个已经实现的方法,任君享用
image.png

空的UserMapper.xml,提供用户自定义查询
image.png

3 controller接口开发

  1. package com.alpaak.hellospringboot.controller;
  2. import com.alpaak.hellospringboot.entity.User;
  3. import com.alpaak.hellospringboot.modle.qo.CommonQo;
  4. import com.alpaak.hellospringboot.service.IUserService;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import io.swagger.annotations.Api;
  8. import io.swagger.annotations.ApiOperation;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.*;
  11. /**
  12. * <p>
  13. * 前端控制器
  14. * </p>
  15. *
  16. * @author alpaak
  17. * @since 2021-12-22
  18. */
  19. @Api(tags = "用户接口")
  20. @RestController
  21. @RequestMapping("/user")
  22. public class UserController {
  23. @Autowired
  24. private IUserService userService;
  25. @ApiOperation(value = "根据用户id获得用户", notes = "")
  26. @GetMapping("/getUser")
  27. public User getUser(Integer id) {
  28. return userService.getById(id);
  29. }
  30. @ApiOperation(value = "分页查询用户", notes = "")
  31. @GetMapping("/getUserPage")
  32. public IPage<User> getUserPage(CommonQo qo) {
  33. // 第几页
  34. int current = qo.getCurrent();
  35. // 当前面
  36. int size = qo.getSize();
  37. Page<User> page = new Page<>(current, size);
  38. return userService.page(page);
  39. }
  40. @ApiOperation(value = "保存用户", notes = "")
  41. @PostMapping("/addUser")
  42. public String addUser(@RequestBody User user) {
  43. boolean count = userService.saveOrUpdate(user);
  44. if (count) {
  45. return "保存成功";
  46. } else {
  47. return "保存失败";
  48. }
  49. }
  50. @ApiOperation(value = "删除用户", notes = "")
  51. @PostMapping("/delUser")
  52. public String delUser(Integer id) {
  53. boolean count = userService.removeById(id);
  54. if (count) {
  55. return "删除成功";
  56. } else {
  57. return "删除失败";
  58. }
  59. }
  60. }

4 运行程序,用swagger测试

4.1 运行main程序

image.png
运行成功日志如下
image.png

4.2 运行swagger

4.2.1 打开swagger

浏览器中黏贴:http://127.0.0.1:8081/swagger-ui.html#/
运行如下:
image.png

4.2.2 使用swagger测试接口

image.png

4.2.3 返回结果:

image.png

4.2.4 swagger的好处

  1. 号称世界上最流行的API框架
  2. RestFul API文档在线生成工具—->>>API文档与API同步更新
  3. 可以直接运行,可以在线测试API接口
  4. 实体对象属性明了

image.png

5 项目源码地址

https://gitee.com/alpaak/hello-springboot.git

使用gitbash命令下载:
git clone https://gitee.com/alpaak/hello-springboot.git