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. Dubbo之服务消费

    Dubbo的服务消费主要包括两个部分.第一大步是ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例,这是服务消息的关键.第二大步是把Invoker ...

  2. JS中axios使用注意点

    今天遇到这样一个问题,前端会同时弹出成功和失败的两个提示框,由于不是本人操作,也没有怀疑是前端代码的问题,就索性根据后端的日志作为分析依据,开始个人以为是后端接口上班了两次结果,一个是成功,另外一个是 ...

  3. 如何在macOS下安装geoserver

    macOS 下的编译包 如果是使用安装文件,请查看官网文档,如果想要部署在已有的tomcat服务下,请查看网页压缩包章节. Web archive. An alternate way of insta ...

  4. 删除Eclipse中的SVN账号信息-SVN切换用户

    在eclipse中经常用到用svn进行代码版本控制,为了提交或更新代码的时候不反复地提示我们输入用户名和密码,于是我们就习惯把访问SVN的用户名密码自动保存起来. 以便下次自动使用,不要再次手工多次输 ...

  5. setUserData

    node.setUserData();//设置每个节点的datanode.getUserData();

  6. VScode 编辑器快捷键被占用

    在家办公这个开发环境实在是让人受不鸟 .mysql .vscode 对连QQ都没有运行还是不行.排查最终发现了这个家伙—搜狗输入法.微软输入法 这两个把系统快捷键占得那个全 我这个全局搜索死活用不了, ...

  7. Working copy not locked; this is probably a bug, please report

    问题描述 svn: Unable to lock 'G:\chengXu\2017_Year\JFW\Easy7\src' 解决方案

  8. linux修改主机名(hostname)

    修改/etc/sysconfig/network文件并重启

  9. .Net中C# Dictionary 用法

    Dictionary提供快速的基于键值的元素查找. 结构是:Dictionary <[key] , [value] >,当你有很多元素的时候可以用它. 它包含在System.Collect ...

  10. codeforces 1269D. Domino for Young (二分图证明/结论题)

    链接:https://codeforces.com/contest/1269/problem/D 题意:给一个不规则的网格,在上面放置多米诺骨牌,多米诺骨牌长度要么是1x2,要么是2x1大小,问最多放 ...