JPA
2020-02-20 本文已影响0人
華華公子
配置
- maven
<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>
- 配置Hibernate
spring.jpa.hibernate.ddl-auto=create-drop //每次启动自动新建表
spring.jpa.show-sql=true
- 配置自动扫描
@EntityScan(value = "org.yiva.exam.springboot.jpa.pojo")
@EnableJpaRepositories(value = "org.yiva.exam.springboot.jpa.dao")
编码
- 实体类
使用mappedBy的属性所表示的对象,是需要使用外键的类。mappedBy属性用于双向关联实体时,标注在不保存关系的实体中。
@Entity //注解此类是一个实体类
@Access(value = AccessType.FIELD) //通过属性进行参数声明
@Table(name = "t_students") //对应表名
public class Student {
@Id //主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //自增
private long id;
@Column(length = 50)
private String name;
//主外键关联,将在t_score表中创建外键
@OneToMany(mappedBy = "student")
private List<Score> scores;
//主外键关联,将在t_student_card表中创建外键
@OneToOne(mappedBy = "student")
private StudentCard studentCard;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
关联关系
表映射
- OneToOne
- OneToMany
指向的目录实体为需要外键的一方
- ManyToOne
- ManyToMany
实体加载方式
- FetchType.EAGER
取A表数据,对应B表的数据都会跟着一起加载,速度慢
- FetchType.LAZY
查询表A的数据时,访问不到表B的数据,速度快
继承
- @Inheritance