数据库:mysql 8.0.28
一、使用数据库连接池Druid
第一步:在pom.xml中引入druid官方提供的Spring Boot Starter封装。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.9</version>
</dependency>
第二步:在application.yml中配置数据库连接信息及Druid。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1/jasmine?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: abc123
druid:
# 初始化时建立物理连接的个数
initialSize: 1
# 最小连接池数量
minIdle: 3
# 最大连接池数量
maxActive: 20
# 获取连接时最大等待时间,单位毫秒
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 30000
# 用来检测连接是否有效的sql,要求是一个查询语句,常用select ‘x’
validationQuery: select 'x'
# 建议配置为true,不影响性能,并且保证安全性
testWhileIdle: true
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnBorrow: false
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
poolPreparedStatements: true
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: config,stat,slf4j
stat-view-servlet:
# 启用StatViewServlet(监控页面)
enabled: true
# 监控页面的登录账户
login-username: admin
# 监控页面的登录密码
login-password: admin
# 是否允许清空统计数据
reset-enable: true
第三步:完成上面所有配置之后,启动应用,访问Druid的监控页面http://ip:port/druid/,可以看到如下登录页面:
二、集成MyBatis-Plus
第一步:在pom.xml中引入mybatis-plus官方提供的Spring Boot Starter封装。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
第二步:在application.yml中配置MyBatis-Plus。
mybatis-plus:
# MyBatis Mapper 所对应的 XML 文件位置
mapper-locations: classpath*:/com/jasmine/*/*/dao/*Dao.xml
# MyBaits 别名包扫描路径
typeAliasesPackage: com.jasmine.*.*.entity
configuration:
# 是否开启自动驼峰命名规则映射
map-underscore-to-camel-case: true
# 开启 Mybatis 二级缓存,默认为 true
cache-enabled: false
第三步:创建一个MyBatis-Plus配置类,内部配置了mapper接口的扫描路径和MyBatisPlus的分页插件。
@Configuration
@MapperScan("com.jasmine.**.dao")
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false
* 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
三、编写示例程序
第一步:创建一个实体类DictType.java
@Data
@TableName("sys_dict_type")
@EqualsAndHashCode(callSuper = true)
public class DictType extends BaseEntity {
/** 主键 */
@TableId
private Long id;
/** 字典类型编码 */
private String code;
/** 字典类型名称 */
private String name;
/** 状态 */
private Integer status;
/** 排序序号 */
private Integer orderNo;
}
第二步:创建一个Mapper接口DictTypeDao.java
public interface DictTypeDao extends BaseMapper<DictType> {
}
第三步:创建Service类DictTypeService.java
@Service
public class DictTypeService {
@Resource
private DictTypeDao dictTypeDao;
/** 查询所有数据 */
public List<DictType> list() {
return dictTypeDao.selectList(null);
}
}
第四步:编写控制器类DictTypeController.java
@RestController
@RequestMapping("/dictType")
public class DictTypeController {
@Resource
private DictTypeService dictTypeService;
@GetMapping("/list")
public List<DictType> list() {
return dictTypeService.list();
}
}
第五步:在数据库创建表
DROP TABLE IF EXISTS `sys_dict_type`;
CREATE TABLE `sys_dict_type` (
`id` bigint NOT NULL COMMENT '主键',
`code` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '编码',
`name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称',
`status` int DEFAULT '1' COMMENT '状态',
`order_no` int DEFAULT '9999' COMMENT '排序序号',
`create_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
`update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典类型';
第六步:调用接口测试http://localhost:8001/dictType/list