欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

SpringDataJpa框架单元测试实现增删改查

发布时间:2025/5/22 69 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SpringDataJpa框架单元测试实现增删改查 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

  • 使用工具
  • 使用说明
  • 使用maven的pom.xml文件
  • 环境搭建
  • 代码示例
    • java目录
            • Student.java
            • IStuDao.java
            • IStudentDao.java
            • App.java
    • resources目录
            • application.yml
    • test目录
            • AppTest.java

使用工具

IDEA2018.2 MySQL5.6 JDK1.8

使用说明

需要在数据库中创建一个数据库,无需创建数据库表
SpringDtataJpa自动生成数据表

使用maven的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ming</groupId><artifactId>springbootjpatest</artifactId><version>0.0.1-SNAPSHOT</version><name>springbootjpatest</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build> </project>

环境搭建


代码示例

java目录

Student.java
package com.vvcat.gitee.bean;import javax.persistence.*;@Entity @Table(name = "student")//数据库表明 public class Student {@Id//声明id为主键@GeneratedValue(strategy = GenerationType.IDENTITY)//声明自动增长@Column(name = "id")//声明数据库对应的字段private Integer id;@Column(name = "stuName")//声明数据库对应的字段//定义字段也是有讲究的,比如首字母小写,后边的驼峰,对应的数据库字段,遇到驼峰用下划线断开//比如实体类定义的userName,则数据库字段为user_name,//比如实体类定义的username,则数据库字段也为usernameprivate String stu_name;@Column(name = "age")//声明数据库对应的字段private Integer age;@Column(name = "sex")//声明数据库对应的字段private String sex;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getStu_name() {return stu_name;}public void setStu_name(String stu_name) {this.stu_name = stu_name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Student{" +"id=" + id +", stu_name='" + stu_name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}public Student(String stu_name, Integer age, String sex) {this.stu_name = stu_name;this.age = age;this.sex = sex;}public Student() {}}
IStuDao.java
package com.vvcat.gitee.dao;import com.vvcat.gitee.bean.Student; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;import java.util.List;/*** @Author ꧁ʚVVcatɞ꧂* @Date 2019/10/23 14:13* @Version 1.0**/ public interface IStuDao extends JpaRepository<Student, String> {//模糊查询姓名@Query("SELECT stu FROM Student stu WHERE stu_name LIKE ?1")List<Student> findByNameLike(String name);}
IStudentDao.java
package com.vvcat.gitee.dao;import com.vvcat.gitee.bean.Student; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional;import java.util.List;/*** @Author ꧁ʚVVcatɞ꧂* @Date 2019/10/23 15:19* @Version 1.0**/ public interface IStudentDao extends JpaRepository<Student, Integer> {//查询数据库中全部的数据@Transactional //纳入事务管理@Modifying // 对表进行修改操作 需要调用该注解@Query("SELECT stu FROM Student stu")// 注意表的大小写 要跟 IBaseDao<Student,Integer> 中的参数一致List<Student> findAll();//删除对应的ID信息@Transactional@Modifying // 对表进行修改操作 需要调用该注解@Query("DELETE FROM Student WHERE id = ?1")// 注意表的大小写 要跟 IBaseDao<Student,Integer> 中的参数一致void testDeleteSql(@Param("id") Integer id);}
App.java
package com.vvcat.gitee;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Hello world!**/@SpringBootApplication public class App {public static void main( String[] args ){SpringApplication.run(App.class, args);} }

resources目录

hibernate:
ddl-auto: 参数

参数描述
validate项目启动表结构进行校验 如果不一致则报错
create启动时删数据库中的表,然后创建,退出时不删除数据表
create-drop启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错
update最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。
application.yml
server:port: 8080servlet:context-path: / spring:datasource:url: jdbc:mysql://localhost:3306/item?serverTimezone=UTCusername: rootpassword: 123456jpa:database: MySQLdatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialect #mysql数据库固定配置show-sql: true #控制台打印sqlhibernate:ddl-auto: update #update代表数据库没有表的话,会先创建表,有表的话就不创建了。

test目录

AppTest.java
package com.vvcat.gitee;import com.vvcat.gitee.bean.Student; import com.vvcat.gitee.dao.IStuDao; import com.vvcat.gitee.dao.IStudentDao; 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.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList; import java.util.List; import java.util.Optional;/*** Unit test for simple App.*/ @RunWith(SpringRunner.class) @SpringBootTest public class AppTest {@Autowiredprivate IStuDao stuDao;@Autowiredprivate IStudentDao studentDao;/*** 增加方法*/@Testpublic void testAdd(){Student student = new Student();student.setStu_name("vvcat");student.setAge(18);student.setSex("男");stuDao.save(student);}/*** 批量增加*/@Testpublic void testAddList(){List<Student> stuList = new ArrayList<>();for(int i=0 ; i < 10 ;i++){Student stu = new Student();stu.setStu_name("VVcat" + i);stu.setAge(i);stu.setSex("男");stuList.add(stu);}stuDao.saveAll(stuList);}/*** 通过主键查找*/@Testpublic void testFindById(){Optional<Student> optionalStudent = studentDao.findById(1);Student stu = optionalStudent.get();System.out.println(stu);}/*** 查询所有 如果想通过条件查询,可以根据上边的方式查询。*/@Testpublic void testFindAll(){List<Student> stuList = stuDao.findAll();for(Student stu : stuList){System.out.println(stu);}}/*** 分页排序查询* page,第几页,从0开始,默认为第0页* size,每一页的大小,默认为20* sort,排序相关的信息,例如sort=firstname&sort=lastname,desc表示在按firstname正序排列基础上按lastname倒序排列*/@Testpublic void testPage(){//排序Sort sort = new Sort(Sort.Direction.DESC,"id"); // //排序条件 id倒序排序//分页Pageable pageable = PageRequest.of(0,2,sort);// page:index是0开始的,不是从1开始的Page<Student> page = stuDao.findAll(pageable);//当前页结果,(0)页List<Student> stuList = page.getContent();//按照每页2条数据,一共有的页数int totalPages = page.getTotalPages();//总共有多少条数据long totalElements = page.getTotalElements();//第0页的数据for (Student list :stuList) {System.out.println(list);}//查询的当前第几页int number = page.getNumber();//查询的当前页面的记录数int numberOfElements = page.getNumberOfElements();System.out.println("一共有" + totalPages + "页\n" + "总共有" + totalElements + "条数据"+ "\n"+ "查询的当前第" + number + 1 + "页"+ "\n"+ "查询的当前页面的记录数:"+ numberOfElements);//遍历每页的数据 // for (int i = 0; i < page.getTotalPages(); i++) { // PageRequest page1 = PageRequest.of(i, 2, sort); // Page<Student> page2 = studentDao.findAll(page1); // List<Student> stuList2 = page2.getContent(); // for (Student list :stuList2) { // System.out.println(list); // } // }}/*** 通用修改方法,先根据主键查找,然后在修改提交* 也可以通过sql直接修改.需要在IUserDao接口中定义,这里不再演示。*/@Testpublic void testUpdate(){Optional<Student> stuOptional = studentDao.findById(1);Student stu = stuOptional.get();stu.setStu_name("springDataJpa");//主键存在为修改,不存在为新增stuDao.save(stu);}/*** 查询其中一个进行删除* */@Testpublic void testDelete(){Optional<Student> stuOptional = studentDao.findById(11);Student stu = stuOptional.get();stuDao.delete(stu);}/*** 通过主键删除* 也可以通过sql直接删除.需要在IUserDao接口中定义*/@Testpublic void testDeleteID(){studentDao.testDeleteSql(10);}/*** 通过自定义数据库语句进行模拟查询*/@Testpublic void findByNameSql() {List<Student> byNameSql = stuDao.findByNameLike("zhangsan%");for (Student list :byNameSql) {System.out.println(list);}}/*** 通过自定义数据库语句进行模拟查询*/@Testpublic void findNameSql() {List<Student> byNameSql = stuDao.findByNameLike("zhangsan%");for (Student list :byNameSql) {System.out.print("id:" + list.getId() + ",");System.out.print("name:" + list.getStu_name() + ",");System.out.print("age:" + list.getAge() + ",");System.out.println("sex:" + list.getSex() );}}}

总结

以上是生活随笔为你收集整理的SpringDataJpa框架单元测试实现增删改查的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。