git地址: https://github.com/leezhang0525/boot
branch:1.1.0mysql
本文档持续更新,目标为多组件系统,常用组件集成完毕后,后续会添加分布式内容。

一、新建dao模块

image.png
image.png
依次添加 service、common、entity等模块
image.png

二、添加依赖

这里只展示了 父模块和 web、dao模块的 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. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.6.6</version>
  9. <relativePath/>
  10. </parent>
  11. <modelVersion>4.0.0</modelVersion>
  12. <groupId>com.zhangsan.boot</groupId>
  13. <artifactId>boot</artifactId>
  14. <version>1.0-SNAPSHOT</version>
  15. <packaging>pom</packaging>
  16. <name>boot</name>
  17. <description>boot</description>
  18. <modules>
  19. <module>web</module>
  20. <module>dao</module>
  21. <module>service</module>
  22. <module>service-impl</module>
  23. <module>entity</module>
  24. <module>dto</module>
  25. <module>common</module>
  26. </modules>
  27. <properties>
  28. <java.version>1.8</java.version>
  29. <mybatis.version>2.2.2</mybatis.version>
  30. <mysql-connector.version>8.0.28</mysql-connector.version>
  31. <druid.version>1.1.10</druid.version>
  32. <fastjson.version>1.2.60</fastjson.version>
  33. </properties>
  34. <dependencyManagement>
  35. <dependencies>
  36. <dependency>
  37. <groupId>mysql</groupId>
  38. <artifactId>mysql-connector-java</artifactId>
  39. <version>${mysql-connector.version}</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.mybatis.spring.boot</groupId>
  43. <artifactId>mybatis-spring-boot-starter</artifactId>
  44. <version>${mybatis.version}</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>com.alibaba</groupId>
  48. <artifactId>fastjson</artifactId>
  49. <version>${fastjson.version}</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>com.alibaba</groupId>
  53. <artifactId>druid-spring-boot-starter</artifactId>
  54. <version>${druid.version}</version>
  55. </dependency>
  56. </dependencies>
  57. </dependencyManagement>
  58. </project>
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.zhangsan.boot</groupId>
  7. <artifactId>boot</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <artifactId>web</artifactId>
  11. <dependencies>
  12. <dependency>
  13. <groupId>com.zhangsan.boot</groupId>
  14. <artifactId>service-impl</artifactId>
  15. <version>1.0-SNAPSHOT</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-jdbc</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.mybatis.spring.boot</groupId>
  27. <artifactId>mybatis-spring-boot-starter</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>mysql</groupId>
  31. <artifactId>mysql-connector-java</artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>com.alibaba</groupId>
  35. <artifactId>druid-spring-boot-starter</artifactId>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.projectlombok</groupId>
  39. <artifactId>lombok</artifactId>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-starter-test</artifactId>
  44. </dependency>
  45. </dependencies>
  46. <build>
  47. <plugins>
  48. <plugin>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-maven-plugin</artifactId>
  51. <configuration>
  52. <excludes>
  53. <exclude>
  54. <groupId>org.projectlombok</groupId>
  55. <artifactId>lombok</artifactId>
  56. </exclude>
  57. </excludes>
  58. </configuration>
  59. </plugin>
  60. </plugins>
  61. </build>
  62. </project>
  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. <parent>
  6. <artifactId>boot</artifactId>
  7. <groupId>com.zhangsan.boot</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>dao</artifactId>
  12. <dependencies>
  13. <dependency>
  14. <groupId>com.zhangsan.boot</groupId>
  15. <artifactId>entity</artifactId>
  16. <version>1.0-SNAPSHOT</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>mysql</groupId>
  20. <artifactId>mysql-connector-java</artifactId>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.mybatis.spring.boot</groupId>
  24. <artifactId>mybatis-spring-boot-starter</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>com.alibaba</groupId>
  28. <artifactId>druid-spring-boot-starter</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-jdbc</artifactId>
  33. </dependency>
  34. </dependencies>
  35. </project>

三、添加实体及mapper文件

这里使用mybatis-generator-maven-plugin 插件生成

  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. <parent>
  6. <artifactId>boot</artifactId>
  7. <groupId>com.zhangsan.boot</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>generator</artifactId>
  12. <build>
  13. <plugins>
  14. <plugin>
  15. <groupId>org.mybatis.generator</groupId>
  16. <artifactId>mybatis-generator-maven-plugin</artifactId>
  17. <version>1.3.7</version>
  18. <executions>
  19. <execution>
  20. <id>Generate MyBatis Artifacts</id>
  21. <goals>
  22. <goal>generate</goal>
  23. </goals>
  24. </execution>
  25. </executions>
  26. <!-- mvn mybatis-generator:generate -->
  27. <configuration>
  28. <configurationFile>./src/main/resources/mybatis-generator.xml</configurationFile>
  29. <overwrite>true</overwrite>
  30. <includeAllDependencies>true</includeAllDependencies>
  31. </configuration>
  32. </plugin>
  33. </plugins>
  34. </build>
  35. </project>

resources目录下添加两个文件
image.png

  1. #本地mysql-connector-java-xx.jar路径
  2. drive.class.path=D:/file/maven_repo/mysql/mysql-connector-java/8.0.21/mysql-connector-java-8.0.21.jar
  3. jdbc.driver=com.mysql.jdbc.Driver
  4. jdbc.url=jdbc:mysql://localhost:3306/pay?serverTimezone=UTC
  5. jdbc.username=root
  6. jdbc.password=123456
  7. entity.package=com.zhangsan.boot.entity
  8. dao.package=com.zhangsan.boot.dao
  9. xml.mapper.package=/resources/mappers
  10. dao.target.project=D:/file/githubRepository/boot/dao/src/main/java
  11. xml.target.project=D:/file/githubRepository/boot/dao/src/main
  12. entity.target.project=D:/file/githubRepository/boot/entity/src/main/java
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!-- 配置文件路径 -->
  7. <properties resource="generatorConfig.properties"/>
  8. <!--数据库驱动包路径 -->
  9. <classPathEntry location="${drive.class.path}"/>
  10. <!--
  11. context:生成一组对象的环境
  12. id:必选,上下文id,用于在生成错误时提示
  13. defaultModelType:指定生成对象的样式
  14. 1,conditional:类似hierarchical;
  15. 2,flat:所有内容(主键,blob)等全部生成在一个对象中;
  16. 3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
  17. targetRuntime:
  18. 1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
  19. 2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
  20. introspectedColumnImpl:类全限定名,用于扩展MBG
  21. -->
  22. <context id="MySQLTables" targetRuntime="MyBatis3">
  23. <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
  24. 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖
  25. -->
  26. <property name="autoDelimitKeywords" value="false"/>
  27. <!-- 生成的Java文件的编码 -->
  28. <property name="javaFileEncoding" value="UTF-8"/>
  29. <!-- 格式化java代码 -->
  30. <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
  31. <!-- 格式化XML代码 -->
  32. <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
  33. <!-- 不生成注释 -->
  34. <commentGenerator>
  35. <!-- <property name="suppressAllComments" value="true"/>-->
  36. <property name="suppressDate" value="true"/>
  37. </commentGenerator>
  38. <!--数据库连接信息 -->
  39. <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
  40. <!--<property name="beginningDelimiter" value="`"/>-->
  41. <!--<property name="endingDelimiter" value="`"/>-->
  42. <!-- 必须要有的,使用这个配置链接数据库
  43. @TODO:是否可以扩展
  44. -->
  45. <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}"
  46. password="${jdbc.password}">
  47. </jdbcConnection>
  48. <!-- java类型处理器
  49. 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;
  50. 注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;
  51. -->
  52. <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
  53. <!--
  54. true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
  55. false:默认,
  56. scale>0;length>18:使用BigDecimal;
  57. scale=0;length[10,18]:使用Long;
  58. scale=0;length[5,9]:使用Integer;
  59. scale=0;length<5:使用Short;
  60. -->
  61. <property name="forceBigDecimals" value="false"/>
  62. </javaTypeResolver>
  63. <!--生成的model 包路径 -->
  64. <javaModelGenerator targetPackage="${entity.package}" targetProject="${entity.target.project}">
  65. <!-- for MyBatis3/MyBatis3Simple
  66. 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;
  67. -->
  68. <!--<property name="constructorBased" value="false"/>-->
  69. <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
  70. <property name="enableSubPackages" value="false"/>
  71. <!-- for MyBatis3 / MyBatis3Simple
  72. 是否创建一个不可变的类,如果为true,
  73. 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类
  74. <property name="immutable" value="false"/>
  75. 设置一个根对象,如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项
  76. 注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括:
  77. 1,属性名相同,类型相同,有相同的getter/setter方法;
  78. <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/>
  79. -->
  80. <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
  81. <property name="trimStrings" value="true"/>
  82. </javaModelGenerator>
  83. <!-- 生成SQL map的XML文件生成器,
  84. 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
  85. 或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
  86. targetPackage/targetProject:同javaModelGenerator
  87. -->
  88. <sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="${xml.target.project}">
  89. <property name="enableSubPackages" value="ture"/>
  90. </sqlMapGenerator>
  91. <!-- 生成的Dao接口 的包路径 -->
  92. <javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="${dao.target.project}">
  93. <property name="enableSubPackages" value="ture"/>
  94. </javaClientGenerator>
  95. <!--
  96. 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素
  97. 选择的table会生成一下文件:
  98. 1,SQL map文件
  99. 2,生成一个主键类;
  100. 3,除了BLOB和主键的其他字段的类;
  101. 4,包含BLOB的类;
  102. 5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选;
  103. 6,Mapper接口(可选)
  104. tableName(必要):要生成对象的表名;
  105. 注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会
  106. 根据设置的schema,catalog或tablename去查询数据表,按照下面的流程:
  107. 1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询;
  108. 2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找;
  109. 3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找;
  110. 4,否则,使用指定的大小写格式查询;
  111. 另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名;
  112. 这个时候,请设置delimitIdentifiers="true"即可保留大小写格式;
  113. 可选:
  114. 1,schema:数据库的schema;
  115. 2,catalog:数据库的catalog;
  116. 3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName
  117. 4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面;
  118. 5,enableInsert(默认true):指定是否生成insert语句;
  119. 6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get);
  120. 7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句;
  121. 8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update);
  122. 9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete);
  123. 10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句;
  124. 11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);
  125. 12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性);
  126. 13,modelType:参考context元素的defaultModelType,相当于覆盖;
  127. 14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性)
  128. 15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性
  129. 注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写;
  130. -->
  131. <!-- 实体表配置,需要导出哪些表就配哪些 -->
  132. <table schema="root" tableName="tf_settle_notify_event"
  133. enableCountByExample="false"
  134. enableUpdateByExample="false"
  135. enableDeleteByExample="false"
  136. enableSelectByExample="false"
  137. selectByExampleQueryId="false" >
  138. </table>
  139. </context>
  140. </generatorConfiguration>

四、编写application.yml文件

  1. server:
  2. port: 8081
  3. spring:
  4. datasource:
  5. url: jdbc:mysql://localhost:3306/pay?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useLocalSessionState=true
  6. username: root
  7. password: 123456
  8. driver-class-name: com.mysql.jdbc.Driver
  9. type: com.alibaba.druid.pool.DruidDataSource

五、编写数据源

dao模块下添加config包后添加DruidConfig.java文件

  1. package com.zhangsan.boot.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.mybatis.spring.SqlSessionFactoryBean;
  5. import org.mybatis.spring.mapper.MapperScannerConfigurer;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  11. import org.springframework.core.io.support.ResourcePatternResolver;
  12. import javax.sql.DataSource;
  13. @Configuration
  14. public class DruidConfig {
  15. public static final String MAPPER_BASE_PACKAGE = "com.zhangsan.boot.dao";
  16. public static final String ENTITY_BASE_PACKAGE = "com.zhangsan.boot.entity";
  17. /**
  18. * 数据源
  19. * @return
  20. */
  21. @Bean
  22. @ConfigurationProperties(prefix = "spring.datasource")
  23. public DataSource dataSource(){
  24. return new DruidDataSource();
  25. }
  26. /**
  27. * SqlSessionFactory
  28. * @param dataSource
  29. * @return
  30. * @throws Exception
  31. */
  32. @Bean
  33. public SqlSessionFactory sqlSessionFactory (@Qualifier("dataSource") DataSource dataSource) throws Exception {
  34. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
  35. sqlSessionFactoryBean.setDataSource(dataSource);
  36. sqlSessionFactoryBean.setTypeAliasesPackage(ENTITY_BASE_PACKAGE);
  37. ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  38. sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:mappers/*.xml"));
  39. return sqlSessionFactoryBean.getObject();
  40. }
  41. /**
  42. * mapperScannerConfigurer
  43. * @return
  44. */
  45. @Bean
  46. public static MapperScannerConfigurer mapperScannerConfigurer() {
  47. MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
  48. mapperScannerConfigurer.setBasePackage(MAPPER_BASE_PACKAGE);
  49. mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
  50. return mapperScannerConfigurer;
  51. }
  52. }

六、编写测试controller测试查询数据库

  1. @RestController
  2. @Slf4j
  3. public class TestController {
  4. @GetMapping("/test")
  5. public String test(){
  6. log.info("这是测试");
  7. return "success";
  8. }
  9. @Autowired
  10. private PadDeviceService padDeviceService;
  11. @GetMapping("/sqlTest")
  12. public TPadDevice sqlTest(Long id){
  13. log.info("这是测试");
  14. TPadDevice padDevice = padDeviceService.getById(id);
  15. return padDevice;
  16. }
  17. }

注:WebApplication 启动类默认只加载同级目录下的bean,所以多模块场景下需要手动指定包扫描路径,让@SpringBootApplication 管理到项目中所有需要加载的bean
1650548354(1).png
1650548112(1).png