xml说明:

<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo对象">
<id column="表的主键字段,或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" />
<result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)"/>
<association property="pojo的一个对象属性" javaType="pojo关联的pojo对象">
<id column="关联pojo对象对应表的主键字段" jdbcType="字段类型" property="关联pojo对象的主席属性"/>
<result column="任意表的字段" jdbcType="字段类型" property="关联pojo对象的属性"/>
</association>
<!-- 集合中的property须为oftype定义的pojo对象的属性-->
<collection property="pojo的集合属性" ofType="集合中的pojo对象">
<id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" />
<result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的pojo对象的属性" />
</collection>
</resultMap>

1.根据查询进行嵌套

1.创建实体类。编写映射文件,编写多表查询语句,例如:

//------------映射文件------------//

<?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">
<!-- 命名空间:防止sql语句的id重名
格式:包名+类名/包名+mapper文件名
parameterType:sql语句传参类型
resultType:返回结果类型
useGeneratedKeys:使用自增主键
-->
<mapper namespace="cn.aaa.entity.student.mapper">
<select id="getStudent" resultMap="StudentTeacher">
select s.id sid,s.name sname,t.id tid,t.name tname from students s,teacher t where s.id=t.id
</select> <!-- 查询结果是student,column也可以填写查询出来的表的别名 -->
<resultMap id="StudentTeacher" type="Student">
<id column="sid" property="id" />
<result column="sname" property="name"/>
<!-- 关联对象property 关联对象在student在实体类中的属性 -->
<association property="teacher" javaType="Teacher">
<id column="tid" property="id"/>
<result column="tname" property="name"/>
</association>
</resultMap>
</mapper>

2.修改对应的dao类,例如:

//------------dao接口类------------//

//分页查询所有的值1,以map传递参数
public List<Student> selectAll() throws IOException
{
SqlSession session=MyBatisUtil.getSession();
List<Student> list=session.selectList("cn.lxy.entity.student.mapper.getStudent");
session.close();
return list;
}

3.编写测试类

//------------测试类------------//

public static void main(String[] args) throws IOException {
SqlSession session=MyBatisUtil.getSession();
//此处用session的映射方法实现接口,直接把接口类当作映射处理
List<Student> list=new StudentDao().selectAll();
for(Student s:list)
{
System.out.println(s);
}
}

2.根据结果进行嵌套

1.映射文件中编写查询所有的信息,例如:

//------------映射文件------------//

<select id="getStudent" resultMap="StudentTeacher">
select * from students
</select>

2.再对结果集进行映射处理,例如:

//------------映射文件------------//

<resultMap id="StudentTeacher" type="Student">
<!--此处的selelct属性关联一个新的mapper文件,但也可以直接写成select标签和对应语句-->
<association property="teacher" column="tid" javaType="Teacher" select="cn.lxy.entity.teacher.mapper.getTeacher">
</association>
</resultMap>

//------------映射文件------------//

<select id="getStudent" resultMap="StudentTeacher">
select * from students
</select>
<resultMap id="StudentTeacher" type="Student">
<association property="teacher" column="tid" javaType="Teacher" select="cn.lxy.entity.teacher.mapper.getTeacher">
</association>
</resultMap>
<select id="getTeacher" resultType="Teacher">
select * from teacher where id=#{id}
</select>

3.修改对应的dao类和测试类(同1)

MyBatis(8)——联表多对一的处理的更多相关文章

  1. mybatis之联表查询

    今天碰到了一个问题,就是要在三张表里面各取一部分数据然后组成一个list传到前台页面显示.但是并不想在后台做太多判断,(因为涉及到for循环)会拉慢运行速度.正好用的框架是spring+springM ...

  2. Mybatis框架-联表查询显示问题解决

    需求:查询结果要求显示用户名,用户密码,用户的角色 因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了. 这里需要在User实体类中添加 ...

  3. mybatis一对一联表查询的两种常见方式

    1.一条语句执行查询(代码如下图)  注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_i ...

  4. MyBatis联表查询

    MyBatis逆向工程主要用于单表操作,那么需要进行联表操作时,往往需要我们自己去写sql语句. 写sql语句之前,我们先修改一下实体类 Course.java: public class Cours ...

  5. mybatis 联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  6. MyBatis学习存档(5)——联表查询

    之前的数据库操作都是基于一张表进行操作的,若一次查询涉及到多张表,那该如何进行操作呢? 首先明确联表查询的几个关系,大体可以分为一对一和一对多这两种情况,接下来对这两种情况进行分析: 一.建立表.添加 ...

  7. MyBatis联表查询——别名方式

    在使用MyBatis你想工程时,单表操作其实是非常完美的,涉及到多表联合查询时,需要我们自己写联表的SQL语句. 我拿出项目中的部分代码作为示例, EmployeeMapper.xml: <?x ...

  8. Mybatis入门(四)------联表查询

    Mybatis联表查询 一.1对1查询 1.数据库建表 假设一个老师带一个学生 CREATE TABLE teacher( t_id INT PRIMARY KEY, t_name VARCHAR(3 ...

  9. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

随机推荐

  1. 图片,base64 互转

    import sun.misc.BASE64Decoder; import java.io.FileOutputStream; import java.io.OutputStream; /** * @ ...

  2. rabbitmq系列问题解决:406, "PRECONDITION_FAILED - inequivalent arg 'durable'

    1. 安装rabbitmq,查看官网文档: https://www.rabbitmq.com/#getstarted 由于我是先安装了rabbitmq后自己随手创建了queue,后面又按照官方给的&q ...

  3. Python中numpy模块的简单使用

    # encoding:utf-8 import numpy as np data1 = np.array([1, 2, 3, 4, 5]) print(data1) data2 = np.array( ...

  4. 第一个安卓app——计算器

    几天前,我花了一天时间,结合这段时间所学知识开发出了一个简单的计算器,它由两个TextView和23个Button组成,代码会放在文章结尾. TextView TextView:上面一个TextVie ...

  5. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(6.15)-- 写命令

    6.15 Write command 写命令 写命令写数据和元数据,如果适用介质,发到逻辑块相应的I/O controller.主机也可以指定保护信息,作为操作的一部分包含进来. 命令用Command ...

  6. Wannafly Camp 2020 Day 1C 染色图 - 组合数学,整除分块

    定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包 ...

  7. form表单jquery提交400错误

    今天在用jquery提交form表单的时候出现了一个奇怪的400错误,最后发现原因是因为使用了元素选择器来选择form表单,$('form'),使用这种方式导致了某些参数提交不上去,参数匹配不上于是s ...

  8. PyTorch对ResNet网络的实现解析

    PyTorch对ResNet网络的实现解析 1.首先导入需要使用的包 import torch.nn as nn import torch.utils.model_zoo as model_zoo # ...

  9. AE开发常见问题总结

    一. Arcgis10.0 组件初始化失败解决方法: ESRI.ArcGIS.RuntimeManager.BindLicense(ESRI.ArcGIS.ProductCode.EngineOrDe ...

  10. opencv-python常用接口

    最直接的是参考官网:https://docs.opencv.org/4.2.0/d6/d00/tutorial_py_root.html