Spring — использование сценариев SQL с Spring JDBC + JPA + HSQLDB

Опубликовано: 27 Сентября, 2022

Мы будем запускать сценарии SQL с помощью Spring JDBC + JPA + HSQLDB. Эти сценарии используются для выполнения команд SQL во время запуска приложения. Java Database Connectivity (JDBC) — это интерфейс прикладного программирования (API) для языка программирования Java, который определяет, как клиент может получить доступ к базе данных. JPA — это всего лишь спецификация, упрощающая объектно-реляционное отображение для управления реляционными данными в приложениях Java. Мы будем использовать JDBC в качестве соединителя и JPA с HSQLDB , которая является ведущей системой реляционных баз данных SQL, написанной на Java. Он предлагает небольшой, быстрый многопоточный и транзакционный механизм базы данных с таблицами в памяти и на диске и поддерживает встроенный и серверный режимы. Он включает в себя мощный инструмент SQL командной строки и простые инструменты запросов с графическим интерфейсом. Для написания SQL-скриптов нам нужно изменить конфигурацию DataSource. DataSource — это имя, данное соединению, установленному с сервером к базе данных.

Шаги, которые необходимо выполнить

Шаг 1. Добавьте зависимость в файл pom

XML




<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
  
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.0</version>
    <scope>runtime</scope>
</dependency>

Шаг 2. Создайте файл конфигурации DataSource, указав сведения о БД и расположение файла схемы.

Мы создадим экземпляр DataSource .

Java




// This function create a datasource. Here we will provide
// the DB details like driver,db name,etc
private DataSource createDataSource() {                                  
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();    
    dataSourceBuilder.driverClassName("com.mysql.cj.jdbc.Driver");       
    dataSourceBuilder.url("jdbc:mysql://localhost:3306/geeksforgeeks");  
    dataSourceBuilder.username("root");                                  
    dataSourceBuilder.password("Truthpolls@464");                        
    return dataSourceBuilder.build();                                    
}

Мы создадим DatabasePopulator , который будет заполнять данные в таблицы.

Java




// This is database populator which will read the SQL script.
private DatabasePopulator createDatabasePopulator() {                                
    ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();   
    databasePopulator.setContinueOnError(true);                                      
    databasePopulator.addScript(new ClassPathResource("schema.sql"));                
    return databasePopulator;                                                        
}

Затем мы выполним заполнитель для источника данных, который мы создали, используя DatabasePopulatorUtils .

Java




// This is the bean which connects the application to the database. 
// We will use the datasource and the database populator
// for performing commands on the Database
@Bean(name = "dataSource")                                                  
public DataSource getDataSource(){                                          
    DataSource dataSource = createDataSource();                             
    DatabasePopulatorUtils.execute(createDatabasePopulator(), dataSource);  
    return dataSource;                                                      
}

Эти изменения конфигурации, которые мы сделали для Bean, называются «dataSource».

Java




package com.geeksforgeeks.Spring.MVC.Pagination.configs;
  
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
  
import javax.sql.DataSource;
  
// annotated as configuration so application
// knows to run it in the start
@Configuration
public class DataSourceConfig {
    @Bean(name = "dataSource")
    public DataSource getDataSource(){
        DataSource dataSource = createDataSource();
        DatabasePopulatorUtils.execute(createDatabasePopulator(), dataSource);
        return dataSource;
    }
  
    private DatabasePopulator createDatabasePopulator() {
        ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
        databasePopulator.setContinueOnError(true);
        databasePopulator.addScript(new ClassPathResource("schema.sql"));
        return databasePopulator;
    }
  
    private DataSource createDataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.hsqldb.jdbc.JDBCDriver");
        dataSourceBuilder.url("jdbc:hsqldb:hsql://localhost/geeksforgeeks");
        dataSourceBuilder.username("root");
        dataSourceBuilder.password("pass");
        return dataSourceBuilder.build();
    }
}

Шаг 3. Затем создайте сценарии SQL

insert into car (id, name, price) values (default, ‘Audi’,3000000 )
insert into car (id, name, price) values (default, ‘BMW’,4000000 )
insert into car (id, name, price) values (default, ‘Jaguar’,3500000 )

insert into book (id, name, price) values (default, ‘Book-1’,600 )
insert into book (id, name, price) values (default, ‘Book-2’,500 )
insert into book (id, name, price) values (default, ‘Book-3’,800 )
 

Когда мы запустим это приложение, эти сценарии будут запущены, и база данных будет заполнена. Теперь база данных выглядела так (приложение запускалось дважды).

Выход:

Забронировать стол

Автомобильный стол