Apache Derby是关系型数据库,可以嵌入式方式运行,也可以独立运行,当使用嵌入式方式运行时常用于单元测试,本篇我们就使用单元测试来探索Apache Derby的使用
一、使用IDEA创建Maven项目
打开IDEA创建Maven项目,这里我使用的JDK版本为1.8版本。
二、添加依赖
<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
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类
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);}@Beforepublic void init() throws SQLException {ScriptUtils.executeSqlScript(dataSource.getConnection(), new ClassPathResource("demo.sql"));}
}
DatabaseTest类中我们在类加载时初始化了数据源和JdbcTemplate对象;在单元测试执行之前,我们执行了初始化脚本;
五、查询数据
在DatabaseTest类中新增查询方法
@Test
public void find() {query();
}private void query() {jdbcTemplate.query("SELECT id, username FROM T_USER", new RowCallbackHandler() {@Overridepublic void processRow(ResultSet rs) throws SQLException {System.out.println("id: " + rs.getInt("id") + ", username: " + rs.getString("username"));}});
}
执行单元测试的结果如下:
六、添加数据
在DatabaseTest类中新增添加方法
@Test
public void add() {jdbcTemplate.execute("INSERT INTO T_USER(username) VALUES('赵六')");query();
}
执行单元测试的结果如下:
七、更新数据
在DatabaseTest类中新增更新方法
@Test
public void update() {jdbcTemplate.execute("UPDATE T_USER SET username='张三1' WHERE id = 1");query();
}
执行单元测试的结果如下:
八、删除数据
在DatabaseTest类中新增删除方法
@Test
public void delete() {jdbcTemplate.execute("DELETE FROM T_USER WHERE id = 1");query();
}
执行单元测试的结果如下: