【SpringBoot】数据访问 —— MySQL

一、导入场景

1. 导入 JDBC 场景

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>

此时,导入了数据源、 jdbc 、事务 ;
未导入数据库驱动——原因是不知道用何种数据库
【SpringBoot】数据访问 —— MySQL_第1张图片
2. 导入 MySQL 驱动

SpringBoot 官方仲裁的 MySQL 驱动版本为 8.0.22,但是我的 MySQL 版本为 5.7,因此需要切换驱动版本,其两种方法如下

方法一:就近依赖,直接引入 5.1.49

   <dependency>
       <groupId>mysqlgroupId>
       <artifactId>mysql-connector-javaartifactId>
       <version>5.1.49version> 
   dependency>

方法二:在当前项目中重新声明仲裁的版本(Maven 属性的就近优先原则)

    <properties>
        <mysql.version>5.1.49mysql.version>
    properties>

二、修改配置项

在 application.yaml 里加入如下配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/xxxxName
    username: root
    password: 5201314love
    driver-class-name: com.mysql.jdbc.Driver

解释:

  1. url :数据库访问地址 ,访问本地 MySQL 数据库前缀都是 jdbc:mysql://localhost:3306, xxxxName为要建立连接的数据库名
  2. username,password: 为自己数据库的设置的用户名和密码
  3. driver-class-name: 数据库驱动类名,mysql 的驱动类名为com.mysql.jdbc.Driver

原理分析

导入的自动配置类

  • DataSourceAutoConfiguration —— 数据源的自动配置组件 ,修改 spring.datasource 配置项修改数据源的配置
    【SpringBoot】数据访问 —— MySQL_第2张图片

  • DataSourceTransactionManagerAutoConfigutation —— 事务管理的自动配置组件

  • jdbcTemplateAutoConfiguration —— jdbcTemplate 的自动配置组件,可以用来对数据进行 crud。通过修改配置项 spring.jdbc 来修改jdbcTemplate的自动配置
    【SpringBoot】数据访问 —— MySQL_第3张图片

  • … 其他自动配置类…

三、使用 jdbcTemplate 进行数据库连接的测试

jdbcTemplateAutoConfiguration其在容器中放了 jdbcTemplate 这个组件用来对数据库进行操作

	@Bean
	@Primary
	JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) {
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
		JdbcProperties.Template template = properties.getTemplate();
		jdbcTemplate.setFetchSize(template.getFetchSize());
		jdbcTemplate.setMaxRows(template.getMaxRows());
		if (template.getQueryTimeout() != null) {
			jdbcTemplate.setQueryTimeout((int) template.getQueryTimeout().getSeconds());
		}
		return jdbcTemplate;
	}

我们可以通过 SpringBoot 提供的自动测试类对数据库是否连接成功进行单元测试,自动测试类位于:
【SpringBoot】数据访问 —— MySQL_第4张图片

测试代码如下:

我的数据库中有一 orders 表,下面代码为查看 orders 表中有多少条记录,通过这个测试数据库是否连接成功


@Slf4j
@SpringBootTest
class DemoAdminApplicationTests {
    @Autowired // 自动注入注解
    JdbcTemplate jdbcTemplate;
    @Test
    void contextLoads() {
        Long along = jdbcTemplate.queryForObject("select count(*) from orders", Long.class);
        log.info("订单表中的记录数为" + along);
    }

}

你可能感兴趣的:(SpringBoot,mysql,spring,boot,java)