前言
- 什么是Spring Data
Spring Data的特点
2. 什么是JPA
3. Spring Data 与JPA的关系
4. Spring Data JPA工作原理
Spring Data JPA的简单使用
- Spring项目的基本配置如下:
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/vip_test?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 输出SQL语句
spring.jpa.show-sql=true
# 格式化sql
spring.jpa.properties.hibernate.format_sql=true
# 自动生成开启,让表跟随entity类而变化
spring.jpa.hibernate.ddl-auto=update
# jpa对应的数据库类型
spring.jpa.database=mysql
- 创建实体类,注意:我们这里先不用创建相应的表,jpa会根据实体类的配置自动为我们创建相应的表
import lombok.Data;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
@Data
@Entity
@Table(name = "vip_course")
public class VipCourse {
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
@GenericGenerator(name = "myuuid", strategy = "uuid")
@GeneratedValue(generator = "myuuid")
@Column(name = "course_id")
private String courseId;
// @Column name属性表示当前属性对应的表的字段名,nullable表示该字段可否为空,length该字段的长度
@Column(name = "course_name", nullable = false, length = 20)
private String courseName;
// 没有设置Cloumn中的name时代表属性名和表字段名一致
@Column
private double price;
@Column
private String description;
}
- 创建Dao接口,并继承JpaRepository接口
// VipCourse代表查询的数据所对应的类型,String代表该实体类的对应表的主键类型
public interface CourseRepository extends JpaRepository<VipCourse, String> {
}
这里我们不用写任何的查询方法,JpaRepository默认为我们实现了常用的CRUD方法
- 如果Jpa为我们提供的CRUD不能满足需求,我们可以增加自己的方法,而且Jpa会为我们自动实现,前提是方法的名称必须按照Jpa的规范来定义,如:
public interface CourseRepository extends JpaRepository<VipCourse, String> {
/**
* 根据courseName进行模糊查询
* @param courseName
* @return
*/
List<VipCourse> findVipCoursesByCourseNameLike(String courseName);
}
在我们定义自己的方法的时候,Jpa会给我们提示名称应该怎么取(如图),按照此规范定义方法就不用我们自己实现,非常方便。