Skip to content

Работа со встроенной базой данных H2

Синопсис

В прошлом посте Работа с базой данных через 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.

Info
Скрипты для MySQL из предыдущего примера совместимы с H2.

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, но для них нужно добавить соответствующую зависимость в помчике.

Поделиться в социальных сетях

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс