Apache Derby是关系型数据库,可以嵌入式方式运行,也可以独立运行,当使用嵌入式方式运行时常用于单元测试,本篇我们就使用单元测试来探索Apache Derby的使用
一、使用IDEA创建Maven项目
打开IDEA创建Maven项目,这里我使用的JDK版本为1.8版本。
二、添加依赖
XML
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.30.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.14.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
这里使用spring-jdbc主要是为了使用spring执行SQL脚本、执行SQL语句时使用;嵌入式运行Apache Derby需要引入derby的包;单元测试引入了junit
三、准备初始化脚本
在src/test/resources下新建demo.sql
sql
DROP TABLE T_USER;
CREATE TABLE T_USER(
id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
username VARCHAR(255) NOT NULL
);
INSERT INTO T_USER(username) VALUES('张三'),('李四'),('王五');
脚本中我们删除并创建了T_USER表,向表中插入了三条数据。
四、单元测试准备工作
在src/test/java下新建cn.horse.demo包,在包下新建DatabaseTest类
java
package cn.horse.demo;
import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseTest {
static final DataSource dataSource;
static final JdbcTemplate jdbcTemplate;
static {
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
driverManagerDataSource.setUrl("jdbc:derby:demo;create=true");
driverManagerDataSource.setUsername("");
driverManagerDataSource.setPassword("");
dataSource = driverManagerDataSource;
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Before
public void init() throws SQLException {
ScriptUtils.executeSqlScript(dataSource.getConnection(), new ClassPathResource("demo.sql"));
}
}
DatabaseTest类中我们在类加载时初始化了数据源和JdbcTemplate对象;在单元测试执行之前,我们执行了初始化脚本;
五、查询数据
在DatabaseTest类中新增查询方法
java
@Test
public void find() {
query();
}
private void query() {
jdbcTemplate.query("SELECT id, username FROM T_USER", new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
System.out.println("id: " + rs.getInt("id") + ", username: " + rs.getString("username"));
}
});
}
执行单元测试的结果如下:
六、添加数据
在DatabaseTest类中新增添加方法
java
@Test
public void add() {
jdbcTemplate.execute("INSERT INTO T_USER(username) VALUES('赵六')");
query();
}
执行单元测试的结果如下:
七、更新数据
在DatabaseTest类中新增更新方法
java
@Test
public void update() {
jdbcTemplate.execute("UPDATE T_USER SET username='张三1' WHERE id = 1");
query();
}
执行单元测试的结果如下:
八、删除数据
在DatabaseTest类中新增删除方法
java
@Test
public void delete() {
jdbcTemplate.execute("DELETE FROM T_USER WHERE id = 1");
query();
}
执行单元测试的结果如下: