Синопсис
В прошлом посте Работа с базой данных через JDBC мы прошли шаг за шагом по реализации приложения которое взаимодействует с базой данных. Для хранения данных была выбрана СУБД MySQL. В этом посте мы создадим такое же приложение, но в качестве базы данных будет использоваться дефолтовая база данных H2. Дефолтовая, потому что она используется только на этапе разработки приложения, пока еще мы не определились с конкретной базой данных. Это делается для того, чтобы не приходилось настраивать полный энвайронмент для запуска приложения, который к тому же может поменяться.
Весь проект можно взять с gitHub: https://github.com/dev-blogs/database/tree/master/inner-database
База данных и структура проекта
База данных и структура проекта будет идентичная той, которую мы создали в посте Работа с базой данных через JDBC только без класса DataSource, так как в место него мы получим источник данных от Spring. Будет еще несколько отличий. В скриптах создания и наполнения данными не нужно создавать базу данных инструкцией CREATE DATABASE, а так же не нужно указывать через инструкцию SET с какой базой данных мы собираемся работать. Таким образом нужно удалить из скриптов строчки:
CREATE DATABASE warehouse CHARACTER SET utf8; USE warehouse;
из файла create-data-model.sql и строчку:
USE warehouse;
из файла fill-database.sql.

Java Код
Java кода не будет, так как все классы предметной области, DAO слой и тесты остаются без изменения, по этому для экономии времени я их тут не привожу, их можно взять от сюда или сюда.
Изменения есть только в pom.xml и в конфигурационном файлах.
В помчик нужно добавить зависимость на H2 (строчки 35-39):
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.dev.blogs</groupId> <artifactId>inner-database</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>inner-database</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.2.7.RELEASE</spring.version> </properties> <dependencies> <!-- jdbc:embedded-database --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.160</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>
Зависимости на MySQL в помчике уже не нету, так как приложение в место MySQL работает с H2.
spring-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd"> <jdbc:embedded-database id="dataSource" type="H2"> <jdbc:script location="classpath:create-data-model.sql" /> <jdbc:script location="classpath:fill-database.sql" /> </jdbc:embedded-database> <context:component-scan base-package="com.dev.blogs" /> </beans>
Что произошло в новом конфигурационном файле? В этот раз мы заменили наш источник данных com.dev.blogs.DataSource на встроенную базу данных, которую спринг автоматически поднимает и делает ее доступной как источник данных.
В файле конфигурации мы объявили пространство имен jdbc в дескрипторе beans. После этого мы используем дескриптор jdbc:embedded-database для объявления встроенной базы данных. Заметим, что мы никаких юзеров и паролей для встроенной базы данных не указываем, а все что мы указываем это лежащие в класспасе скрипты без указания имени базы данных.
Так же вместо H2 мы можем использовать еще HSQL и Derby, но для них нужно добавить соответствующую зависимость в помчике.