多表集合嵌套查询

1.创建数据库表

CREATE TABLE course(
  c_id INT(5) PRIMARY KEY,
  c_name VARCHAR(20)
);

CREATE TABLE students(
  s_id INT(5) PRIMARY KEY,
  s_name VARCHAR(20),
  s_sal DOUBLE(8,2)
);

CREATE TABLE students_course(
  s_id INT(5),
  c_id INT(5)
);

2.创建javabean

public class Students {
    private Integer sId;
    private String sName;
    private Double sSal;
    //一个学生选多门课程
    private List<Course> courseList;
}

public class Course {
    private Integer cId;
    private String cName;
}

3.映射文件

StudentsMapper。xml

<?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="org.zenzzat.toa.core.test.dao.StudentsMapper" >
  <resultMap id="CourseResultMap" type="org.zenzzat.toa.core.test.entity.Course" >
    <id column="c_id" property="cId" jdbcType="INTEGER" />
    <result column="c_name" property="cName" jdbcType="VARCHAR" />
  </resultMap>
  <resultMap id="StudentsResultMap" type="org.zenzzat.toa.core.test.entity.Students" >
    <id column="s_id" property="sId" jdbcType="INTEGER" />
    <result column="s_name" property="sName" jdbcType="VARCHAR" />
    <result column="s_sal" property="sSal" jdbcType="DOUBLE" />
    <collection property="courseList" column="s_id" javaType="ArrayList" ofType="org.zenzzat.toa.core.test.entity.Course"
                select="selesctCourseInStudents"/>
  </resultMap>

  <select id="selectStudents" parameterType="int" resultMap="StudentsResultMap">
    SELECT * FROM students
    WHERE s_id = #{sId};
  </select>

  <select id="selesctCourseInStudents" parameterType="int" resultMap="CourseResultMap">
    SELECT * FROM course
    WHERE c_id IN (SELECT sc.c_id FROM students_course sc WHERE sc.s_id = #{sId});
  </select>

</mapper>
时间: 2024-12-15 22:55:11

多表集合嵌套查询的相关文章

mybatis“集合嵌套查询”和“集合嵌套结果”两种方法实现数据库一对多关系

两个实体类分别如下:User用户类和Goods商品类.一个用户对应多个商品(一对多) package com.leo.entity; import java.util.List; public class User { private Integer id; private String username; private Integer age; private String address; private List<Goods> goodsList; public List<Goo

MyBatis之高级关联和集合映射(二、嵌套查询和嵌套结果小案例)

三张表,通过班级 clsId=3001 查找班级和学生的信息 1. 建表 表结构如下 create table student ( stuId number(4) primary key, stuName varchar2(20) not null, stuSex varchar2(4), stuBirthday date, classId number(4) ); create table classes ( clsId number(4) primary key, clsName varch

数据库 - 连接查询、嵌套查询、集合查询

连接查询 连接查询:同时涉及多个表的查询 连接条件或连接谓词:用来连接两个表的条件 一般格式: [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3> 连接字段:连接谓词中的列名称 连接条件中的各连接字段类型必须是可比的,但名字不必是相同的 嵌套循环法(

【Mysql】利用内连接与嵌套查询实现多表查询,主键、外键的基本概念

虽然多表查询,在计算机的必须课,数据库,里面已经大讲特讲,但是这个难点很多老师都没有讲深讲透.跟你净扯一大堆,左连接右连接的东西,让人一头雾水.老师把所有多表查询的方法告诉你,但是到头来一种方法都没有掌握.其实只要记住一种就够了,学会多表查询,除了在你考数据库能够拿到很高分之外,到了实际应用,很多地方都用到多表查询.比如论坛工程中分析回帖发帖的关系,提供该用户发了什么帖子的功能.比如信息管理系统中,分析班级与学生.老师之间的关系,提供该班级中存在多少学生的查询功能.就需要用到多表查询,你总不能把

sql的嵌套查询,把一次查询的结果做为表继续进一步查询;内联视图

Mysql的嵌套表查询 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询可以: 出现在Where子句中, 出现在from子句中,作为一个临时表使用, 出现在select list中,作为一个字段值来返回. 示例 1.出现在where子句中 单行子查询 :单行子查询是指子查询的返回结果只有一行数据.当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较. select

select 嵌套查询

1. SELECT语句的子查询 语法:     SELECT ... FROM (subquery) AS name ... 先创建一个表: CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT);INSERT INTO t1 VALUES (1,'1',1.0);INSERT INTO t1 VALUES (2,'2',2.0); 我们就可以进行以下的嵌套查询了:SELECT sb1,sb2,sb3       FROM (SELECT s1 AS sb1

MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询

支持的 JDBC 类型为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 JDBC 类型. BITFLOATCHARTIMESTAMPOTHERUNDEFINEDTINYINTREALVARCHARBINARYBLOBNVARCHARSMALLINTDOUBLELONGVARCHARVARBINARYCLOBNCHARINTEGERNUMERICDATELONGVARBINARYBOOLEANNCLOBBIGINTDECIMALTIMENULLCURSORARRAY

MySQL数据库实验四:嵌套查询

实验四          嵌套查询 一.实验目的 掌握SELECT语句的嵌套使用,实现表的复杂查询,进一步理解SELECT语句的高级使用方法. 二.实验环境 三.实验示例 1.  查询与"刘晨"在同一个系学习的学生. SELECT Sno,Sname,Sdept FROM Student WHERE Sdept  IN (SELECT Sdept FROM Student WHERE Sname= ' 刘晨 '): 用自身连接完成 SELECT  S1.Sno,S1.Sname,S1.

sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date desc 逻辑上看着挺对 但是报错: 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效.   只要我们在嵌套子查询视图里面加入: top 100 percent 即可 select * from ( select top 100