git地址: https://github.com/leezhang0525/boot
branch:1.1.0mysql
本文档持续更新,目标为多组件系统,常用组件集成完毕后,后续会添加分布式内容。
一、新建dao模块
二、添加依赖
这里只展示了 父模块和 web、dao模块的 pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.6</version><relativePath/></parent><modelVersion>4.0.0</modelVersion><groupId>com.zhangsan.boot</groupId><artifactId>boot</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><name>boot</name><description>boot</description><modules><module>web</module><module>dao</module><module>service</module><module>service-impl</module><module>entity</module><module>dto</module><module>common</module></modules><properties><java.version>1.8</java.version><mybatis.version>2.2.2</mybatis.version><mysql-connector.version>8.0.28</mysql-connector.version><druid.version>1.1.10</druid.version><fastjson.version>1.2.60</fastjson.version></properties><dependencyManagement><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency></dependencies></dependencyManagement></project>
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.zhangsan.boot</groupId><artifactId>boot</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>web</artifactId><dependencies><dependency><groupId>com.zhangsan.boot</groupId><artifactId>service-impl</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>boot</artifactId><groupId>com.zhangsan.boot</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dao</artifactId><dependencies><dependency><groupId>com.zhangsan.boot</groupId><artifactId>entity</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency></dependencies></project>
三、添加实体及mapper文件
这里使用mybatis-generator-maven-plugin 插件生成
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>boot</artifactId><groupId>com.zhangsan.boot</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>generator</artifactId><build><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><executions><execution><id>Generate MyBatis Artifacts</id><goals><goal>generate</goal></goals></execution></executions><!-- mvn mybatis-generator:generate --><configuration><configurationFile>./src/main/resources/mybatis-generator.xml</configurationFile><overwrite>true</overwrite><includeAllDependencies>true</includeAllDependencies></configuration></plugin></plugins></build></project>
resources目录下添加两个文件
#本地mysql-connector-java-xx.jar路径drive.class.path=D:/file/maven_repo/mysql/mysql-connector-java/8.0.21/mysql-connector-java-8.0.21.jarjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/pay?serverTimezone=UTCjdbc.username=rootjdbc.password=123456entity.package=com.zhangsan.boot.entitydao.package=com.zhangsan.boot.daoxml.mapper.package=/resources/mappersdao.target.project=D:/file/githubRepository/boot/dao/src/main/javaxml.target.project=D:/file/githubRepository/boot/dao/src/mainentity.target.project=D:/file/githubRepository/boot/entity/src/main/java
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!-- 配置文件路径 --><properties resource="generatorConfig.properties"/><!--数据库驱动包路径 --><classPathEntry location="${drive.class.path}"/><!--context:生成一组对象的环境id:必选,上下文id,用于在生成错误时提示defaultModelType:指定生成对象的样式1,conditional:类似hierarchical;2,flat:所有内容(主键,blob)等全部生成在一个对象中;3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)targetRuntime:1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;introspectedColumnImpl:类全限定名,用于扩展MBG--><context id="MySQLTables" targetRuntime="MyBatis3"><!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖--><property name="autoDelimitKeywords" value="false"/><!-- 生成的Java文件的编码 --><property name="javaFileEncoding" value="UTF-8"/><!-- 格式化java代码 --><property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/><!-- 格式化XML代码 --><property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/><!-- 不生成注释 --><commentGenerator><!-- <property name="suppressAllComments" value="true"/>--><property name="suppressDate" value="true"/></commentGenerator><!--数据库连接信息 --><!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; --><!--<property name="beginningDelimiter" value="`"/>--><!--<property name="endingDelimiter" value="`"/>--><!-- 必须要有的,使用这个配置链接数据库@TODO:是否可以扩展--><jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}"password="${jdbc.password}"></jdbcConnection><!-- java类型处理器用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;--><javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl"><!--true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型false:默认,scale>0;length>18:使用BigDecimal;scale=0;length[10,18]:使用Long;scale=0;length[5,9]:使用Integer;scale=0;length<5:使用Short;--><property name="forceBigDecimals" value="false"/></javaTypeResolver><!--生成的model 包路径 --><javaModelGenerator targetPackage="${entity.package}" targetProject="${entity.target.project}"><!-- for MyBatis3/MyBatis3Simple自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;--><!--<property name="constructorBased" value="false"/>--><!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --><property name="enableSubPackages" value="false"/><!-- for MyBatis3 / MyBatis3Simple是否创建一个不可变的类,如果为true,那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类<property name="immutable" value="false"/>设置一个根对象,如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括:1,属性名相同,类型相同,有相同的getter/setter方法;<property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/>--><!-- 设置是否在getter方法中,对String类型字段调用trim()方法 --><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成SQL map的XML文件生成器,注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置targetPackage/targetProject:同javaModelGenerator--><sqlMapGenerator targetPackage="${xml.mapper.package}" targetProject="${xml.target.project}"><property name="enableSubPackages" value="ture"/></sqlMapGenerator><!-- 生成的Dao接口 的包路径 --><javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}" targetProject="${dao.target.project}"><property name="enableSubPackages" value="ture"/></javaClientGenerator><!--选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素选择的table会生成一下文件:1,SQL map文件2,生成一个主键类;3,除了BLOB和主键的其他字段的类;4,包含BLOB的类;5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选;6,Mapper接口(可选)tableName(必要):要生成对象的表名;注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会根据设置的schema,catalog或tablename去查询数据表,按照下面的流程:1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询;2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找;3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找;4,否则,使用指定的大小写格式查询;另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名;这个时候,请设置delimitIdentifiers="true"即可保留大小写格式;可选:1,schema:数据库的schema;2,catalog:数据库的catalog;3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面;5,enableInsert(默认true):指定是否生成insert语句;6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get);7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句;8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update);9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete);10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句;11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性);13,modelType:参考context元素的defaultModelType,相当于覆盖;14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性)15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写;--><!-- 实体表配置,需要导出哪些表就配哪些 --><table schema="root" tableName="tf_settle_notify_event"enableCountByExample="false"enableUpdateByExample="false"enableDeleteByExample="false"enableSelectByExample="false"selectByExampleQueryId="false" ></table></context></generatorConfiguration>
四、编写application.yml文件
server:port: 8081spring:datasource:url: jdbc:mysql://localhost:3306/pay?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useLocalSessionState=trueusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource
五、编写数据源
dao模块下添加config包后添加DruidConfig.java文件
package com.zhangsan.boot.config;import com.alibaba.druid.pool.DruidDataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import javax.sql.DataSource;@Configurationpublic class DruidConfig {public static final String MAPPER_BASE_PACKAGE = "com.zhangsan.boot.dao";public static final String ENTITY_BASE_PACKAGE = "com.zhangsan.boot.entity";/*** 数据源* @return*/@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource(){return new DruidDataSource();}/*** SqlSessionFactory* @param dataSource* @return* @throws Exception*/@Beanpublic SqlSessionFactory sqlSessionFactory (@Qualifier("dataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setTypeAliasesPackage(ENTITY_BASE_PACKAGE);ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:mappers/*.xml"));return sqlSessionFactoryBean.getObject();}/*** mapperScannerConfigurer* @return*/@Beanpublic static MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage(MAPPER_BASE_PACKAGE);mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");return mapperScannerConfigurer;}}
六、编写测试controller测试查询数据库
@RestController@Slf4jpublic class TestController {@GetMapping("/test")public String test(){log.info("这是测试");return "success";}@Autowiredprivate PadDeviceService padDeviceService;@GetMapping("/sqlTest")public TPadDevice sqlTest(Long id){log.info("这是测试");TPadDevice padDevice = padDeviceService.getById(id);return padDevice;}}
注:WebApplication 启动类默认只加载同级目录下的bean,所以多模块场景下需要手动指定包扫描路径,让@SpringBootApplication 管理到项目中所有需要加载的bean



