「Spring Boot笔记」数据库持久化集成(Durid+MyBatisPlus)

413 阅读3分钟

数据库: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/,可以看到如下登录页面:

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

参考文档