• 【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
  • 相关阅读:
    程序员提高效率的工具和习惯分享
    ospf多区域原理和配置
    Head First设计模式(阅读笔记)-05.单例模式
    苹果爆出台积电及三星3纳米制程良率远低于60% | 百能云芯
    SpringBoot内置工具类之断言Assert的使用与部分解析
    SSM+SB面试题收集
    2022.8.9-----leetcode.1413
    《c++程序设计》谭浩强课后习题答案 第一张
    游戏企业通关秘籍:华为云游戏全场景能力,开发+部署+运营“关关难过关关过”...
    计算机基础 - 二进制
  • 原文地址:https://blog.csdn.net/liuwanqing233333/article/details/127415030