SpringBoot集成H2数据库
SpringBoot集成H2数据库
背景
H2数据库是⼀个Java编写的关系型数据库,它可以被嵌⼊到Java应⽤程序中使⽤,或者作为⼀个单独的数据库服务器运⾏。它⽀持内存模式,所以在单元测试的时候,使⽤H2数据库是⼀个很好的选择。本篇记录了SpringBoot整合H2数据库的简单使⽤。
添加H2依赖
添加如下maven坐标引⼊H2数据库:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
springboot结构
</dependency>
添加数据库配置⽂件
和正常连接数据库⼀样,需要添加数据库驱动,数据库url,⽤户名和密码等信息。同时设置⼀下schema以及data的属性,这边是初始化数据库的结构脚本以及数据脚本:
spring:
datasource:
url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=MySQL # mem指定数据库使⽤内存模式 MODE指定使⽤MySQL模式
driver-class-name: org.h2.Driver
username: root
password:123456
schema: classpath:db/schema.sql # 表结构脚本
data: classpath:db/data.sql # 表数据脚本
h2:
console:
enabled:true# 访问h2数据库控制台
schema.sql脚本:
DROP TABLE IF EXISTS`tbl_account`;
CREATE TABLE`tbl_account`(
`id`int NOT NULL AUTO_INCREMENT,
`name`varchar(255)NOT NULL,
`balance`double NOT NULL,
PRIMARY KEY(`id`)
)
;
data.sql脚本:
INSERT INTO`tbl_account`(`id`,`name`,`balance`)VALUES(1,'yuan',800);
INSERT INTO`tbl_account`(`id`,`name`,`balance`)VALUES(2,'zhi',600);
INSERT INTO`tbl_account`(`id`,`name`,`balance`)VALUES(3,'yang',750);
这边H2数据库主要⽤来进⾏单元测试,所有的⽂件都存在test⽬录下:
访问H2数据库控制台
默认H2数据库是不开启的,如果想要访问H2数据库控制台,可以通过添加able=true属性来设置。
同时,如果是使⽤SpringBootTest注解的话,需要设置⼀下webEnvironment属性为DEFINED_PORT,使⽤DEFINED_PORT,Spring 会根据server.port配置的端⼝启动HTTP服务器,如果不指定,默认是8080端⼝。webEnvironment属性默认使⽤的是MOCK,MOCK 不会创建真实的HTTP服务器,所以要访问控制台的话,需要设置⼀下webEnvironment属性。
/**
* @author yuanzhihao
* @since 2022/1/27
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@Transactional
public class AccountDaoTest {
}
使⽤H2数据库进⾏单元测试
前⾯说道,使⽤H2数据库可以⽤来单元测试,这边业务代码中使⽤的是mysql数据库,在测试代码中使⽤H2数据库,可以在不修改真实数据库的情况下进⾏单元测试,下⾯就简单贴⼀下测试代码,具体是对tbl_account表的⼀些操作:
/**
* @author yuanzhihao
* @since 2022/1/27
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) @Transactional
public class AccountDaoTest {
@Autowired
private AccountDao accountDao;
@Test
public void queryList()throws InterruptedException {
List<Account> accountList = accountDao.queryList();
Assert.assertEquals(3, accountList.size());
System.out.println(accountList);
Thread.sleep(3000000);
}
@Test
public void queryById(){
Account account = accountDao.queryById(1);
Assert.assertNotNull(account);
}
@Test
public void insert(){
Account account =new Account();
account.setName("zhi").setBalance(500);
accountDao.insert(account);
}
@Test
public void deleteById(){
accountDao.deleteById(1);
Account account = accountDao.queryById(1);
Assert.assertNull(account);
}
@Test
public void update(){
Account account = accountDao.queryById(1);
account.setBalance(950);
accountDao.update(account);
Account newAccount = accountDao.queryById(1);
Assert.assertEquals(950, Balance(),0);
}
}
结语

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。