Mybatis入门(六)联查之一对多

上一章说了多对一,很多学生被一个老师教,这一章是一个老师教很多学生

目录基本没有变化只是改了配置文件:

2、配置文件:

TeacherMapper接口类:

package com.hdlf.dao;

import com.hdlf.pojo.student;
import com.hdlf.pojo.teacher;

import java.util.List;

public interface TeacherMapper {
    //方式一
    teacher getteacher(int tid);
    //方式二
    teacher getteacher2(int tid);

}

teacher实体类:

package com.hdlf.pojo;

import lombok.Data;

import java.util.List;

public class teacher {
    private int tid;
    private String tname;
    //因为需要获取到学生所以在这里加一个List泛型集合
    List<student> students;

    public List<student> getStudents() {
        return students;
    }

    public void setStudents(List<student> students) {
        this.students = students;
    }

    public teacher() {
    }

    public teacher(int tid, String tname, List<student> students) {
        this.tid = tid;
        this.tname = tname;
        this.students = students;
    }

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    @Override
    public String toString() {
        return "teacher{" +
                "tid=" + tid +
                ", tname=‘" + tname + ‘\‘‘ +
                ", students=" + students +
                ‘}‘;
    }
}

student实体类因为是根据老师查教过多少学生,学生类不用写特别的类:

package com.hdlf.pojo;

public class student {
    private int sid;
    private String sname;
    private int tid;

    @Override
    public String toString() {
        return "student{" +
                "sid=" + sid +
                ", sname=‘" + sname + ‘\‘‘ +
                ", tid=" + tid +
                ‘}‘;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public student(int sid, String sname, int tid) {
        this.sid = sid;
        this.sname = sname;
        this.tid = tid;
    }

    public student() {
    }
}

TeacherMapper.xml配置类:

这个是方式一:

复杂的属性,需要单独处理 对象使用:association

集合使用:collection

javaType 指定属性类型,集合中泛型信息使用ofType获取

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hdlf.dao.TeacherMapper">

    <select id="getteacher" resultMap="getstudent">
        select t.tid, t.tname ,s.sname,s.sid from student s,teacher t where s.tid = t.tid and t.tid = #{tid};
    </select>

    <resultMap id="getstudent" type="teacher">
        <result property="tid" column="tid"></result>
        <result property="tname" column="tname"></result>

        <!--复杂的属性,需要单独处理 对象:association 集合:collection
        javaType 指定属性类型
        集合中泛型信息使用ofType获取
        这个studens就是teacher实体类中的students-->
        <collection property="students" ofType="student">
            <result property="sid" column="sid"></result>
            <result property="sname" column="sname"></result>
        </collection>

    </resultMap>
</mapper>

测试结果:

teacher{tid=0, tname=‘王老师‘, students=[student{sid=1, sname=‘张三‘, tid=1}, student{sid=2, sname=‘李四‘, tid=1}, student{sid=3, sname=‘王五‘, tid=1}, student{sid=4, sname=‘吴六‘, tid=1}, student{sid=5, sname=‘赵七‘, tid=1}]}

方式二个人理解其实都一样:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hdlf.dao.TeacherMapper">
  <select id="getteacher2" resultMap="getallteacher">
        select * from mybatis.teacher where tid = #{tid}
    </select>
    <resultMap id="getallteacher" type="teacher">
        <collection property="students" select="getallstudent" javaType="ArrayList" ofType="studnet" column="tid"></collection>
    </resultMap>
    <select id="getallstudent" resultType="student">
        select * from  mybatis.student;
    </select>

</mapper>

这个就是一对多的处理,小编还是没有领悟到其中的精髓,希望过几天可以顿悟。

原文地址:https://www.cnblogs.com/jzfanqiejiang/p/12207503.html

时间: 2024-10-09 01:43:09

Mybatis入门(六)联查之一对多的相关文章

MyBatis入门(二)---一对一,一对多

一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[emai

Mybatis入门---一对多、多对多

前几天自己配置了Mybatis的高级查询:一对多和多对多,现在记录一下,方便以后用到的时候再回顾,下面是具体的操作步骤 一.首先就是配置Mybatis的xml文件及mapper的xml文件,在这里就不多说了,之前写过这个基本的配置,可以参考:https://www.cnblogs.com/blogs-of-xiu/p/10405407.html 经过配置完基本的xml文件之后,我们就开始实现一对多和多对多的需求. 我这里举的例子是用户和订单,一个用户可以对应多个订单,所以需要的表也是用户表和订单

MyBatis入门(五)---延时加载、缓存

一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[email protec

mybatis入门基础(二)----原始dao的开发和mapper代理开发

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe

Java Persistence with MyBatis 3(中文版) 第一章 MyBatis入门

本章将涵盖以下话题: ž  MyBatis是什么? ž  为什么选择MyBatis? ž  MyBatis安装配置 ž  域模型样例 1.1 MyBatis是什么 MyBatis是一个简化和实现了Java数据持久化层(persistencelayer)的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互. MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin创建.MyBatis 3 是iBATIS的全新设计,支持注解和Mapper

Mybatis入门实例

第一步:创建项目导入jar包 第二步:建表: CREATE TABLE `person` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `NAME` varchar(10) DEFAULT NULL, `GENDER` int(10) DEFAULT NULL, `ADRESS` varchar(50) DEFAULT NULL, `BIRTHDAY` date DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB A

MyBatis多表联查

这篇文章写了以下几个简单的例子,用来说明MyBatis多标联查基本语法 1.sql片段的用法 2.一对多查询 3.多条sql的一对多查询 4.多对一查询 5.多条sql一对多查询 6.多对多查询 这里沿着接口→小配置的路线写了,测试类就是遍历输出结果: 一.接口: 1 package cn.sohappy.acourses.course0921; 2 3 import cn.sohappy.acourses.bean.BillManyToOne; 4 import cn.sohappy.acou

Mybatis入门(1)

MyBatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代码

MyBatis入门程序(基于XML配置)

创建一个简单的MyBatis入门程序,实现对学生信息的增删改查功能(基于XML配置) 一.新建一个Java工程,导入MyBatis核心jar包.日志相关的jar包以及连接Oracle数据库所需驱动包,目录结构如下 二.创建MyBatis核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//myba