Mybatis学习——一对多关联表查询
1.实体类
- public class Student {
- private int id;
- private String name;
- }
- public class Classes {
- private int id;
- private String name;
- private Teacher teacher;
- private List<Student> students;
- }
2.映射文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.zhengbin.entity.classMapper">
- <!-- 方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
- SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1
- -->
- <select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
- select * from class c, teacher t, student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id}
- </select>
- <resultMap type="Classes" id="ClassResultMap3">
- <id property="id" column="c_id" />
- <result property="name" column="c_name" />
- <association property="teacher" javaType="Teacher">
- <id property="id" column="t_id"/>
- <result property="name" column="t_name"/>
- </association>
- <!-- ofType 指定 students 集合中的对象类型 -->
- <collection property="list" ofType="Student">
- <id property="id" column="s_id" />
- <result property="name" column="s_name" />
- </collection>
- </resultMap>
- <!-- 方式二:嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
- SELECT * FROM class WHERE c_id=1;
- SELECT * FROM teacher WHERE t_id=1
- //1 是上一个查询得到的 teacher_id 的值 SELECT*FROMstudentWHEREclass_id=1
- //1是第一个查询得到的c_id字段的值
- -->
- <select id="getClass4" parameterType="int" resultMap="ClassResultMap4">
- select * from class where c_id=#{id}
- </select>
- <resultMap type="Classes" id="ClassResultMap4">
- <id property="id" column="c_id" />
- <result property="name" column="c_name" />
- <association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher2"></association>
- <collection property="list" ofType="Student" column="c_id" select="getStudent"></collection>
- </resultMap>
- <select id="getTeacher2" parameterType="int" resultType="Teacher">
- SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
- </select>
- <select id="getStudent" parameterType="int" resultType="Student">
- SELECT s_id id, s_name name FROM student WHERE class_id=#{id}
- </select>
- </mapper>
classMapper.xml
3.测试类
- package com.zhengbin.test;
- import java.util.List;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import com.zhengbin.entity.Classes;
- import com.zhengbin.entity.Student;
- import com.zhengbin.util.MyBatisUtils;
- public class Test5 {
- @org.junit.Test
- public void getClasses(){
- SqlSessionFactory sessionFactory = MyBatisUtils.getFactory();
- // 参数为TRUE,相当于session.commit();
- SqlSession session = sessionFactory.openSession(true);
- // 读取映射文件
- String statement = "com.zhengbin.entity.classMapper" + ".getClass3";
- /*
- * 查看本班所有学生的信息,与任课老师的信息
- * 一个班级对多个学生,一个班级对一个老师
- * 即 一对多 与 一对一
- */
- Classes c = session.selectOne(statement,1);
- List<Student>list = c.getList();
- System.out.println(list);
- System.out.println(c);
- session.close();
- }
- @org.junit.Test
- public void getClasses1(){
- SqlSessionFactory sessionFactory = MyBatisUtils.getFactory();
- // 参数为TRUE,相当于session.commit();
- SqlSession session = sessionFactory.openSession(true);
- // 读取映射文件
- String statement = "com.zhengbin.entity.classMapper" + ".getClass4";
- Classes c = session.selectOne(statement,1);
- List<Student> list = c.getList();
- System.out.println(list);
- System.out.println(c);
- session.close();
- }
- }
Test.java
Mybatis学习——一对多关联表查询的更多相关文章
- MyBatis学习总结——实现关联表查询(转)
原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关 ...
- MyBatis学习总结(五)——关联表查询的实现
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- MyBatis入门学习教程-实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- Mybatis源码分析--关联表查询及延迟加载(一)
Mybatis提供了关联查询映射的功能. 一.一对一关联
- mybatis深入理解(八)-----关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- mybatis学习 十二 多表查询
Mybatis 实现多表查询方式: (1)业务装配.对两个表编写单表查询语句,在业务(Service)把查询的两个结果进行关联. (2)使用Auto Mapping特性,在实现两表联合查询时通过别名完 ...
- Mybatis学习笔记之---多表查询(1)
Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...
- Mybatis学习笔记之---多表查询(2)
Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...
随机推荐
- PHP之implode与explode函数讲解
implode (PHP 4, PHP 5) implode — 将一个一维数组的值转化为字符串 说明¶ string implode ( string $glue , array $pieces ) ...
- Web应用中的轻量级消息队列
Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚 ...
- uva 514
栈的简单应用 /************************************************************************* > Author: xlc28 ...
- EXCEL,熟悉又不熟悉的项目管理工具
EXCEL,熟悉又不熟悉的项目管理工具 如何利用excel做轻量级的项目管理 教你用Excel进行项目管理
- 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...
- Spring @ Component 的作用
1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...
- 集合、拆箱、装箱、自定义集合的foreach
集合部分 参考:http://msdn.microsoft.com/zh-cn/library/0ytkdh4s(v=vs.110).aspx 集合类型是诸如哈希表.队列.堆栈.包.字典和列表等数据集 ...
- IOS NSPredicate 查询、搜索
简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 最常用到的函数 + (NSPredicate *)predicateWith ...
- **bootstrap常见常用样式总结
1.水平居中 用 .text-center 类
- POJ 2407 Relatives(欧拉函数)
题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...