ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis两种联表查询方式。(学生表与老师表关联查询)

2021-09-16 19:33:05  阅读:183  来源: 互联网

标签:age private 查询 pwd 表与 联表 tno tNo


个人白话:找个桥梁将学生信息和老师信息连接起来。通过先把两个表单都查出来,然后通过tno进行关联。即嵌套 Select 查询。也可以先把两者都连接起来再直接查询。即嵌套结果映射。

​ 示例:查询完整的学生信息,包括老师信息。

​ 学生表单 和 老师表单,数据库字段如下:

#学生表单
CREATE TABLE S(
	sno INT PRIMARY KEY NOT NULL,
	sname VARCHAR(40),
	age INT,
	pwd VARCHAR(60),
	tno INT  ,
	FOREIGN KEY S(tno) REFERENCES T(tno)
);
#老师表单
CREATE TABLE T(
	tno INT PRIMARY KEY NOT NULL,
	tname VARCHAR(40),
	age INT,
	pwd VARCHAR(60)
);

​ java类

//学生类
public class Student {
    private int sNo;
    private String sName;
    private int age;
    private String pwd;
    //难点,通过tno关联T表查询
    private Teacher teacher;
    //...省略实体类其他
}
老师类
public class Teacher {
    private int tNo;
    private String tName;
    private int age;
    private String pwd;
}
  1. 嵌套 Select 查询:通过执行另外一个 SQL 映射语句来加载期望的复杂类型。

    <!--    获取学生全部信息,包括老师。 student为数据库名-->
    <select id="getStudentInformation" resultMap="fromStudentGetTeacher">
        SELECT sno as sNo, sname as sName, age, pwd, tno as tNo FROM student.s WHERE sno = #{sNo};
    </select>
    <resultMap id="fromStudentGetTeacher" type="com.mcwen.pojo.Student">
        <association property="teacher" column="tno" javaType="com.mcwen.pojo.Teacher" select="selectTeacher"/>
    </resultMap>
    <select id="selectTeacher" resultType="com.mcwen.pojo.Teacher">
        SELECT tno as tNo, tname as tName, age, pwd FROM student.t WHERE tno = #{tNo};
    </select>
    
  2. 嵌套结果映射:使用嵌套的结果映射来处理连接结果的重复子集。

    <select id="getStudentInformation"  resultMap="StuTeacher">
        select s.sno as sNo, s.sname as sName, s.age, s.pwd, t.tno as tNo,t.tname as tName,t.age,t.pwd
        from student.s,student.t
        where s.tno=t.tno and s.sno=#{sNo};
    </select>
    <resultMap id="StuTeacher" type="com.mcwen.pojo.Student">
        <result property="sNo" column="sno"/>
        <result property="sName" column="sname"/>
        <result property="age" column="age"/>
        <result property="pwd" column="pwd"/>
        <association property="teacher" column="tno" javaType="com.mcwen.pojo.Teacher" resultMap="getTeacher">
        </association>
    </resultMap>
    <resultMap id="getTeacher" type="com.mcwen.pojo.Teacher">
        <id property="tno" column="getTeacher"></id>
        <result property="tNo" column="tno"></result>
        <result property="tName" column="tname"></result>
        <result property="age" column="age"></result>
        <result property="pwd" column="pwd"></result>
    </resultMap>

重点理解:

复杂属性处理(即示例中Student中包含的Teacher):使用association 处理对象,通过数据库中的关联属性,将其关联到对一个复杂类型的查询。即通过tNo,找到对应的teacher对象。

标签:age,private,查询,pwd,表与,联表,tno,tNo
来源: https://www.cnblogs.com/mincw/p/15297686.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有