springboot相关学习--配置懒加载

最近在学习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注解–主要

注意:如不使用@Transactional懒加载会报错

展开阅读全文

没有更多推荐了,返回首页