1、pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE
com.hzau
mybatis-plus-demo
0.0.1-SNAPSHOT
mybatis-plus-demo
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
com.baomidou
mybatis-plus-boot-starter
3.3.2
com.baomidou
mybatis-plus-generator
3.3.2
org.springframework.boot
spring-boot-starter-freemarker
com.alibaba
druid-spring-boot-starter
1.1.23
mysql
mysql-connector-java
runtime
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.13
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin
2、application.yml
#配置端口
server:
port: 8082
spring:
datasource:
druid:
#JDBC 配置
url: jdbc:mysql://192.168.39.129:3306/readwrite?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
#连接池配置
#初始化连接数目
initial-size: 1
#连接池支持的最大连接数。一般取值20就可以了,一般把maxActive设置成可能的并发量就行了设 0 为没有限制。
max-active: 20
#连接池中最小空闲连接数,当连接数少于此值时,连接池会创建连接来补充到该值的数量
min-idle: 5
#连接池中连接用完时,新的请求等待时间,毫秒,这里取值-1,表示无限等待,直到超时为止,也可取值9000,表示9秒后超时。
max-wait: 1000
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
pool-prepared-statements: true
#PSCache 大小
max-pool-prepared-statement-per-connection-size: 20
#在连接池返回连接给调用者前用来对连接进行验证的查询 SQL,要求为一条查询语句
validation-query: SELECT 'x'
#在连接池返回连接给调用者前用来对连接进行验证的查询 SQL的超时时间
validation-query-timeout: 100
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
test-on-borrow: false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
test-on-return: false
#建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
test-while-idle: true
#每timeBetweenEvictionRunsMillis毫秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 30000
max-evictable-idle-time-millis: 90000
#属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
#监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
filters: stat,slf4j,wall
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
useGlobalDataSourceStat: true
main:
allow-bean-definition-overriding: true
mybatis-plus:
datasource: dataSource
mapper-locations: classpath:/mapper/*Mapper.xml
#别名扫描
typeAliasesPackage: com.hzau.*.entity
上面配置了数据源、mapper文件的位置、mybatis别名扫描包
3、启动类上加上
扫描mapper接口
@MapperScan({"com.hzau.*.dao","com.hzau.*.mapper"})
4、配置数据源
package com.hzau.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.sql.SQLException;
/**
* @ClassName DruidDBConfig
* @Description TODO
* @Author yueyiming
* @Date 2020/7/23 17:45
* @Version 1.0
* https://blog.csdn.net/hzau_itdog
**/
@Data
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDBConfig {
private String url;
private String username;
private String password;
private String driverClassName;
/**
* 初始化连接数目
*/
private int initialSize;
/**
* 连接池支持的最大连接数。一般取值20就可以了,一般把maxActive设置成可能的并发量就行了设 0 为没有限制。
*/
private int maxActive;
/**
* 连接池中最小空闲连接数,当连接数少于此值时,连接池会创建连接来补充到该值的数量
*/
private int minIdle;
/**
* 连接池中连接用完时,新的请求等待时间,毫秒,这里取值-1,表示无限等待,直到超时为止,也可取值9000,表示9秒后超时。
*/
private int maxWait;
/**
* 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
*/
private boolean poolPreparedStatements;
/**
* PSCache 大小
*/
private int maxPoolPreparedStatementPerConnectionSize;
/**
* 在连接池返回连接给调用者前用来对连接进行验证的查询 SQL,要求为一条查询语句
*/
private String validationQuery;
/**
* 在连接池返回连接给调用者前用来对连接进行验证的查询 SQL的超时时间
*/
private int validationQueryTimeout;
/**
* 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
*/
private boolean testOnBorrow;
/**
* 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
*/
private boolean testOnReturn;
/**
* 议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
*/
private boolean testWhileIdle;
/**
* 每timeBetweenEvictionRunsMillis毫秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止
*/
private int timeBetweenEvictionRunsMillis;
private int minEvictableIdleTimeMillis;
private int maxEvictableIdleTimeMillis;
/**
* 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
* 监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
*/
private String filters;
/**
* 通过connectProperties属性来打开mergeSql功能;慢SQL记录
*/
private String connectionProperties;
/**
* 合并多个DruidDataSource的监控数据
*/
private boolean useGlobalDataSourceStat;
@Bean //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.url);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
//configuration
datasource.setInitialSize(initialSize);
datasource.setMaxActive(maxActive);
datasource.setMinIdle(minIdle);
datasource.setMaxWait(maxWait);
datasource.setPoolPreparedStatements(poolPreparedStatements);
datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
datasource.setValidationQuery(validationQuery);
datasource.setValidationQueryTimeout(validationQueryTimeout);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
}
datasource.setConnectionProperties(connectionProperties);
datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
return datasource;
}
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// IP白名单
// servletRegistrationBean.addInitParameter("allow", "192.168.2.25,127.0.0.1");
// IP黑名单(共同存在时,deny优先于allow)
//servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
//控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "9527");
//是否能够重置数据 禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}