经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
SpringBoot快速整合Mybatis、MybatisPlus(代码生成器)实现数据库访问功能
来源:jb51  时间:2021/4/12 13:52:33  对本文有异议

 1. 创建SpringBoot项目

在这里插入图片描述

1.1 引入依赖

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <parent>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-parent</artifactId>
  10. <version>2.3.3.RELEASE</version>
  11. </parent>
  12.  
  13. <groupId>com.gcl</groupId>
  14. <artifactId>vue_day03_admin</artifactId>
  15. <version>1.0-SNAPSHOT</version>
  16.  
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. </properties>
  22.  
  23. <dependencies>
  24.  
  25. <!--spring-web-->
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. </dependency>
  30.  
  31. <!--mybatis-plus-->
  32. <dependency>
  33. <groupId>com.baomidou</groupId>
  34. <artifactId>mybatis-plus-boot-starter</artifactId>
  35. <version>3.2.0</version>
  36. </dependency>
  37.  
  38. <!--mybatis-plus代码生成器-->
  39. <dependency>
  40. <groupId>com.baomidou</groupId>
  41. <artifactId>mybatis-plus-generator</artifactId>
  42. <version>3.2.0</version>
  43. </dependency>
  44.  
  45. <dependency>
  46. <groupId>org.freemarker</groupId>
  47. <artifactId>freemarker</artifactId>
  48. </dependency>
  49.  
  50.  
  51. <!--mysql驱动-->
  52. <dependency>
  53. <groupId>mysql</groupId>
  54. <artifactId>mysql-connector-java</artifactId>
  55. <version>5.1.46</version>
  56. </dependency>
  57.  
  58. <!--数据库连接池-->
  59. <dependency>
  60. <groupId>com.alibaba</groupId>
  61. <artifactId>druid-spring-boot-starter</artifactId>
  62. <version>1.1.21</version>
  63. </dependency>
  64.  
  65.  
  66. <!--lombok-->
  67. <dependency>
  68. <groupId>org.projectlombok</groupId>
  69. <artifactId>lombok</artifactId>
  70. <optional>true</optional>
  71. </dependency>
  72.  
  73. <!--测试-->
  74. <dependency>
  75. <groupId>org.springframework.boot</groupId>
  76. <artifactId>spring-boot-starter-test</artifactId>
  77. <scope>test</scope>
  78. </dependency>
  79.  
  80. <!--lang3工具类-->
  81. <dependency>
  82. <groupId>org.apache.commons</groupId>
  83. <artifactId>commons-lang3</artifactId>
  84. <version>3.10</version>
  85. </dependency>
  86. </dependencies>
  87.  
  88. <!-- maven插件,可以将应用打包成一个可执行的jar包;-->
  89. <build>
  90. <plugins>
  91. <plugin>
  92. <groupId>org.springframework.boot</groupId>
  93. <artifactId>spring-boot-maven-plugin</artifactId>
  94. </plugin>
  95. </plugins>
  96. </build>
  97.  
  98. </project>

1.2 编写配置文件

application.yml

  1. server:
  2. port: 8088
  3.  
  4. spring:
  5. datasource:
  6. driver-class-name: com.mysql.jdbc.Driver
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. url: jdbc:mysql://192.168.0.131:3306/vue_day03?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
  9. username: root
  10. password: Root@123456
  11.  
  12. mybatis-plus:
  13. type-aliases-package: com.gcl.entity
  14. configuration:
  15. map-underscore-to-camel-case: true
  16. use-generated-keys: true
  17. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  18. mapper-locations: classpath:com/gcl/mapper/*Mapper.xml
  19.  
  20. logging:
  21. level:
  22. com.demo.mapper: debug

2. 编写MybatisPlus代码生成工具类

在这里插入图片描述

2.1 编写代码生成工具类

CodeGenerator.java

  1. package com.gcl.utils;
  2.  
  3. import com.baomidou.mybatisplus.annotation.DbType;
  4. import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
  5. import com.baomidou.mybatisplus.core.toolkit.StringPool;
  6. import com.baomidou.mybatisplus.generator.AutoGenerator;
  7. import com.baomidou.mybatisplus.generator.InjectionConfig;
  8. import com.baomidou.mybatisplus.generator.config.*;
  9. import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
  10. import com.baomidou.mybatisplus.generator.config.po.TableInfo;
  11. import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
  12. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  13. import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
  14. import org.apache.commons.lang3.StringUtils;
  15.  
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.Scanner;
  19.  
  20. // 执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
  21. public class CodeGenerator {
  22.  
  23. /**
  24. * <p>
  25. * 读取控制台内容
  26. * </p>
  27. */
  28. public static String scanner(String tip) {
  29. Scanner scanner = new Scanner(System.in);
  30. StringBuilder help = new StringBuilder();
  31. help.append("请输入" + tip + ":");
  32. System.out.println(help.toString());
  33. if (scanner.hasNext()) {
  34. String ipt = scanner.next();
  35. if (StringUtils.isNotEmpty(ipt)) {
  36. return ipt;
  37. }
  38. }
  39. throw new MybatisPlusException("请输入正确的" + tip + "!");
  40. }
  41.  
  42. public static void main(String[] args) {
  43. // 代码生成器
  44. AutoGenerator mpg = new AutoGenerator();
  45.  
  46. // 全局配置
  47. GlobalConfig gc = new GlobalConfig();
  48. String projectPath = System.getProperty("user.dir");
  49. gc.setOutputDir(projectPath + "/vue_day03_admin/src/main/java");
  50. gc.setAuthor("gcl");
  51. // 是否打开输出目录,默认true
  52. gc.setOpen(false);
  53. // 开启 ActiveRecord 模式,默认false
  54. gc.setActiveRecord(true);
  55. // 是否覆盖已有文件
  56. gc.setFileOverride(true);
  57. // XML 开启 BaseResultMap
  58. gc.setBaseResultMap(true);
  59. // XML 开启 baseColumnList
  60. gc.setBaseColumnList(true);
  61.  
  62. // 自定义文件命名,注意 %s 会自动填充表实体属性!
  63. // gc.setMapperName("%sDao");
  64. // gc.setXmlName("%sMapper");
  65. gc.setServiceName("%sService");
  66. // gc.setServiceImplName("%sServiceDiy");
  67. // gc.setControllerName("%sAction");
  68.  
  69. mpg.setGlobalConfig(gc);
  70.  
  71. // 数据源配置
  72. DataSourceConfig dsc = new DataSourceConfig();
  73. dsc.setDbType(DbType.MYSQL);
  74.  
  75. dsc.setUrl("jdbc:mysql://192.168.0.131:3306/vue_day03?useUnicode=true&useSSL=false&characterEncoding=utf8");
  76. dsc.setDriverName("com.mysql.jdbc.Driver");
  77. dsc.setUsername("root");
  78. dsc.setPassword("Root@123456");
  79. dsc.setTypeConvert(new MySqlTypeConvert(){
  80. // 自定义数据库表字段类型转换【可选】
  81. @Override
  82. public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
  83. System.out.println("转换类型:" + fieldType);
  84. // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
  85. return super.processTypeConvert(globalConfig, fieldType);
  86. }
  87. });
  88. mpg.setDataSource(dsc);
  89.  
  90. // 包配置
  91. PackageConfig pc = new PackageConfig();
  92.  
  93. // com.demo.user
  94. pc.setParent("com");
  95. // pc.setModuleName("user");
  96. pc.setModuleName(scanner("模块名"));
  97. mpg.setPackageInfo(pc);
  98.  
  99. // 自定义配置
  100. InjectionConfig cfg = new InjectionConfig() {
  101. @Override
  102. public void initMap() {
  103. // TODO
  104. }
  105. };
  106.  
  107. mpg.setCfg(cfg);
  108.  
  109. // 如果模板引擎是 freemarker
  110. String templatePath = "/templates/mapper.xml.ftl";
  111.  
  112. // 自定义输出配置
  113. List<FileOutConfig> focList = new ArrayList<>();
  114. // 自定义配置会被优先输出
  115. focList.add(new FileOutConfig(templatePath) {
  116. @Override
  117. public String outputFile(TableInfo tableInfo) {
  118. // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
  119. return projectPath + "/vue_day03_admin/src/main/resources/com/gcl/mapper"
  120. + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
  121. }
  122. });
  123. cfg.setFileOutConfigList(focList);
  124. mpg.setCfg(cfg);
  125.  
  126. // 配置模板
  127. TemplateConfig templateConfig = new TemplateConfig();
  128.  
  129. templateConfig.setXml(null);
  130. mpg.setTemplate(templateConfig);
  131.  
  132. // 策略配置
  133. StrategyConfig strategy = new StrategyConfig();
  134. strategy.setEntityLombokModel(true);
  135. strategy.setRestControllerStyle(true);
  136. // 此处可以修改为您的表前缀
  137. strategy.setTablePrefix(new String[] { "tb_", "tsys_","t_" });
  138. // 表名生成策略
  139. strategy.setNaming(NamingStrategy.underline_to_camel);
  140. // 需要生成的表
  141. strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
  142. // strategy.setInclude(new String[] { "tb_user" });
  143. strategy.setEntityBuilderModel(true);
  144.  
  145. mpg.setStrategy(strategy);
  146. mpg.setTemplateEngine(new FreemarkerTemplateEngine());
  147. mpg.execute();
  148. }
  149.  
  150. }

2.2 创建数据库及表

创表语句

  1. CREATE TABLE `t_user` (
  2. `id` int(60) NOT NULL AUTO_INCREMENT COMMENT '主键',
  3. `username` varchar(255) DEFAULT NULL COMMENT '姓名',
  4. `salary` double(7,2) DEFAULT NULL COMMENT '薪水',
  5. `age` int(11) DEFAULT NULL,
  6. `desc` varchar(255) DEFAULT NULL COMMENT '描述',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.3 测试代码生成器

执行CodeGenerator类中的main方法

在这里插入图片描述

在这里插入图片描述

执行代码生成器之后的结果

在这里插入图片描述

3. 添加分页配置

在这里插入图片描述

MyBatisPlusConfig.java

  1. package com.gcl.config;
  2.  
  3. import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6.  
  7. /**
  8. * @ClassName MyBatisPlusConfig
  9. * @Description TODO
  10. * @Author gcl
  11. * @Date 2021-03-18 8:36
  12. **/
  13. @Configuration
  14. public class MyBatisPlusConfig {
  15. /**
  16. * mybatis-plus 分页插件
  17. */
  18. @Bean
  19. public PaginationInterceptor paginationInterceptor() {
  20. PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  21. return paginationInterceptor;
  22. }
  23. }

4. 测试访问接口从数据库中获取数据(带分页)

4.1 数据库中添加5条数据

  1. INSERT INTO `vue_day03`.`t_user` (`id`, `username`, `salary`, `age`, `desc`) VALUES ('1', '张三', '2000.00', '23', '95年05月生');
  2. INSERT INTO `vue_day03`.`t_user` (`id`, `username`, `salary`, `age`, `desc`) VALUES ('2', '李四', '3000.00', '24', '96年06年生');
  3. INSERT INTO `vue_day03`.`t_user` (`id`, `username`, `salary`, `age`, `desc`) VALUES ('3', '王五', '4000.00', '25', '07年07年生');
  4. INSERT INTO `vue_day03`.`t_user` (`id`, `username`, `salary`, `age`, `desc`) VALUES ('4', '赵六', '5000.00', '26', '08年08月生');
  5. INSERT INTO `vue_day03`.`t_user` (`id`, `username`, `salary`, `age`, `desc`) VALUES ('5', '田七', '6000.00', '27', '09年09月生');

4.2 编写查询方法

  1. package com.gcl.controller;
  2.  
  3. import com.baomidou.mybatisplus.core.conditions.query.Query;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.gcl.entity.User;
  8. import com.gcl.service.UserService;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12.  
  13. import org.springframework.web.bind.annotation.RestController;
  14.  
  15. import java.util.List;
  16.  
  17. /**
  18. * <p>
  19. * 前端控制器
  20. * </p>
  21. *
  22. * @author gcl
  23. * @since 2021-04-10
  24. */
  25. @RestController
  26. @RequestMapping("/user")
  27. public class UserController {
  28.  
  29. @Autowired
  30. private UserService userService;
  31.  
  32.  
  33. /**
  34. *
  35. * @param pageNo 当前页
  36. * @param pageSize 每页显示的记录数
  37. * @return
  38. */
  39. @GetMapping
  40. public List<User> findList(int pageNo,int pageSize){
  41.  
  42.  
  43. //创建查询条件封装器
  44. QueryWrapper<User> wrapper = new QueryWrapper<>();
  45. Page<User> page = new Page<>(pageNo, pageSize);
  46.  
  47. IPage<User> iPage = userService.page(page, wrapper);
  48.  
  49. List<User> records = iPage.getRecords();
  50.  
  51. return records;
  52.  
  53. }
  54.  
  55. }

4.3 用postman工具测试分页

先测试第一页每页显示3条记录

在这里插入图片描述

查看第二页的数据

在这里插入图片描述

到此这篇关于SpringBoot快速整合Mybatis、MybatisPlus(代码生成器)实现数据库访问功能的文章就介绍到这了,更多相关SpringBoot实现数据库访问内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号