当前位置: 首页 > news >正文

成都网站建设系统新闻发布会主题

成都网站建设系统,新闻发布会主题,代运营公司哪里有,wordpress调用服务器文件夹目录 一、创建表结构 1. 学生表 (student) 2. 教师表 (teacher) 二、一对一 & 多对一 关系映射 1. 连表查询(直接查询) 2. 分步查询(懒加载) 三、一对多 关系映射 1. 直接查询 2. 分步查询 四、MyBatis 延迟加载&am…

目录

一、创建表结构

1. 学生表 (student)

2. 教师表 (teacher)

二、一对一 & 多对一 关系映射

1. 连表查询(直接查询)

2. 分步查询(懒加载)

三、一对多 关系映射

1. 直接查询

2. 分步查询

四、MyBatis 延迟加载(懒加载)

1. 配置全局懒加载

2. 配置分步查询的懒加载

3. 测试代码

4. 强制立即加载(eager)


一、创建表结构

在 MyBatis 进行关联映射时,我们需要创建 student(学生表)和 teacher(教师表),并建立它们之间的关联。

1. 学生表 (student)

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (`id` int(11) NOT NULL AUTO_INCREMENT,`Sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` int(11) DEFAULT NULL,`t_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;INSERT INTO `student` VALUES (1, '张三', '男', 18, 1);
INSERT INTO `student` VALUES (2, '李四', '女', 18, 1);
...SET FOREIGN_KEY_CHECKS = 1;

2. 教师表 (teacher)

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (`id` int(11) NOT NULL AUTO_INCREMENT,`Tname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;INSERT INTO `teacher` VALUES (1, '张老师');
INSERT INTO `teacher` VALUES (2, '李老师');SET FOREIGN_KEY_CHECKS = 1;

二、一对一 & 多对一 关系映射

1. 连表查询(直接查询)

实体类
public class Student {private Integer id;private String Sname;private String sex;private Integer age;private Integer t_id;private Teacher teacher; // 关联的教师对象
}public class Teacher {private Integer id;private String Tname;
}
查询语句
<select id="getStudent1" resultMap="StudentTeacher1">SELECT student.id, student.Sname, teacher.TnameFROM studentLEFT JOIN teacher ON student.t_id = teacher.id
</select><resultMap id="StudentTeacher1" type="com.qcby.entity.Student"><result property="id" column="id"/><result property="Sname" column="Sname"/><association property="teacher" javaType="com.qcby.entity.Teacher"><result property="id" column="id"/><result property="Tname" column="Tname"/></association>
</resultMap>

2. 分步查询(懒加载)

<select id="getStudent" resultMap="StudentTeacher">SELECT * FROM student;
</select><resultMap id="StudentTeacher" type="com.qcby.entity.Student"><association property="teacher" column="t_id" javaType="com.qcby.entity.Teacher" select="getTeacher"/>
</resultMap><select id="getTeacher" resultType="com.qcby.entity.Teacher">SELECT * FROM teacher WHERE id = #{t_id};
</select>

三、一对多 关系映射

1. 直接查询

实体类
public class Teacher {private Integer id;private String Tname;private List<Student> students; // 一个老师有多个学生
}
查询语句
<select id="getTeacher" resultMap="TeacherStudent">SELECT teacher.id, teacher.Tname, student.SnameFROM teacherLEFT JOIN student ON student.t_id = teacher.id;
</select><resultMap id="TeacherStudent" type="com.qcby.entity.Teacher"><collection property="students" ofType="com.qcby.entity.Student"><result property="Sname" column="Sname"/></collection>
</resultMap>

2. 分步查询

<select id="getTeacher" resultMap="TeacherStudent2">SELECT * FROM teacher;
</select><resultMap id="TeacherStudent2" type="com.qcby.entity.Teacher"><collection property="students" column="id" ofType="com.qcby.entity.Student" select="getStudentByTeacherId" />
</resultMap><select id="getStudentByTeacherId" resultType="com.qcby.entity.Student">SELECT * FROM student WHERE t_id = #{t_id};
</select>

四、MyBatis 延迟加载(懒加载)

1. 配置全局懒加载

<settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/>
</settings>

2. 配置分步查询的懒加载

<association property="teacher" column="t_id" javaType="com.qcby.entity.Teacher"select="com.qcby.dao.TeacherDao.getTeacher" fetchType="lazy"/>

3. 测试代码

@Test
public void getStudent() {List<Student> studentList = mapper.getStudent();for (Student student : studentList) {System.out.println(student.getSex());}
}@Test
public void getStudentWithTeacher() {List<Student> studentList = mapper.getStudent();for (Student student : studentList) {System.out.println(student.getTeacher().getTname());}
}

4. 强制立即加载(eager)

<association property="teacher" column="t_id" javaType="com.qcby.entity.Teacher"select="com.qcby.dao.TeacherDao.getTeacher" fetchType="eager"/>

五、总结

  • 一对一 & 多对一 可以使用 连表查询分步查询(懒加载)
  • 一对多 关系可以使用 结果嵌套查询嵌套
  • 懒加载 需要在 MyBatis 配置文件映射 XML 里配置。
  • 某些查询可以强制使用立即加载(eager),避免不必要的多次查询。

http://www.yayakq.cn/news/410437/

相关文章:

  • 动漫做h免费网站有哪些网站建设判断题
  • 网站app定制长沙企业网站制作服务报价
  • 深圳建设网站的公司简介长沙百度seo优化电话
  • 宿州专业网站建设公司宣传片制作标准参数
  • 做废旧哪个网站好如何组做网站
  • 学校网站建设策划书模板网站开发前景知乎
  • 360阻止建设银行网站建个网址需要多少钱
  • 在唐山做网站多少钱wordpress怎么加站点图标
  • win7系统做网站服务器系统商标购买平台
  • 免费自助建站源码虚拟云手机 免费
  • 网站建设工作总结6用数据库做网站
  • 湛江网站建设公众号的制作方法和步骤
  • 学院评估 网站建设整改建站边检站
  • 渭南网站建设网站建设响应式网站怎么设置
  • 兼职做平面模特网站瑞安企业网站建设
  • 个人站点的制作百度问答我要提问
  • 建设网站你认为需要注意广州印刷网站建设
  • 网站被人做跳转电子商务网络营销方式有哪些
  • 无极限网站模板p2p网站开发费用
  • 商城网站开发 多少钱广东腾越建筑工程有限公司
  • 广西做网站怎么建立一个博客网站
  • 网站制作与建设书籍上海企业网站建设制
  • 网站设计哪家公司好搬瓦工搭建wordpress
  • 网站热区图科技成果转化
  • 需要找做网站的做肝病科网站
  • 电商网站 设计方案中医协会网站建设方案
  • 这样可以做网站做网站的公司找客户
  • 做彩票类网站用什么服务器校园网络文明建设方案
  • 网站制作时如何分析竞争对手中国亚马逊跨境电商
  • 下载app 的网站 如何做多语言企业网站开发