Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MyBatis-多表查询(一对多)

MyBatis-多表查询(一对多)

作者头像
星哥玩云
发布于 2022-09-14 13:28:43
发布于 2022-09-14 13:28:43
97201
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:1
代码可运行

1、多表查询(一对多)

1.1、使用多表查询前的准备

准备好班级表和学生表

1.2、需求分析

查询所有班级下面的学生信息

班级信息和他的学生信息为一对多关系,并且在查询班级的信息过程中查询出学生信息。我们想到了左外连接查询比较合适。

SQL如下:

select c.cname,s.* from classes c left join students s on c.cid=s.cid order by c.cid

2、案例实现

2.1、新建StudentNew.java文件

新的students表的javabean

2.2、修改Classes.java文件

加入一个List对象存储StudentsNew数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private StudentsNew students;
public StudentsNew getStudents() {
        return students;
}

public void setStudents(StudentsNew students) {
        this.students = students;
}

2.2、创建IClassesDao.java文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.tyschool.mb005.javabean.Classes;

import java.util.List;

public interface IClassesDao {
    List<Classes> findAll();
}

2.3、创建IClassesDao.xml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tyschool.mb005.students.dao.IClassesDao">
    <resultMap id="classesMap" type="com.tyschool.mb005.javabean.Classes">
        <id column="cid" property="cid"></id>
        <result column="cname" property="cname"></result>
        <collection property="students" ofType="com.tyschool.mb005.javabean.StudentsNew">
            <id column="s_id" property="sid"></id>
            <result column="sname" property="sname"></result>
            <result column="ssex" property="ssex"></result>
            <result column="sage" property="sage"></result>
        </collection>
    </resultMap>
    <select id="findAll" resultMap="classesMap">
      select c.cname,s.sid as s_id,s.sname,s.ssex,s.sage from classes c left join students s  on c.cid=s.cid order by s.cid
    </select>
</mapper>

注:

collection标签是用于建立一对多中集合属性的对应关系

ofType属性用于指定集合元素的数据类型

property属性关联查询的结果集存储在哪个属性上

2.4、编写测试类MbClassesTest.java文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.tyschool.mb005.javabean.Classes;
import com.tyschool.mb005.students.dao.IClassesDao;
import com.tyschool.mb005.students.dao.IStudentsDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MbClassesTest {
    private InputStream in;
    private SqlSession session;
    private IClassesDao classesDao;
    @Test
    public void findAll(){
        List<Classes> list=classesDao.findAll();
        for(Classes c:list){
            System.out.println(c+":"+c.getStudents());
        }
    }
    @Before
    public void init()throws IOException {
        in= Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=builder.build(in);
        session=factory.openSession();
        classesDao=session.getMapper(IClassesDao.class);
    }
    @After
    public void destroy() throws IOException {
        session.commit();;
        session.close();
        in.close();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MyBatis-多表查询(一对一)
因为一个学生信息只能在一个班级里,所以从查询学生信息出发关联查询班级信息为一对一查询。
星哥玩云
2022/09/14
3690
MyBatis-多表查询(一对一)
MyBatis注解(多表)
@Result(column=" “,property=”",one=@One(select=""))
星哥玩云
2022/09/14
5700
MyBatis-延迟加载
就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载。
星哥玩云
2022/09/14
1.1K0
MyBatis_resultMap 的关联方式实现多表查询(多对一)
项目结构 1.实体类 2.Mapper层 3.service层 4.工具层 5.测试层 项目截图 1、实体类 创建班级类(Clazz)和学生类(Student),添加相应的方法。
时间静止不是简史
2020/07/26
1.4K0
MyBatis-多表查询(多对多)
老师信息与学生信息为多对多的关系,一个学生有多个老师,一个老师同样可以有多个学生。要想知道老师下的学生信息,不能直接查到我们的学生信息,只能通过中间表(tors)才能关联到学生信息。
星哥玩云
2022/09/14
1.5K0
MyBatis-多表查询(多对多)
MyBatis 多表操作
  关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。
Demo_Null
2020/09/28
3600
MyBatis 多表操作
MyBatis注解(单表)
1、MyBatis注解开发前的准备 1.1、MyBatis常用注解 @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Result 一起使用,封装多个结果集 @ResultMap:实现引用@Results 定义的封装 @One:实现一对一结果集封装 @Many:实现一对多结果集封装 @SelectProvider: 实现动态SQL映射 @CacheNamespace:实现注解二级缓存的使
星哥玩云
2022/09/14
2850
Spring入门
Spring 是一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架,具有很高的凝聚力和吸引力。Spring 以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核。
星哥玩云
2022/09/14
7990
Spring入门
java进阶|Mybatis系列文章(三)表关联查询操作
整个项目所需要的xml文件进行数据的增删改查操作ClassesMapper.xml文件
码农王同学
2020/04/27
8400
Mybatis 注解
  我们可以看到,明明结果已经查询出来了,为什么打印出来却是空的。这个是因为属性名和列名不一致造成的,类似于我们这种 sId ☞ s_id 可以打开驼峰之自动转换。如果二者之间没有任何联系就需要使用 @Results 一一映射。
Demo_Null
2020/09/28
3530
Mybatis 注解
【MyBatis】XML版快速入门——练习题
@Mapper作用与 Mapper 用于告诉sprigng框架此接口的实现类由Mybatis负责创建,并将其实现类对象存储到spring容器中。
陶然同学
2023/05/09
2960
【MyBatis】XML版快速入门——练习题
【愚公系列】2023年03月 Java教学课程 118-Mybatis(多表操作)
多表模型是一种关系型数据库设计模式,它使用多个表格来存储和管理数据。在多表模型中,每个表格都包含一组相关的数据,并使用外键等关系来与其他表格建立连接。这种模型通常用于处理复杂的数据结构,例如具有多个关系的实体或需要动态添加或删除属性的实体。
愚公搬代码
2023/04/04
6840
【愚公系列】2023年03月 Java教学课程 118-Mybatis(多表操作)
_Mybatis关联查询【附实战案例】
会洗碗的CV工程师
2023/11/20
2050
_Mybatis关联查询【附实战案例】
MyBatis多表查询详解
MyBatis多表查询 0. 分析 一对一 一个用户只能拥有一个一个账户 sql语句: select u.*,a.id as aid,a.uid,a.money from account a,user u where a.uid =u.id; 一对多 一个用户可以拥有多个账户 sql语句 select u.*,a.id as aid ,a.uid,a.money from user u left outer join account a on u.id =a.uid 多对多
不愿意做鱼的小鲸鱼
2022/09/24
1K0
MyBatis多表查询详解
MyBatis 详解(一对一,一对多,多对多)
1、什么是MyBatis?   MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,
IT可乐
2018/01/04
5.5K0
MyBatis 详解(一对一,一对多,多对多)
Mybatis【14】-- Mybatis如何实现一对多查询?
注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-10-one2many,需要自取,需要配置maven环境以及mysql环境(sql语句在resource下的test.sql中),觉得有用可以点个小星。
秦怀杂货店
2021/01/23
1.2K0
Mybatis 实战:一对多关系
公司有若干名员工,此时,该公司与其员工之间的关系就属于一对多的关系。根据以上信息,我们可以创建公司信息与员工信息两张表。其中,公司表沿用上一个例子中的表。根据公司编号(ID)查询公司信息及其员工信息。
耕耘实录
2021/12/07
3830
_MyBatis注解开发---实现自定义映射关系和关联查询
会洗碗的CV工程师
2023/11/21
3570
_MyBatis注解开发---实现自定义映射关系和关联查询
MyBatis一对多,多对一(图文并茂)
链接:https://pan.baidu.com/s/1FX4TmyKqZQx39ncn8TItfw 密码:1h1i
CBeann
2023/12/25
2850
MyBatis一对多,多对一(图文并茂)
Mybatis分解式查询
一、Mybatis一对多分解式查询 分解式查询就是将一条Sql语句拆分成多条 在MyBatis多表查询中,使用连接查询时一个Sql语句就可以查询出所有的数据。如: # 查询班级时关联查询出学生 select *    from classes    left join student    on student.classId = classes.cid 也可以使用分解式查询,即将一个连接Sql语句分解为多条Sql语句,如: # 查询班级时关联查询出学生 select * from
会洗碗的CV工程师
2023/04/12
4090
Mybatis分解式查询
相关推荐
MyBatis-多表查询(一对一)
更多 >
LV.6
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验