Spring嵌入式数据库示例

Spring嵌入式数据库示例_第1张图片 Spring嵌入式数据库示例_第2张图片

在本教程中,我们将向您展示一些示例,以在Spring框架中配置嵌入式数据库引擎,例如HSQL,H2和Derby。

使用的技术:

  1. 春天4.1.6.RELEASE
  2. jUnit 4.1.2
  3. Maven 3

嵌入式数据库经过测试:

  1. HSQLDB 2.3.2
  2. 氢气1.4.187
  3. 德比10.11.1.1

嵌入式数据库的概念在开发阶段非常有用,因为它们轻巧,快速,启动时间短,可测试性强,易于配置,它使开发人员可以将更多精力放在开发上,而不是如何为数据库配置数据源,或浪费时间来启动重量级的数据库,仅测试几行代码。

PS此嵌入式数据库功能自Spring 3起可用。

1.项目依赖

嵌入式数据库功能包含在spring-mvc 例如,要启动HSQL嵌入式数据库,需要同时包含spring-mvchsqldb

pom.xml
		
		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驱动程序连接”:

  1. HSQL – jdbc:hsqldb:mem:dataSource
  2. H2 – jdbc:h2:mem:dataSource
  3. 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驱动程序连接”:

  1. HSQL – jdbc:hsqldb:mem:testdb
  2. H2 – jdbc:h2:mem:testdb
  3. DERBY – jdbc:derby:memory:testdb

4.单元测试

一个简单的单元测试示例,用于测试具有嵌入式数据库的DAO。

4.1创建表和插入数据的SQL脚本。

create-db.sql
CREATE TABLE users (
  id         INTEGER PRIMARY KEY,
  name VARCHAR(30),
  email  VARCHAR(50)
);
insert-data.sql
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进行单元测试。

UserDaoTest.java
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数据库管理器工具,访问嵌入式数据库。

Spring嵌入式数据库示例_第3张图片 Spring嵌入式数据库示例_第4张图片

6.连接池

连接dbcp连接池的示例。


	
		
		
	
	
	
		
	
	
	
		
		
		
		
	

下载源代码

Github – spring-embedded-database.git

参考文献

  1. JDBC嵌入式数据库支持
  2. Spring MethodInvokingFactoryBean示例
  3. Spring–查看HSQLDB嵌入式数据库的内容

翻译自: https://mkyong.com/spring/spring-embedded-database-examples/

你可能感兴趣的:(Spring嵌入式数据库示例)