• 【SpringBoot】数据访问 —— MySQL


    一、导入场景

    1. 导入 JDBC 场景

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-jdbcartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4

    此时,导入了数据源、 jdbc 、事务 ;
    未导入数据库驱动——原因是不知道用何种数据库
    在这里插入图片描述
    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

        <properties>
            <mysql.version>5.1.49mysql.version>
        properties>
    
    • 1
    • 2
    • 3

    二、修改配置项

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

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/xxxxName
        username: root
        password: 5201314love
        driver-class-name: com.mysql.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解释:

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

    原理分析

    导入的自动配置类

    • DataSourceAutoConfiguration —— 数据源的自动配置组件 ,修改 spring.datasource 配置项修改数据源的配置
      在这里插入图片描述

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

    • jdbcTemplateAutoConfiguration —— jdbcTemplate 的自动配置组件,可以用来对数据进行 crud。通过修改配置项 spring.jdbc 来修改jdbcTemplate的自动配置
      在这里插入图片描述

    • … 其他自动配置类…

    三、使用 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;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    我们可以通过 SpringBoot 提供的自动测试类对数据库是否连接成功进行单元测试,自动测试类位于:
    在这里插入图片描述

    测试代码如下:

    我的数据库中有一 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);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    【面试题精讲】什么是websocket?如何与前端通信?
    React(8)-组件ref
    flink中配置Rockdb的重要配置项
    Spring框架的两大核心IOC&DI
    MySQL 主从 AUTO_INCREMENT 不一致问题分析
    GPS报文中经度纬度的表示方法,以及GGA报文的解析
    Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)
    摆动序列【贪心4】
    靠着这份Linux资料,我混进了小公司中层,涨薪6K(今天免费领)
    线性表的链式表示和实现
  • 原文地址:https://blog.csdn.net/liuwanqing233333/article/details/127415030