最近在学习springboot,之前也发布了一些springboot配置的一些文章,都是学习期间整理的一些笔记.
顺便分享一下我的学习方法(跟老大学的),先看官方文档,每天将学习到的内容整理到印象笔记中,然后每周定期将印象笔记中的内容整理到简书中分享给大家.
关于懒加载的配置也是开始的时候遇到的问题,经过网上查询总结出这些解决方案,希望指正
以课程和学生的多对多关系为模型
预期:
启用懒加载后,对Student表取数,不会自动带出Course集合
当student1.getCourse()使用集合时,再执行Student取数
作用:
当不需要使用Course集合引用时,不会执行多余的查询,提升效率
修改domain实现懒加载
@ManyToMany(cascade = {CascadeType.PERSIST}, fetch = FetchType.LAZY)
Student.java
Student.java
@Entity
@Table(name = "student")
public class Student {
private String pid;
private String studentName;
private Set<Course> course; //选修课程
public Student() {
}
public Student(String pid, String studentName, Set<Course> course) {
this.pid = pid;
this.studentName = studentName;
this.course = course;
}
@Id
@Column(name = "pid", unique = true, nullable = false, length = 32)
// @GeneratedValue(generator = "generator")
// @GenericGenerator(name = "generator", strategy = "uuid")
public String getPid() {
return pid;
}
@Column(name = "student_name", unique = true, length = 64)
public String getStudentName() {
return studentName;
}
/**
* Hibernate 会自动创建一张关系表stu_cou, 里边有俩字段stu_id和cou_id分别为两表主键
*
* @return
*/
@ManyToMany(cascade = {CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinTable(name = "stu_cou", joinColumns = {@JoinColumn(name = "stu_id")}, inverseJoinColumns = {@JoinColumn(name = "cou_id")})
public Set<Course> getCourse() {
return course;
}
public void setPid(String pid) {
this.pid = pid;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public void setCourse(Set<Course> course) {
this.course = course;
}
}
application.properties开启懒加载
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.show-sql=true
##懒加载
spring.jpa.open-in-view=true
总结
懒加载的配置主要有两点:
- spring.jpa.open-in-view=true 这个配置默认就是true
- 取数方法使用@Transactional注解–主要
网友评论