Spring Boot Test 进行JPA 测试保存数据到数据库

在Spring Boot 中,将 @SpringBootTest 注解加载测试类中可以很方便的进行测试。

如果是JPA的数据操作, 则测试方法执行时会报 No EntityManager with actual transaction available for current thread 的错误, 翻译一下就是“当前线程没有事务支持”。

解决方法时在测试类或是方法上增加注解:@Transactional

再执行如下测试方法:

	@Test
	public void add() {
		Usr usr = new Usr(1,"张三",1);
		entityManager.persist(usr);
	}

方法是成功执行了, 但是查询数据库表却没有数据。 原因是:Spring Test 对数据库的操作在方法执行完成后会回滚事务, 也就是数据不会实际写入到Db , 这个设计其实也很合理。 特别是在实际环境中, 如果不可避免的要在正式环境中测试, 这种设计会比较安全。
如果实在要在Test 写入Db, 则需要增加 @Rollback(false) 注解。

综合起来, 如果要在Test 要插入数据到Db , 需要以下两个注解:

@Transactional
@Rollback(false)
public class JpqlTests {
}
  • @Transactional ,开启事务, 这是JPA 的标准注解
  • @Rollback(false) , Spring Test的专属注解, 不会回滚, 也就是实际写入到数据库。 在实际业务代码中不可使用。

注: 这两个注解也可以使用在测试方法上, 只对该测试类的某个方法生效。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现 Spring Boot 和 Vue.js 之间的数据交互,可以采用 RESTful API 的方式。具体实现步骤如下: 1. 在 Spring Boot 中,可以使用 Spring Data JPA 来访问数据库。首先需要在 pom.xml 文件中添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 2. 在 application.properties 中配置数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. 创建一个实体类,使用 @Entity、@Table、@Id、@GeneratedValue 等注解来设置表名、字段名、主键等信息: ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "age") private Integer age; // 省略 getter 和 setter 方法 } ``` 4. 创建一个 Repository 接口,继承 JpaRepository 接口,并指定泛型参数为实体类和主键类型: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { } ``` 5. 创建一个 Controller 类,使用 @RestController 注解标记该类,使用 @Autowired 注解注入 UserRepository,编写查询用户列表的接口: ```java @RestController @RequestMapping("/api") public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/users") public List<User> getUsers() { return userRepository.findAll(); } } ``` 6. 在 Vue.js 中,可以使用 axios 库来发送 HTTP 请求。首先需要在 index.html 中引入 axios: ```html <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> ``` 7. 创建一个 Vue 组件,在 mounted 钩子函数中使用 axios 发送 GET 请求获取用户列表,并将返回的数据渲染到页面上: ```vue <template> <div> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr v-for="user in users" :key="user.id"> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.age }}</td> </tr> </tbody> </table> </div> </template> <script> export default { data() { return { users: [], }; }, mounted() { axios .get('/api/users') .then((response) => { this.users = response.data; }) .catch((error) => { console.log(error); }); }, }; </script> ``` 这样就可以通过 Spring Boot 和 Vue.js 实现查询数据库数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值