SpringBoot 开发实用篇


文章目录

  • SpringBoot
  • SpringBoot 开发实用篇
  • 4 数据层解决方案
  • 4.1 内置数据源
  • 4.1.1 现有数据层解决方案
  • 4.1.2 小结


4 数据层解决方案

4.1 内置数据源
4.1.1 现有数据层解决方案

Druid + MyBatis-Plus + MySQL

  • 数据源:DruidDataSource
  • 持久化技术:MyBatis-Plus / MyBatis
  • 数据库:MySQL

在我们之前的工程中

springboot数据库项目 springboot 创建数据库_spring boot

这两个其实我们是没有配置druid 数据源的,难道它就没有用到数据源技术吗?

【答案当然是否定的】

【对于druid 的数据源配置格式】

两种

springboot数据库项目 springboot 创建数据库_spring boot_02

下面这种格式需要导入druid 的starter 坐标

【如果我没有指定这个,它的数据源是什么?】

【创建新模块】

创建一个新的模块

springboot数据库项目 springboot 创建数据库_数据源_03

依赖都不勾

springboot数据库项目 springboot 创建数据库_spring boot_04

直接创建

springboot数据库项目 springboot 创建数据库_spring boot_05

一个全新的 SpringBoot 工程

手动添加依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

就是这些基本的

springboot数据库项目 springboot 创建数据库_mybatis_06

创建实体类

package com.dingjiaxiong.domain;

import lombok.Data;

/**
 * ClassName: Book
 * date: 2022/10/20 10:52
 *
 * @author DingJiaxiong
 */

@Data
public class Book {
    
    private int id;
    private String name;
    private String type;
    private String description;
    
}

数据层接口

package com.dingjiaxiong.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dingjiaxiong.domain.Book;
import org.apache.ibatis.annotations.Mapper;

/**
 * ClassName: BookDao
 * date: 2022/10/20 10:53
 *
 * @author DingJiaxiong
 */

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

配置文件

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      username: root
      password: 200039

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto

  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

编写测试类

package com.dingjiaxiong;

import com.dingjiaxiong.dao.BookDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Springboot15SqlApplicationTests {

    @Autowired
    private BookDao bookDao;

    @Test
    void test() {
        bookDao.selectById(1);
    }

}

测试结果

springboot数据库项目 springboot 创建数据库_数据源_07

OK,没问题

看看druid 在哪儿

springboot数据库项目 springboot 创建数据库_spring boot_08

springboot数据库项目 springboot 创建数据库_springboot数据库项目_09

再下面就是数据库操作了

【两种配置druid 的方式运行出来没有区别】

现在我不想用druid 了

springboot数据库项目 springboot 创建数据库_spring boot_10

再运行测试

springboot数据库项目 springboot 创建数据库_springboot数据库项目_11

成功了,

仔细观察

springboot数据库项目 springboot 创建数据库_数据源_12

我好像没用,但是还是用了【哈哈哈哈哈】

【为什么】

现在加载的druid 是SpringBoot 的自动配置功能,我们导入了starter 之后,它就有这功能了

springboot数据库项目 springboot 创建数据库_数据源_13

现在直接把它注掉

springboot数据库项目 springboot 创建数据库_数据源_14

再次运行

springboot数据库项目 springboot 创建数据库_springboot数据库项目_15

运行成功了,而且好像有个新的数据源

这就是我们啥也没配的情况下,SpringBoot 默认的数据源

【介绍一下】

SpringBoot提供了3种内嵌的数据源对象供开发者选择

  • HikariCP【默认】【超快】
  • Tomcat提供DataSource
  • commons DBCP

对Hikari 做进一步的配置

springboot数据库项目 springboot 创建数据库_springboot数据库项目_16

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
    hikari:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 200039

改成这样子,再测试一次

springboot数据库项目 springboot 创建数据库_mybatis_17

OK, 依然可以正常使用

url 不能拿下来

还有其他很多hikari数据源 专用的配置

回顾一下

springboot数据库项目 springboot 创建数据库_spring boot_18

springboot数据库项目 springboot 创建数据库_java_19

4.1.2 小结
  1. SpringBoot内置3款数据源可供选择
  • HikariCP(默认)
  • Tomcat提供DataSource
  • Commons DBCP