1. Hibernate 关联查询
1.1. 说明
Hibernate框架支持通过配置映射关系实现多表关联查询。
1.2. 类型
关联查询分为:一对一(one-to-one)、一对多(one-to-many)、多对一(many-to-one)、多对多(many-to-many)。
1.3. 关联查询的应用场景
当一个POJO对象中包含了一个对象属性或者集合属性时,使用一般的Hibernate的查询无法完成对象或者集合的映射,此时就需要使用Hibernate的关联查询。
总结:关联查询需要在原先配置的基础上增加对象属性和集合属性的配置关系。
1.4. 准备SQL脚本
SET SESSION FOREIGN_KEY_CHECKS=0;
/* Drop Tables */
DROP TABLE IF EXISTS tb_result;
DROP TABLE IF EXISTS tb_student_identifer;
DROP TABLE IF EXISTS tb_student_teacher;
DROP TABLE IF EXISTS tb_student;
DROP TABLE IF EXISTS tb_teacher;
/* Create Tables */
-- 成绩表
CREATE TABLE tb_result
(
result_id int NOT NULL AUTO_INCREMENT COMMENT '成绩编号',
result_subject varchar(50) COMMENT '科目',
result_score float COMMENT '分数',
student_id int NOT NULL COMMENT '学生编号',
PRIMARY KEY (result_id)
) COMMENT = '成绩表';
-- 学生表
CREATE TABLE tb_student
(
student_id int NOT NULL AUTO_INCREMENT COMMENT '学生编号',
student_name varchar(50) COMMENT '学生名',
student_pwd varchar(50) COMMENT '密码',
PRIMARY KEY (student_id)
) COMMENT = '学生表';
-- 学生身份信息表
CREATE TABLE tb_student_identifer
(
student_id int NOT NULL COMMENT '学生编号',
student_idcard varchar(30) COMMENT '身份证号码',
student_number varchar(50) COMMENT '学号',
PRIMARY KEY (student_id)
) COMMENT = '学生身份信息表';
-- 学生教师关系表
CREATE TABLE tb_student_teacher
(
student_id int NOT NULL COMMENT '学生编号',
teacher_id int NOT NULL COMMENT '教师编号'
) COMMENT = '学生教师关系表';
-- 教师表
CREATE TABLE tb_teacher
(
teacher_id int NOT NULL AUTO_INCREMENT COMMENT '教师编号',
teacher_name varchar(50) COMMENT '教师名字',
teacher_pwd varchar(50) COMMENT '登录密码',
PRIMARY KEY (teacher_id)
) COMMENT = '教师表';
根据数据库表,建立对应的POJO以及映射文件。
注意:多对多的关联表只做关联桥梁,不生成POJO对象。
--pojo:
public class Student {
private Integer studentId; // 学生编号
private String StudentName; // 姓名
private String studentPwd; // 密码
// get、set方法
}
——————————————————————————
public class StudentIdentifer {
private Integer studentId;
private String studentIdcard;
private String studentNumber;
// get、set方法
}
——————————————————————————
public class Teacher {
private Integer teacherId;
private String teacherName;
private String teacherPwd;
// get、set方法
}
——————————————————————————
public class Result {
private Integer resultId;
private String resultSubject;
private Float resultScore;
private Integer studentId;
// get、set方法
}
xxx.hbm.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC