- 内容
- 搭建 JPA 环境
- 默认的 CRUD 方法
- 方法名关键字进行查询操作(findBy语句)
- @Query注解配合SQL语句进行数据操作
1 . springboot 下搭建 JPA 环境
生成的依赖
org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test
修改配置文件:
改成自己的数据库信息
#application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/teaching?serverTimezone=UTC #连接地址
username: root #用户名
password: "001013" #密码,0开头的密码需要加双引号
driver-class-name: com.mysql.cj.jdbc.Driver #驱动
jpa:
show-sql: true
database: mysql
hibernate:
ddl-auto: update
- 编写 ORM 实体类
创建 Student 类,在类上标注 @Entity 注解和 @Table 注解,在 id 自动上标注 @Id注解和@GeneratedValue(strategy=GenerationType.IDENTITY)注解
package com.wakeuplb.demojpa;
import org.springframework.stereotype.Component;
import javax.persistence.*;
import java.time.LocalDate;
@Component//它的作用就是实现bean的注入
@Entity
@Table(name = "t_student")//表名
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//主键
private Integer id;
private String name;
private String stu_number;
private Integer age;
private LocalDate birthday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStu_number() {
return stu_number;
}
public void setStu_number(String stu_number) {
this.stu_number = stu_number;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public LocalDate getBirthday() {
return birthday;
}
public void setBirthday(LocalDate birthday) {
this.birthday = birthday;
}
}
- 创建接口
创建接口 StudentRepository 并继承 JpaRepository ,写入对应实体类 Student ,以及主键类型 Integer
package com.wakeuplb.demojpa; import org.springframework.data.jpa.repository.JpaRepository; public interface StudentRepository extends JpaRepository{ }
- 测试
package com.wakeuplb.demojpa;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
@SpringBootTest
class DemoJpaApplicationTests {
@Test
void contextLoads() {
}
@Autowired
StudentRepository studentRepository;
@Autowired
Student student;
//测试增加
@Test
void testInsert(){
student.setName("lb");
student.setAge(21);
student.setStu_number("609199020");
student.setBirthday(LocalDate.now());
studentRepository.save(student);
}
//测试查询
@Test
void testSelect(){
Optional optional = studentRepository.findById(1);
Student student = optional.get();
System.out.println(student);
}
//测试修改
@Test
void testUpdate(){
student.setId(2);
student.setAge(2);
student.setStu_number("123456");
student.setBirthday(LocalDate.now());
studentRepository.save(student);
}
//测试删除
@Test
void testDelete(){
studentRepository.deleteById(1);
}
//测试分页查询
@Test
void testPage(){
PageRequest pageRequest = PageRequest.of(0, 2);
Page studentPage = studentRepository.findAll(pageRequest);
List studentList = studentPage.getContent();
System.out.println(studentList);
}
//条件查询
@Test
void testExample(){
student.setStu_number("6199020");
Example example = Example.of(student);
List studentList = studentRepository.findAll(example);
System.out.println(studentList);
}
}
小节:
- 导依赖
- 复制配置文件
- 编写实体类与业务代码
- 测试



