SpringBoot+Hibernate+Mysql的联表查询

SpringBoot+Hibernate+Mysql的联表查询

上一篇对SpringBoot+Hibernate+Mysql的基本部署和常用增删查改进行了说明,下面主要阐述下SpingBoot中关于hibernate的多表连接查询。
1.首先建立数据库表及其字段时应考虑外健的关联性
表一:student
在这里插入图片描述表二:classroom
在这里插入图片描述classroom的实体类没有变化依旧如下:

package com.example.springboothibernate.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 *  springboot集成hibernate 实例
 * @Entity用来标识这是一个实体类
 * @Id hibernate的特征,必须要一个id不然会报错
 * @Column(name = "sid") 用来跟表的字段做个映射,如果名字相同就不需要写
 * @return
 */
@Entity
@Table(name="classroom")
public class ClassRoom {
    @Id
    @Column(name = "classId")
    private  String classId;
    @Column(name = "className")
    private  String className;
    @Column(name = "subject")
    private  String subject;

    public String getClassId() {
        return classId;
    }

    public void setClassId(String classId) {
        this.classId = classId;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }
}

注意
student 对应的实体类Student 需加入ClassRoom的参数
因为classroom 和student是一对多的关系,所以在student角度来看是多对一即ManyToOne
student的实体类如下:

package com.example.springboothibernate.entity;
import javax.persistence.*;

/**
 *  springboot集成hibernate 实例
 * @Entity用来标识这是一个实体类
 * @Id hibernate的特征,必须要一个id不然会报错
 * @Column(name = "sid") 用来跟表的字段做个映射,如果名字相同就不需要写
 * @return
 */
@Entity
@Table(name="student")
public class Student {
    @Id
    @Column(name = "sId")
    //@GeneratedValue(strategy= GenerationType.AUTO) 设置主键自增
    private  int sId;
    @Column(name = "sName")
    private  String sName;
    @Column(name = "classId")
    private  String classId;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "classId",insertable=false,updatable=false)
    //多表连接查询时一张表里面不能有两个相同字段:处理方法
    // 1.修改表字段 2.添加insertable=false,updatable=false
    private ClassRoom classRoom;

    public int getsId() {
        return sId;
    }

    public void setsId(int sId) {
        this.sId = sId;
    }

    public String getsName() {
        return sName;
    }

    public void setsName(String sName) {
        this.sName = sName;
    }

    public String getClassId() {
        return classId;
    }

    public void setClassId(String classId) {
        this.classId = classId;
    }

    public ClassRoom getClassRoom() {
        return classRoom;
    }

    public void setClassRoom(ClassRoom classRoom) {
        this.classRoom = classRoom;
    }
}

调用查询接口可以看到如下结果:

[
    {
        "sId": 1,
        "sName": "麦迪",
        "classId": "1",
        "classRoom": {
            "classId": "1",
            "className": "一年级",
            "subject": "体育"
        }
    },
    {
        "sId": 0,
        "sName": "利拉德",
        "classId": "2",
        "classRoom": {
            "classId": "2",
            "className": "二年级",
            "subject": "数学"
        }
    },
    {
        "sId": 3,
        "sName": "戴维斯",
        "classId": "3",
        "classRoom": {
            "classId": "3",
            "className": "三年级",
            "subject": "心理学"
        }
    },
    {
        "sId": 8,
        "sName": "詹姆斯",
        "classId": "4",
        "classRoom": {
            "classId": "4",
            "className": "四年级",
            "subject": "计算机科学与技术"
        }
    }
]
你的每一个点赞,我都认真当成了喜欢。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值