在本教程中,我们将向您展示一些示例,以在Spring框架中配置嵌入式数据库引擎,例如HSQL,H2和Derby。
使用的技术:
- 春天4.1.6.RELEASE
- jUnit 4.1.2
- Maven 3
嵌入式数据库经过测试:
- HSQLDB 2.3.2
- 氢气1.4.187
- 德比10.11.1.1
嵌入式数据库的概念在开发阶段非常有用,因为它们轻巧,快速,启动时间短,可测试性强,易于配置,它使开发人员可以将更多精力放在开发上,而不是如何为数据库配置数据源,或浪费时间来启动重量级的数据库,仅测试几行代码。
PS此嵌入式数据库功能自Spring 3起可用。
1.项目依赖
嵌入式数据库功能包含在spring-mvc
。 例如,要启动HSQL嵌入式数据库,需要同时包含spring-mvc
和hsqldb
。
4.1.6.RELEASE
2.3.2
1.4.187
10.11.1.1
org.springframework
spring-jdbc
${spring.version}
org.hsqldb
hsqldb
${hsqldb.version}
com.h2database
h2
${dbh2.version}
org.apache.derby
derby
${derby.version}
2. Spring XML中的嵌入式数据库
使用Spring XML创建嵌入式数据库并初始化一些脚本以创建表和插入数据的示例。 Spring将使用id
标签的值创建数据库名称,在以下示例中,数据库名称将为“ dataSource”。
2.1 HSQL示例
2.2 H2示例
2.3 Derby示例。
将创建以下“ JDBC驱动程序连接”:
- HSQL –
jdbc:hsqldb:mem:dataSource
- H2 –
jdbc:h2:mem:dataSource
- DERBY –
jdbc:derby:memory:dataSource
3. Spring代码中的嵌入式数据库
以编程方式创建嵌入式数据库的示例。 如果没有通过EmbeddedDatabaseBuilder.setName()
定义数据库名称,Spring将分配一个默认的数据库名称“ testdb”。
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
//...
@Bean
public DataSource dataSource() {
// no need shutdown, EmbeddedDatabaseFactoryBean will take care of this
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.HSQL) //.H2 or .DERBY
.addScript("db/sql/create-db.sql")
.addScript("db/sql/insert-data.sql")
.build();
return db;
}
@ComponentScan({ "com.mkyong" })
@Configuration
public class SpringRootConfig {
@Autowired
DataSource dataSource;
@Bean
public JdbcTemplate getJdbcTemplate() {
return new JdbcTemplate(dataSource);
}
将创建以下“ JDBC驱动程序连接”:
- HSQL –
jdbc:hsqldb:mem:testdb
- H2 –
jdbc:h2:mem:testdb
- DERBY –
jdbc:derby:memory:testdb
4.单元测试
一个简单的单元测试示例,用于测试具有嵌入式数据库的DAO。
4.1创建表和插入数据的SQL脚本。
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name VARCHAR(30),
email VARCHAR(50)
);
INSERT INTO users VALUES (1, 'mkyong', '[email protected]');
INSERT INTO users VALUES (2, 'alex', '[email protected]');
INSERT INTO users VALUES (3, 'joel', '[email protected]');
4.2用H2嵌入式数据库对UserDao
进行单元测试。
package com.mkyong.dao;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import com.mkyong.model.User;
public class UserDaoTest {
private EmbeddedDatabase db;
UserDao userDao;
@Before
public void setUp() {
//db = new EmbeddedDatabaseBuilder().addDefaultScripts().build();
db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("db/sql/create-db.sql")
.addScript("db/sql/insert-data.sql")
.build();
}
@Test
public void testFindByname() {
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(db);
UserDaoImpl userDao = new UserDaoImpl();
userDao.setNamedParameterJdbcTemplate(template);
User user = userDao.findByName("mkyong");
Assert.assertNotNull(user);
Assert.assertEquals(1, user.getId().intValue());
Assert.assertEquals("mkyong", user.getName());
Assert.assertEquals("[email protected]", user.getEmail());
}
@After
public void tearDown() {
db.shutdown();
}
}
做完了
5.查看嵌入式数据库的内容?
为了访问或查看嵌入式数据库,特定的“数据库管理器工具”必须以启动嵌入式数据库的相同Spring容器或JVM启动。 此外,“数据库管理器工具”必须在嵌入式数据库Bean之后启动,最好通过观察Spring的日志以识别Bean的加载顺序来解决。
“ HSQL数据库管理器”是一个很好的工具,只需在同一Spring容器中启动即可。
@PostConstruct
public void startDBManager() {
//hsqldb
//DatabaseManagerSwing.main(new String[] { "--url", "jdbc:hsqldb:mem:testdb", "--user", "sa", "--password", "" });
//derby
//DatabaseManagerSwing.main(new String[] { "--url", "jdbc:derby:memory:testdb", "--user", "", "--password", "" });
//h2
//DatabaseManagerSwing.main(new String[] { "--url", "jdbc:h2:mem:testdb", "--user", "sa", "--password", "" });
}
或带有MethodInvokingBean
Spring XML
--url
jdbc:derby:memory:dataSource
--user
sa
--password
图:HSQL数据库管理器工具,访问嵌入式数据库。
6.连接池
连接dbcp连接池的示例。
下载源代码
Github – spring-embedded-database.git
参考文献
- JDBC嵌入式数据库支持
- Spring MethodInvokingFactoryBean示例
- Spring–查看HSQLDB嵌入式数据库的内容
翻译自: https://mkyong.com/spring/spring-embedded-database-examples/