Исследование принципа встроенной в SpringBoot 2.X автоматической настройки jdbc

Spring Boot

предисловиеSpringbootДля уровня доступа к данным либоSQLещеNOSQL,Spring BootНижний слойSpring Dataобрабатываются в едином порядке. Spring Data — известный проект на том же уровне, что и Spring Boot и Spring Cloud в семействе Spring. Чтобы лучше понять Sping Data, вы можете обратиться к официальному сайту Sping Data:spring.IO/проекты/билеты…

На самом деле интеграция jdbc с Springboot в основном не используется предприятиями, но зачем вам ее изучать? Почему я снова пишу такую ​​статью? Это также очень просто, как и программа HelloWorld.В конце концов, jdbc является самой базовой основой для подключения к базе данных.Не забывайте об основе, придавайте большое значение основе и не забывайте о первоначальном намерении.

1. Создайте среду проекта jdbc

Проверить при созданииWeb,jdbc,MySQLЭто

在这里插入图片描述
pom.xmlПо умолчанию файл будет иметь следующие зависимости:

   <dependency>
   <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-jdbc</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

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

После того, как вышеизложенное настроено, как мне написать его для доступа к базе данных? На самом деле в SpringBoot нам нужна только простая конфигурация для подключения к базе данных;

2. Напишите файл конфигурации

В файле конфигурации application.yml пропишите соединение общей конфигурации jdbc

spring:
  datasource:
    username: root
    url: jdbc:mysql://localhost:3306/ufida
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

В версии springboot2.X, еслиspring.datasource.urlЕсли часовой пояс не указан, следует сообщатьSQLExceptionошибка

在这里插入图片描述
Добавьте часовой пояс к указанному выше атрибуту URL следующим образом:

url: jdbc:mysql://localhost:3306/ufida?serverTimezone=UTC

Одно замечание: я использую MySQL версии 5.7:

在这里插入图片描述
После настройки вы можете использовать его напрямую, потому что SpringBoot автоматически настроил его для нас по умолчанию! Вы тронуты плакать?

3, тестовый тестовый класс

@SpringBootTest
class JdbcbootApplicationTests {
//第一步:DI注入数据源
    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
//第二步:测试代码
        System.out.println("默认使用的数据源:" + dataSource.getClass());

        Connection connection = dataSource.getConnection();
        System.out.println("获取的连接:" + connection);
        connection.close();
    }
}

在这里插入图片描述
В результатах вывода видно, что источник данных по умолчанию, настроенный для нас,class com.zaxxer.hikari.HikariDataSource, Мы не настраивали это вручную. Вот, это пробудило ваше любопытство~ Я не знаю, любопытно ли вам, в любом случае, Ичунь очень любопытен~, поэтому все автоматические настройки источника данных, найденного глобальным поиском, находятся в :DataSourcePropertiesПод файлом, не спрашивайте меня, откуда я знаю, что он под этим файлом, дайте картинку, и вы будете знать столько же, сколько и я
在这里插入图片描述
Далее мы можем изучить принцип автоматической настройки здесь и какие свойства можно настроить.
在这里插入图片描述
Как можно заметитьSpring Boot 2.2.2Использовать по умолчаниюcom.zaxxer.hikari.HikariDataSourceИсточники данных и предыдущие версии, такие какSpring Boot 1.5Использовать по умолчаниюorg.apache.tomcat.jdbc.pool.DataSourceКак источник данных, так как причина тоже очень проста, слышалHikariDataSourceВ настоящее время это самый быстрый источник данных.По сравнению с традиционными пулами соединений, такими как C3P0, DBCP, Tomcat jdbc и т. д., он более «хитрый», поэтому Springboot использует его в качестве источника данных по умолчанию.

Поскольку это автоматическая конфигурация, в соответствии с процедурой Springboot предполагается, что существуетDataSourceXXXAutoConfigurationМатериал, сделайте глобальный поиск,

在这里插入图片描述
Конечно же, естьDataSourceAutoConfigurationкласс, давай войдем и прогуляемся
在这里插入图片描述
Этот класс не что иное, как автоматическая настройка некоторых источников данных, пулов и т.д. Важно отметить, что
在这里插入图片描述
можно использоватьspring.datasource.typeУкажите пользовательский тип источника данных, значение должно использовать полное имя реализации пула соединений. По умолчанию он автоматически обнаруживается из пути к классам, а исходный код выглядит следующим образом:

    @Configuration
    @ConditionalOnMissingBean({DataSource.class})
    @ConditionalOnProperty(
        name = {"spring.datasource.type"}
    )
    static class Generic {
        Generic() {
        }

        @Bean
        public DataSource dataSource(DataSourceProperties properties) {
            return properties.initializeDataSourceBuilder().build();
        }
    }

ХОРОШО,DataSourceAutoConfigurationИсходный код увидит это, конкретный вы можете просмотреть.

4, принцип автоматической настройки JdbcTemplate

иметь источник данныхHikariDataSourceполучить соединение с базой данныхjava.sql.Connection, с соединением это эквивалентно использованию соединения и собственных операторов JDBC для работы с базой данных дляcrud, думаю, в этот момент я подумаю о JdbcTemplate, ведь хорошими вещами нужно пользоваться разумно!

Здесь не разрешено использовать сторонний фреймворк для работы с базами данных MyBatis, ведь Spring сам сделал облегченную инкапсуляцию нативного JDBC.org.springframework.jdbc.core.JdbcTemplate.

Поскольку это автоматическая конфигурация, мы должны подумать оJdbcTemplateПринцип автоконфигурации зависит отorg.springframework.boot.autoconfigure.jdbcПод пакетом, что неудивительно, в пакете действительно естьJdbcTemplateAutoConfigurationДобрый. следующим образом

在这里插入图片描述

5. Тест CRUD после того, как Springboot интегрирует jdbc

Поскольку вы можете использовать jdbcTemplate, вы можете использовать его. Не забудьте автоматически внедрить его следующим образом.

@Autowired
JdbcTemplate jdbcTemplate;

Что касается кода CRUD, то он здесь описываться не будет, в этой статье в основном исследуется принцип встроенной в Springboot автоматической настройки jdbc. Независимо от того, какой фреймворк вы изучаете, речь идет не об изучении конфигурации, а, что более важно, о мышлении!

Если эта статья хоть немного вам поможет, то ставьте лайк, спасибо~

Наконец, если есть какие-либо недостатки или неточности, добро пожаловать на исправления и критику, большое спасибо! Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение и ответьте как можно скорее!

Приглашаю всех обратить внимание на мою официальную учетную запись, там есть некоторые учебные материалы по Java и большая волна электронных книг по Java, таких как всесторонняя виртуальная машина Java г-на Чжоу Чжимина, идеи программирования Java, тома основных технологий, большой разговор о дизайне. паттерны, борьба с параллельным программированием на Java... .. Это все библия Java, не говоря уже о том, чтобы садиться в машину Tomcat, поехали! Самое главное — вместе обсуждать технологии, тосковать по технологиям, заниматься технологиями, а когда они согласованы, это друг по горшку…

在这里插入图片描述