详解mybatis多对一关联查询的方式

根据ID查询学生信息,要求该学生的教师和班级信息一并查出

第一种关联方式

1.修改实体类Student,追加关联属性,用于封装关联的数据

修改完以后重新生成get set方法还有toString方法

private Teacher teacher;
private Classes classes;

2.修改TeacherMapper相关配置

1.接口类 增加

Teacher selectTeacherById(Integer tid);

2.xml映射文件 增加

<sql id="params">tid,tname</sql>
<select id="selectTeacherById" resultType="Teacher">
    select
    <include refid="params"></include>
    from teacher where tid=#{tid}
</select>

3.修改ClassesMapper 相关配置

1.接口类 增加

Classes selectClassesById(Integer cid);

2.xml映射文件 增加

        <resultMap type="Classes" id="clsMap">
  <id property="cid" column="cid"></id>
  <result property="cname" column="cname"/>
 </resultMap>
 <select id="selectClassesById" resultMap="clsMap">
  select * from classes where cid = #{cid}
 </select>

4.修改StudentMapper 相关配置

1.接口类 增加

Student selectStudentById(Integer sid);

2.xml映射文件 增加

ps:

多对一关联属性配置:

property:关联对象名

javaType:关联对象类型

select:引用的关联查询sql对应id名

column:引用的关联查询sql语句需要的参数

        <resultMap type="Student" id="stuMap">
  <id property="sid" column="sid"/>
  <result property="sname" column="sname"/>
  <result property="age" column="age"/>
  <result property="email" column="email"/>
  <association property="teacher" select="com.yc.dao.TeacherMapper.selectTeacherById" column="tid" javaType="Teacher"></association>
  <association property="classes" select="com.yc.dao.ClassesMapper.selectClassesById" column="cid" javaType="Classes"></association>
 </resultMap>
        <select id="selectStudentById" resultMap="stuMap">
  select * from student where sid = #{sid}
 </select>

5.测试代码

        @Test
 public void test1() {
  Student stu = studentMapper.selectStudentById(100001);
  System.out.println(stu);
 }

第二种配置方式

1.修改实体类Student,追加关联属性,用于封装关联的数据

跟前面一样的

2.修改studentMapper.xml映射文件

ps:接口里面的方法还是跟原来一样的

        <resultMap type="Student" id="stuMap">
  <id property="sid" column="sid" />
  <result property="sname" column="sname" />
  <result property="age" column="age" />
  <result property="email" column="email" />
  <association property="teacher" javaType="Teacher">
   <id property="tid" column="tid"></id>
   <result property="tname" column="tname" />
  </association>
  <association property="classes" javaType="Classes">
   <id property="cid" column="cid"></id>
   <result property="cname" column="cname" />
  </association>
 </resultMap>
 <select id="selectStudentById" resultMap="stuMap">
  select * from student s,teacher t,classes c
  where s.sid=#{sid} and s.tid = t.tid and s.cid=c.cid
 </select>

小结一下:个人感觉第二种方法是会简单许多,只是说,因为查询语句中,连接条件的限制,当cid或者tid为空时,查询到的数据就会是null,而第一种的话,如果只是cid为空,至少还是会显示student和teacher的相关信息

第三种配置方式 全局映射

ps:student类和studentmapper接口类不变

1.修改全局配置文件的setting信息

<setting name="autoMappingBehavior" value="FULL" />
<setting name="mapUnderscoreToCamelCase" value="true" />

2. 修改studentMapper.xml映射文件

ps:

1.实体类的属性名要和表字段名保存一致,或按照驼峰命名规则(属性名:aColumn,字段名:A_COLUMN),settion属性mapUnderscoreToCamelCase设置成true

2.关联表的字段名不能有相同的名字

        <resultMap type="Student" id="stuMap">
  <association property="teacher" javaType="Teacher" />
  <association property="classes" javaType="Classes" />
 </resultMap>
 <select id="selectStudentById" resultMap="stuMap">
  select * from student s,teacher t,classes c where s.sid = #{sid} and
  s.tid=t.tid
  and s.cid=c.cid
 </select>

还是连接查询为空的问题~

总结

到此这篇关于mybatis多对一关联查询的文章就介绍到这了,更多相关mybatis多对一关联查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis关联查询之一对多和多对一XML配置详解

    平时在开发过程中dao.bean和XML文件都是自动生成的,很少写XML的配置关系,今天记录一下mybatis的关联查询中的多对一和一对多的情况. 首先是有两张表(学生表Student和老师Teacher表,注:这里只是为了演示一对多和多对一的情况,请不要杠),为了更易懂,这里只设置了最简单的几个必要字段.表结构如下图 Student表: Teacher表: 创建实体bean Teacher.java: import java.util.List; public class Teacher {

  • Mybatis 一对多和多对一关联查询问题

    首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmaj

  • 详解mybatis多对一关联查询的方式

    根据ID查询学生信息,要求该学生的教师和班级信息一并查出 第一种关联方式 1.修改实体类Student,追加关联属性,用于封装关联的数据 修改完以后重新生成get set方法还有toString方法 private Teacher teacher; private Classes classes; 2.修改TeacherMapper相关配置 1.接口类 增加 Teacher selectTeacherById(Integer tid); 2.xml映射文件 增加 <sql id="para

  • 详解MyBatis直接执行SQL查询及数据批量插入

    一.直接执行SQL查询: 1.mappers文件节选 <resultMap id="AcModelResultMap" type="com.izumi.InstanceModel"> <result column="instanceid" property="instanceID" jdbcType="VARCHAR" /> <result column="insta

  • 图文详解laravel多对多关联模型

    关联模型(多对多) 多对多关系(抽象) 例:一篇文章可能有多个关键词,一个关键词可能被多个文章使用. 关键词表: 字段id 主键 字段keyword 关键词 文章与关键词的关系表: 字段id 主键 -- -- 字段article_id 文章id 字段key_id 关键词id 创建迁移文件: php artisan make:migration create_keyword_table php artisan make:migration create_relation_table 编写迁移文件的

  • 详解SQL Server数据库链接查询的方式

    SQL Server数据库链接查询的方式的相关知识是本文我们主要要介绍的内容,我们知道,通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志.多表连接查询是使用Sql的基本操作,但连接的方式却有多种,熟练使用这些连接方式能够简化Sql语句,提高数据库运行效率. 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中.当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息.连接操作给用户带来很

  • Yii2中hasOne、hasMany及多对多关联查询的用法详解

    前言 hasOne.hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们.为什么?因为这种方式关联查询出来的结果会保留Yii2自有的表头排序功能,以及CheckboxColumn中input的id存值,至于还有没有其它的好处就需要大家去挖掘了,笔者目前就发现了这两个常用的好处.其他的关联查询,像yiidbQuery查询或者原生的SQL语句查询都没有,查询出来在列表展示的时候,表头一排黑. Yii2的hasOne.hasMany多表关联查询,不管是文档还是

  • 详解Mybatis中万能的Map和模糊查询写法

    1.万能的Map 假设,我们的实体类,或者数据库中的表,字段或参数过多,我们接口参数以前用的是实体类,现在考虑使用下Map! 接口: //万能的Map int addUser2(Map<String,Object> map); mapper.xml: <!--Map中的key--> <insert id="addUser2" parameterType="map"> insert into mybatis.user (id,nam

  • Mybatis中使用in()查询的方式详解

    目录 1 使用数组方式 2 使用List集合的方式 3 第三种我们使用Mybatis-plus框架的条件构造器来进行查询 附:Mybatis-plus的条件构造器详细使用教程 总结 这篇文章我会演示几种mybatis中使用in查询的方式. 1 数组.字符串 2 集合 3 使用Myabtis-plus框架的条件构造器来实现 我们在mysql中使用in查询的方式是这样的 那在mybatis中我们使用<foreach>标签来实现包含查询 1 使用数组方式 Mapper: Mapper.xml: &l

  • 详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    一.getMapper()接口 解析:getMapper()接口 IDept.class定义一个接口, 挂载一个没有实现的方法,特殊之处,借楼任何方法,必须和小配置中id属性是一致的 通过代理:生成接口的实现类名称,在MyBatis底层维护名称$$Dept_abc,selectDeptByNo() 相当于是一个强类型 Eg 第一步:在cn.happy.dao中定义一个接口 package cn.happy.dao; import java.util.List; import cn.happy.e

  • 详解MyBatis resultType与resultMap中的几种返回类型

    目录 一.返回集合 1.返回JavaBean集合 2.返回 Map 集合 二.返回 Map 1.一条记录 2.多条记录,需要指定 Map 的 Key 和 Value 的类型 三.返回 resultMap 自定义结果集封装 1.自定义 JavaBean 的封装 2.关联查询的封装,一对一,JavaBean 属性包含 JavaBean 3.关联查询的封装,一对多,JavaBean 属性包含 JavaBean 的集合 4.鉴别器discriminator 一.返回集合 1.返回JavaBean集合 p

随机推荐