springboot整合H2内存数据库实现单元测试与数据库无关性

网友投稿 934 2023-02-26


springboot整合H2内存数据库实现单元测试与数据库无关性

一、新建spring boot工程

新建工程的时候,需要加入JPA,H2依赖

二、工程结构

pom文件依赖如下:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.chhliu.springboot.h2

springboot-h2

0.0.1-SNAPSHOT

jar

springboot-h2

Demo project for Spring Boot H2

org.springframework.boot

spring-boot-starter-parent

1.4.3.RELEASE

UTF-8

UTF-8

1.7

org.springframework.boot

spring-boot-starter-data-jpa

org.springframework.boot

spring-boot-starter-web

com.h2database

h2

runtime

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.chhliu.springboot.h2

springboot-h2

0.0.1-SNAPSHOT

jar

springboot-h2

Demo project for Spring Boot H2

org.springframework.boot

spring-boot-starter-parent

1.4.3.RELEASE

UTF-8

UTF-8

1.7

org.springframework.boot

spring-boot-starter-data-jpa

org.springframework.boot

spring-boot-starter-web

com.h2database

h2

runtime

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

三、编写实体类

package com.chhliu.springboot.h2.entity;

import java.math.BigDecimal;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

@Entity

public class User {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Long id;

@Column

private String username;

@Column

private String name;

@Column

private Short age;

@Column

private BigDecimal balance;

……省略gettter和setter方法

}

四、编写dao

package com.chhliu.springboot.h2.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.stereotype.Repository;

import com.chhliu.springboot.h2.entity.User;

@Repository

public interface UserRepository extends JpaRepository {

}

五、编写controller

package com.chhliu.springboot.h2.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RestController;

import com.chhliu.springboot.h2.entity.User;

import com.chhliu.springboot.h2.repository.UserRepository;

@RestController

public class UserController {

@Autowired

private UserRepository userRepository;

@GetMapping("/user/{id}")// 注意,此处使用的是GetMapping注解,该注解的作用类似与@RequestMapping(value="/user/{id}" ,method=RequestMethod.GET),@PostMapping注解同理

public User findById(@PathVariable Long id) {

return this.userRepository.findOne(id);

}

}

六、配置文件

# 服务器端口号

server.port=7900

# 是否生成ddl语句

spring.jpa.generate-ddl=false

# 是否打印sql语句

spring.jpa.show-sql=true

# 自动生成ddl,由于指定了具体的ddl,此处设置为none

spring.jpa.hibernate.ddl-auto=none

# 使用H2数据库

spring.datasource.platform=h2

# 指定生成数据库的schema文件位置

spring.datasource.schema=classpath:schema.sql

# 指定插入数据库语句的脚本位置

spring.datasource.data=classpath:data.sql

# 配置日志打印信息

logging.level.root=INFO

logging.level.org.hibernate=INFiOrwNUWNVO

logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=TRACE

logging.level.com.itmuch=DEBUG

七、启动程序

在浏览器中输入如下URL:http://localhost:7900/user/4

可以看到测试结果

{"id":4,"username":"user4","name":"马六","age":20,"balance":100.00}

说明,我们的整合是OK的

八、测试dao层

package com.chhliu.springboot.h2;

import org.junit.Assert;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import com.chhliu.springboot.h2.entity.User;

import com.chhliu.springboot.h2.repository.UserRepository;

@RunWith(SpringRunner.class)

@SpringBootTest

public class SpringbootH2ApplicationTests {

@Autowired

private UserRepository repository;

@Test

public void test(){

User u = repository.findOne(1L);

Assert.assertEquals("成功的测试用例", "张三", u.getName());

}

}

发现测试是ok的!

九、总结

由于H2是关系内存数据库,当程序启动的时候,会在内存中创建表,并将数据存储在内存中,当重启程序后,会自动删除内存中的数据,从而可以很好的用来做dao层的单元测试和service层的单元测试,使整个程序不会依赖具体的数据库,同时也提高了单元测试的效率。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java购物系统设计与实现
下一篇:Spring Boot使用profile如何配置不同环境的配置文件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~