基于SpringBoot打造在线教育系统(2)-- 深入学习JPA与Junit测试2

简介: 现在User表已经有了,而且对应mysql数据库里面,已经建好了用户表。

0a3d081ac46817f30b437e8ae0ecca0b.png

地址:https://blog.csdn.net/qq_33405420/article/details/89469293

兔子:“这写的没问题啊,只是别人不知道你这么菜而已,他也不知道你直接在junit测试类里面去测试dao的方法,而且还不加事物。”

dc381c4233d8c1537f3332fc5ec4488a.png

“。。。好吧,那我后面建立service方法的时候,一定加上事物。”


兔子:“没事,我刚开始也这样,慢慢来就好了。对了,我已经把公众号的名字改成了【java小白翻身】,记得关注哦~”


##4. 试试jpa的其他修改用法

话说这JPA还真好用,基本的增删改查我都不用写一句sql,对于一些复杂的业务逻辑,我也可以自己写jpql语句(其实还是sql语句,算是面向对象的sql语句吧)。


接下来,我就试试别的方法。刚才已经插入了一条数据,现在我再用另一种方法去修改数据,比如,我把密码改成123吧。

  @Test
  public void modifyPassword(){
    User user = new User();
    user.setUserName("root");
    user.setPassword("123");
    userDao.saveAndFlush(user);
    System.out.println("修改成功");
  }

运行,结果崩了…

982cb4afbe7ad6b789fc223eef063f97.png

其他的数据全没了,看来这种更新是全量的更新,不是增量的。我还以为他会只更新userName和password呢,看来是我太天真了。不怕,我再运行一下adduser测试方法,数据不就回来了嘛。。

我太机智了。

2e903f849040e847169d87e352c78071.png

再运行一次,数据果然回来了。

这回得小心一点了,我先根据主键userName去拿到这个用户,然后再修改密码:

  @Test
  public void modifyPassword(){
    User user = new User();
    user.setUserName("root");
    //先找到userName为root的用户
    user = userDao.findOne("root");
    //修改密码
    user.setPassword("123");
    userDao.saveAndFlush(user);
    System.out.println("修改成功");
  }

f1b38291189248e97805d2c8dab5bf10.png

这下子就成功了。

##5. JPA的奇技淫巧

springDataJpa还实现了一个非常牛逼的东西,就是根据方法名自动进行sql查询。

比如,我想根据roleId去做查询,就可以直接写一个方法:

public List<User> findByRoleId(String roleId);

####SpringData JPA方法命名规则查询


顾名思义,方法命名规则查询就是根据方法的名字,就能创建查询。


只需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作。


Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询


按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,


要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析。

6075585063a4be8bc42d353dd123c227.png

我们多造一点测试数据,用addUser方法。

0ca9ee7b954b6c90736181e6681f07ca.png

比如,我们现在要查询nickName里面带有“剽悍”的,就用like。

public List<User> findByNickNameLike(String nickName);

测试:

  @Test
  public void userQuery(){
    List<User> users = userDao.findByNickNameLike("%剽悍%");
    for (int i = 0; i < users.size(); i++) {
      System.out.println(users.get(i).getNickName());
    }
  }

结果:

8d83872cecfa4e7eda51d88108d3bcc8.png

这个算是jpa里面一个很有意思的用法了,但是我感觉这样心里好没底啊,哈哈。最稳妥的办法,还是直接写JPQL语句吧。

比如,我这样写:

@Query("select u from User u where userName = ?1 and password = ?2")
public User findByUserNameAndPassword(String userName,String password);

这样的好处就是,你想写什么查询就写什么查询,是最放心的。

50f8d4ba73dba720ad3b78b9abde8f16.png

JPA里面最常用的两种传参方式,就是这两种。


其实,jpa里面还有很多其他的拼接方法,但是我看来看去,都太麻烦了,还是直接用JPQL最省事。对于简单的查询,就直接用默认的方法即可,复杂的查询,就老老实实自己写sql吧。



相关文章
|
12月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1264 0
|
8月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1148 3
|
12月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
584 5
|
11月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
397 0
|
Java 测试技术 数据库
说一说 SpringBoot 整合 Junit5 常用注解
我是小假 期待与你的下一次相遇 ~
174 1
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
533 10
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
Java 测试技术 Android开发
课时148:junit测试工具
课时148介绍了JUnit测试工具的使用,包括定义、配置和编写测试程序。JUnit是流行的用例测试工具,用于确保代码稳定性。
355 0
|
安全 Java 测试技术
springboot之SpringBoot单元测试
本文介绍了Spring和Spring Boot项目的单元测试方法,包括使用`@RunWith(SpringJUnit4ClassRunner.class)`、`@WebAppConfiguration`等注解配置测试环境,利用`MockMvc`进行HTTP请求模拟测试,以及如何结合Spring Security进行安全相关的单元测试。Spring Boot中则推荐使用`@SpringBootTest`注解简化测试配置。
595 4
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架

热门文章

最新文章