1. Введение в базу данных H2
Адрес базы данных H2:Woohoo. Также 2database.com/HTML/show off. Также…
H2 — это встроенный (не встроенный в устройство) движок базы данных с открытым исходным кодом, представляющий собой библиотеку классов, разработанную на Java, которая может быть непосредственно встроена в приложение, упакована и выпущена вместе с приложением и не ограничена платформой.
-
1.1 Сравнение с другими базами данных с открытым исходным кодом
H2 по сравнению с Derby, HSQLDB, MySQL, PostgreSQL и другими базами данных с открытым исходным кодом, преимущества H2: вклад разработчиков Java, независимый от платформы, b.H2 только пакет JAR, небольшой размер, подходит для встроенной базы данных, c.. есть представляют собой веб-консоль для базы данных управления трубками. Конкретные характеристики следующие:
особенность | H2 | Derby | HSQLDB | MySQL | PostgreSQL |
---|---|---|---|---|---|
чистая Java | yes | yes | yes | no | no |
Поддержка режима памяти | yes | yes | yes | no | no |
Поддержка шифрования базы данных | yes | yes | yes | no | no |
Поддержка драйвера ODBC | yes | no | no | yes | yes |
Поддержка Полный текстовый поиск | yes | no | no | yes | yes |
Он поддерживает многоправильный контроль параллелизма | yes | no | yes | yes | yes |
Занятое пространство (jar/dll) | ~1M | ~2M | ~1M | ~4M | ~6M |
* 1.2 Метод подключения к базе данных H2
База данных H2 поддерживает следующие три метода подключения:
Способ подключения | описывать |
---|---|
Встроенный режим | локальное соединение JDBC |
режим сервера | Удаленное соединение ODBC на основе JDBC или tcp/ip |
режим смешивания | Локальные или удаленные одновременные соединения |
Примечание. Все три режима поддерживают два метода хранения данных: в памяти и в файлах. Три режима не имеют ограничений на количество баз данных и соединений с базами данных, которые могут быть открыты одновременно.
Встроенный режим
Встроенный режим — самый простой и быстрый метод подключения.В встроенном режиме приложение запускает базу данных H2 в JVM и подключается через JDBC. Этот режим поддерживает как сохраняемость данных, так и содержимое, и нет ограничений на количество баз данных и соединений с базами данных, которые могут быть открыты одновременно. Схематическая диаграмма выглядит следующим образом:
режим сервера
В режиме сервера приложение удаленно открывает базу данных через JDBC или ODBC API. В этом режиме база данных H2 может быть развернута на разных JVM или разных физических машинах, и несколько приложений могут одновременно подключаться к базе данных H2, подключаясь к серверу H2. Поскольку данные необходимо передавать удаленно по протоколу TCP/IP, режим сервера медленнее, чем встроенный режим для получения данных. Принципиальная схема режима сервера выглядит следующим образом:
режим смешивания
Гибридный режим сочетает в себе функции встроенного режима и режима сервера.Первое приложение открывает базу данных H2 через встроенный режим, и в то же время база данных включается в режим сервера, а другие приложения могут подключаться к базу данных удаленно. Запуск и завершение работы сервера базы данных выполняется в первом приложении. Принципиальная схема смешанного режима выглядит следующим образом:
-
1.3 Формат URL JDBC базы данных H2
База данных H2 поддерживает различные методы подключения и параметры подключения.Формат URL-адреса подключения следующий, а настройки в URL-адресе не чувствительны к регистру.
тема | формат URL | пример |
---|---|---|
локальное встроенное соединение | jdbc:h2:[file:][]< databaseName> | jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only) |
Режим памяти (частный) | jdbc:h2:mem: | |
режим памяти (имя) | jdbc:h2:mem:< databaseName> | jdbc:h2:mem:test_mem |
Режим сервера (TCP/IP) | jdbc:h2:tcp://[:]/[]< databaseName> | jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample jdbc:h2:tcp://localhost/mem:test |
Режим сервера (TLS) | jdbc:h2:ssl://[:]/< databaseName> | jdbc:h2:ssl://localhost:8085/~/sample; |
Шифрование | jdbc:h2:< url>;CIPHER=AES | jdbc:h2:ssl://localhost/~/test;CIPHER=AES jdbc:h2:file:~/secure;CIPHER=AES |
блокировка документов | jdbc:h2:< url>;FILE_LOCK={FILE|SOCKET|NO} | jdbc:h2:file:~/private;CIPHER=AES;FILE_LOCK=SOCKET |
Открыть, только если он существует | jdbc:h2:< url>;IFEXISTS=TRUE | jdbc:h2:file:~/sample;IFEXISTS=TRUE |
Не закрывать базу данных, пока существует виртуальная машина | jdbc:h2:< url>;DB_CLOSE_ON_EXIT=FALSE | |
Имя пользователя Пароль | jdbc:h2:< url>[;USER=< username>][;PASSWORD=< value>] | jdbc:h2:file:~/sample;USER=sa;PASSWORD=123 |
Параметры журнала отладки | jdbc:h2:< url>;TRACE_LEVEL_FILE=< level 0..3> | jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3 |
Игнорировать неизвестные настройки | jdbc:h2:;IGNORE_UNKNOWN_SETTINGS=TRUE | |
Доступ к пользовательскому файлу | jdbc:h2:;ACCESS_MODE_DATA=rws | |
файл базы данных в формате zip | jdbc:h2:zip:< zipFileName>!/< databaseName> | jdbc:h2:zip:~/db.zip!/test |
Режим совместимости | jdbc:h2:< url>;MODE=< databaseType> | jdbc:h2:~/test;MODE=MYSQL |
автоматическое переподключение | jdbc:h2:< url>;AUTO_RECONNECT=TRUE | jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE |
Автоматический режим наложения | jdbc:h2:< url>;AUTO_SERVER=TRUE | jdbc:h2:~/test;AUTO_SERVER=TRUE |
размер страницы | jdbc:h2:< url>;PAGE_SIZE=512 | |
Изменить другие настройки | JDBC: H2: |
jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3 |
2. Консоль базы данных H2
Консольное приложение H2 позволяет подключаться к базе данных H2 через браузер, как показано на схеме ниже. Это типичная модель клиент/сервер, поэтому требуются и сервер, и клиент.
Консоль H2 имеет разные способы запуска под разными операционными системами.Система автора - Mac os.Запускается через командную строку следующим образом:
java -jar h2*.jar
После запуска сервера базы данных H2 автоматически откроется веб-консоль, или вы можете использовать:http://localhost:8082доступ. Интерфейс консоли выглядит следующим образом:
Вы можете установить режим подключения к базе данных в консоли H2.В этой статье установлен режим сервера.Вы можете установить имя пользователя и пароль при первом входе.После первого тестового подключения он вступит в силу, и подключение будет войдите в интерфейс управления базой данных следующим образом. В этом интерфейсе могут выполняться операторы DDL и DML, относящиеся к базе данных.
Примечание. Если вы откроете путь для встроенной базы данных, не позволяют другим приложениям при запуске консоли для подключения к базе данных одновременно подключаться к базе данных; если режим Open является режимом сервера или смешанный режим, при этом другие приложения подключаются к базе данных.
3. Практика базы данных H2
Соответствующая ссылка на конфигурацию базы данных Spring+Mybatis+Mysql:Spring управление транзакциями — программные транзакции, декларативные транзакции, В этой статье представлена практика доступа к базе данных Spring+Mybatis+H2. Конфигурацию Spring+Mybatis см. в предыдущей статье Это событие добавляет зависимости базы данных H2:
...
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.190</version>
</dependency>
...
Конфигурация файла свойств базы данных H2 выглядит следующим образом. В этой статье для доступа к базе данных H2 используется режим памяти:
driver=org.h2.Driver
# 内存模式
url=jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1
# 持久化模式
#url= jdbc:h2:tcp://localhost/~/test1;MODE=MYSQL;DB_CLOSE_DELAY=-1
Файл конфигурации Spring для доступа к базе данных H2:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">
<!-- 引入属性文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
<!-- 自动扫描DAO -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xiaofan.test" />
</bean>
<!-- 配置Mybatis sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis_config.xml"/>
<property name="mapperLocations" value="classpath:user_mapper.xml"/>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<!--<property name="username" value="sa" />-->
<!--<property name="password" value="123" />-->
</bean>
<!-- 初始化数据库 -->
<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
<jdbc:script location="classpath:sql/ddl.sql" />
<jdbc:script location="classpath:sql/dml.sql" />
</jdbc:initialize-database>
<!-- 配置事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Файл оператора DDL для инициализации базы данных:
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
Файл оператора DML для инициализации базы данных:
insert into `user` (`id`,`name`,`age`) values (1, 'Jerry', 27);
insert into `user` (`id`,`name`,`age`) values (2, 'Angel', 25);
Напишите тестовый файл следующим образом:
/**
* Created by Jerry on 17/7/30.
*/
@ContextConfiguration(locations = {"classpath:config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class Test extends AbstractJUnit4SpringContextTests{
@Resource
UserDAO userDAO;
@org.junit.Test
public void testInsert() {
int result = userDAO.insert(new User(null, "LiLei", 27));
Assert.assertTrue(result > 0);
}
@org.junit.Test
public void testUpdate() {
int result = userDAO.update(new User(2L, "Jerry update", 28));
Assert.assertTrue(result > 0);
}
@org.junit.Test
public void testSelect() {
User result = userDAO.findByName(new User(null, "Jerry", null));
Assert.assertTrue(result.getAge() != null);
}
@org.junit.Test
public void testDelete() {
int result = userDAO.delete("Jerry");
Assert.assertTrue(result > 0);
}
}
Результат теста пройден!