这个springboot集成druid和tk.mybatis是在之前Idea搭建多模块聚合maven项目的基础上完成的
https://segmentfault.com/a/1190000021385783
1.druid是什么?
Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池。
2.tk.mybatis是什么?
通用Mapper,优点是可以缓存,全部针对单表操作,每个实体类都需要继承通用Mapper接口来获得通用方法,目前新版也可以针对多表进行操作,但是就不能使用二级缓存。
3.mybatis-genertor是什么?
是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件。
4.springboot集成mybatis-genertor生成dao层的实体和mapper,我把这个集成放到fire-common层
pom.xml
<!--模块依赖-->
<dependencies>
<!--生成mapper所需要的jar-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis-generator.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${tk-mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<!--生成mapper所需要的jar-->
<!--mysql链接jar-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencies>
genertor.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="MysqlTables" targetRuntime="MyBatis3Simple">
<property name="javaFileEncoding" value="UTF-8" />
<property name="javaFileEncoding" value="UTF-8" />
<property name="useMapperCommentGenerator" value="false" />
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers"
value="tk.mybatis.mapper.common.Mapper" />
<property name="caseSensitive" value="true" />
<property name="forceAnnotation" value="true" />
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
</plugin>
<plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin">
<property name="targetProject"
value="E:/IdeaProject/fire/fire-dao/src/main/java" />
<property name="targetPackage" value="cn.yskcoder.fire.dao" />
<property name="mapperSuffix" value="Dao" />
<property name="templatePath" value="generator/mapper.ftl" />
<property name="fileName"
value="${tableClass.shortClassName}${mapperSuffix}.java" />
</plugin>
<!--去除注释 -->
<commentGenerator>
<property name="suppressDate" value="true" />
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/fire" userId="root"
password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="useJSR310Types" value="true" />
</javaTypeResolver>
<!-- ★★★生成实体类的包名和位置★★★要保证目录存在 -->
<javaModelGenerator
targetPackage="cn.yskcoder.fire.model"
targetProject="E:/IdeaProject/fire/fire-dao/src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- ★★★生成的映射文件包名和位置★★★要保证目录存在 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="E:/IdeaProject/fire/fire-dao/src/main/resources">
<property name="enableSubPac kages" value="false" />
</sqlMapGenerator>
<!-- 要生成那些表(更改tableName就可以); %为通配符,可以生成全部表 -->
<!-- <table tableName="B%" enableCountByExample="false" -->
<table tableName="sys_user" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
Genertor.java
package cn.yskcoder.fire.generator;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 自动生成Mybatis相关的代码和配置文件
*
* @author: yskcoder
* @createDate: 2019/12/25 18:59
* @version: 1.0
*/
public class Generator {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
InputStream stream = Class.class.getResourceAsStream("/mybatis-generator.xml");
Configuration config =
cp.parseConfiguration(stream);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
for (String warning : warnings) {
System.out.println(warning);
}
System.out.println("恭喜你,生成Mybatis相关的代码完成!");
}
}
5.springboot集成druid和tk.mybatis
pom.xml,这里将spring-boot-starter-web放到了fire-service里面因为要用注解的原因
<!--模块依赖-->
<dependencies>
<dependency>
<groupId>cn.yskcoder.fire</groupId>
<artifactId>fire-service</artifactId>
<version>v1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 阿里巴巴druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<!--mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper-spring-boot-tarter.version}</version>
</dependency>
</dependencies>
application.yml
##########################################################
################## Fire项目的配置 #######################
##########################################################
################### 项目启动端口 ########################
server:
port: 80
################### spring配置 #########################
spring:
profiles:
datasource:
url: jdbc:mysql://localhost:3306/fire?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&jdbcCompliantTruncation=false&serverTimezone=GMT%2B8
username: root
password: 123456
resources:
static-locations: classpath:/webapp/
mvc:
static-path-pattern: /static/**
view:
prefix: /WEB-INF/view/
################### tk.mybaties配置 #########################
mybatis:
type-aliases-package: cn.yskcoder.fire.model
mapper-locations: classpath*:mapper/*.xml
通过注解的方式配置数据库数据源DruidProperties
Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DruidProperties {
private String url = "jdbc:mysql://127.0.0.1:3306/fire?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
private String username = "root";
private String password = "123456";
private String driverClassName = "com.mysql.cj.jdbc.Driver";
private Integer initialSize = 4;
private Integer minIdle = 2;
private Integer maxActive = 30;
private Integer maxWait = 60000;
private Integer timeBetweenEvictionRunsMillis = 60000;
private Integer minEvictableIdleTimeMillis = 300000;
private String validationQuery = "SELECT 'x'";
private Boolean testWhileIdle = true;
private Boolean testOnBorrow = false;
private Boolean testOnReturn = false;
private Boolean poolPreparedStatements = true;
private Integer maxPoolPreparedStatementPerConnectionSize = 30;
private String filters = "stat";
public DataSource config(DruidDataSource dataSource){
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driverClassName);
dataSource.setInitialSize(initialSize); //定义初始连接数
dataSource.setMinIdle(minIdle); //最小空闲
dataSource.setMaxActive(maxActive); //定义最大连接数
dataSource.setMaxWait(maxWait); //最长等待时间
// 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
// 配置一个连接在池中最小生存的时间,单位是毫秒
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
// 打开PSCache,并且指定每个连接上PSCache的大小
dataSource.setPoolPreparedStatements(poolPreparedStatements);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
try {
dataSource.setFilters(filters);
} catch (SQLException e) {
e.printStackTrace();
}
return dataSource;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public Integer getInitialSize() {
return initialSize;
}
public void setInitialSize(Integer initialSize) {
this.initialSize = initialSize;
}
public Integer getMinIdle() {
return minIdle;
}
public void setMinIdle(Integer minIdle) {
this.minIdle = minIdle;
}
public Integer getMaxActive() {
return maxActive;
}
public void setMaxActive(Integer maxActive) {
this.maxActive = maxActive;
}
public Integer getMaxWait() {
return maxWait;
}
public void setMaxWait(Integer maxWait) {
this.maxWait = maxWait;
}
public Integer getTimeBetweenEvictionRunsMillis() {
return timeBetweenEvictionRunsMillis;
}
public void setTimeBetweenEvictionRunsMillis(Integer timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}
public Integer getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}
public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}
public String getValidationQuery() {
return validationQuery;
}
public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}
public Boolean getTestWhileIdle() {
return testWhileIdle;
}
public void setTestWhileIdle(Boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}
public Boolean getTestOnBorrow() {
return testOnBorrow;
}
public void setTestOnBorrow(Boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
public Boolean getTestOnReturn() {
return testOnReturn;
}
public void setTestOnReturn(Boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}
public Boolean getPoolPreparedStatements() {
return poolPreparedStatements;
}
public void setPoolPreparedStatements(Boolean poolPreparedStatements) {
this.poolPreparedStatements = poolPreparedStatements;
}
public Integer getMaxPoolPreparedStatementPerConnectionSize() {
return maxPoolPreparedStatementPerConnectionSize;
}
public void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) {
this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
}
配置mybatis通过注解类的方式MyBatisConfig
/**
* mybatisConfig配置类
*
* @author: yskcoder
* @createDate: 2019/12/25 16:20
* @version: 1.0
*/
@Configuration
public class MyBatisConfig {
@Autowired
DruidProperties druidProperties;
/**
* Fire数据源
*/
private DruidDataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
druidProperties.config(dataSource);
return dataSource;
}
@Bean
public DruidDataSource datasource() {
return dataSource();
}
}
6.具体的代码可以参考Fire
https://github.com/yskcoder/Fire
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。