MyBatis中association的基本使用方法

目录
  • 通过association对两表进行联表查询
  • 按照查询嵌套处理
  • 按照结果嵌套处理
  • 总结

通过association对两表进行联表查询

student表属性如下

teacher表属性如下

按照查询嵌套处理

  • 关于需求的SQL稍微有点复杂时,可以打开右侧查询框进行语句的编写执行。

当使用以下时,查询出来存在问题

<select id="getStudentTeacher" resultType="Student" >
    select s.id,s.name,t.id, t.name from student s, teacher t where s.tid = t.id
</select>

思路:

  • 查询所有的学生信息
  • 根据查询出来的学生tid,寻找对应的老师

利用结果集映射,联系起来

编写接口

//    查询所有的学生信息以及对应的老师信息
List<Student> getStudent();

编写mapper配置文件

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

<resultMap id="StudentTeacher" type="Student">
    <result property="id" column="id" />
    <result property="name" column="name" />
    <!--        复杂的属性需要单独处理
            对象:association
            集合:collection
-->
    <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>

</resultMap>

<select id="getTeacher" resultType="Teacher">
    select * from teacher where id = #{nid}
</select>

测试得到结果

结果中嵌套了结果

一些注意问题:

  • teacher中的id的传递是根据student中得到的tid,将tid传给id,因此#{}中取什么名字都可以。
  • association将实体类的teacher属性对应上一个结果,这个结果是将tid作为参数参与下一条sql语句产生的。

按照结果嵌套处理

  • 个人认为这种方法更直观
  • 正确的查询
<!--按照结果嵌套处理-->
<select id="getStudent2" resultMap="StudentTeacher2" >
    select s.id sid,s.name sname,t.id tid, t.name tname
    from student s, teacher t
    where s.tid = t.id
</select>

<resultMap id="StudentTeacher2" type="Student">
    <result property="id" column="sid" />
    <result property="name" column="sname" />
    <association property="teacher" javaType="Teacher" >
        <result property="id" column="tid" />
        <result property="name" column="tname" />
    </association>
</resultMap>

查询出来的需要展现的结果都应该在resultMap中进行定义,否则会以默认值进行展示如下,在resultMap中注释掉tid和sname后,执行的结果

总结

到此这篇关于MyBatis中association基本使用的文章就介绍到这了,更多相关MyBatis association使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis映射文件resultMap元素中使用多个association的方法

    现在有一张订单表t_stockorder,其拥有id.code.client_id.merchandise_id.merchandise_number.order_date.operator_id这些字段,其中client_id关联t_client表中code字段,merchandise_id关联t_merchandise表的code字段,operator_id关联t_employee表的code字段. 现在要通过SQL语句将订单表中t_stockorder的数据全部查询出来,SQL语句如下所示

  • Mybatis之association和collection用法

    目录 association和collection用法 1.单个关联查询association 2.多个关联查询 collection 3.鉴别器discriminator association和collection关联查询用法 一对多 collection 一对一 & 多对一 association和collection用法 1.单个关联查询association 1.1实体之间的关联表示 package com.worldly.config.entity; import java.io.S

  • 详解mybatis中association和collection的column传入多个参数问题

    项目中在使用association和collection实现一对一和一对多关系时需要对关系中结果集进行筛选,如果使用懒加载模式,即联合使用select标签时,主sql和关系映射里的sql是分开的,查询参数传递成为问题. mybatis文档: property description column 数据库的列名或者列标签别名.与传递给resultSet.getString(columnName)的参数名称相同.注意: 在处理组合键时,您可以使用column="{prop1=col1,prop2=c

  • Mybatis中collection和association的使用区别详解

    最近一直把collection和association弄混,所以为了增强自己的记忆,就撸一个关系出来算是总结罢了 1. 关联-association 2. 集合-collection 比如同时有User.java和Card.java两个类 User.java如下: public class User{ private Card card_one; private List<Card> card_many; } 在映射card_one属性时用association标签, 映射card_many时

  • 在Mybatis中association标签多层嵌套的问题

    目录 association标签多层嵌套问题 排查 从代码上看没有什么问题 正常代码如下 association集合嵌套 这个返回集合有什么用呢 association标签多层嵌套问题 mybatis里查询使用嵌套association标签时,发现内层的association查询的结果一直为null 排查 检查sql执行情况,发现有数据返回,排除 检查property的值是否和pojo中的对应,值一致,排除 检查column的值是否和数据库的相对应,相对应,排除 那么应该是mybatis没有把数

  • mybatis利用association或collection传递多参数子查询

    有时候我们在查询数据库时,需要以查询结果为查询条件进行关联查询. 在mybatis 中通过 association 标签(一对一查询,collection 一对多 查询) 实现延迟加载子查询 <resultMap id="xxxMap" type="xxxx.bean.xxx" extends="zzzzMap"> <association property="destName" javaType="

  • mybatis collection和association的区别解析

    目录 1.collection标签 1.1 相关代码和运行结果 1.2 collection部分源码解析 1.3 <collection>和<association>的相同的和不同点 最后 1.collection标签 说到mybatis的collection标签,我们肯定不陌生,可以通过它解决一对多的映射问题,举个例子一个用户对应多个系统权限,通过对用户表和权限表的关联查询我们可以得到好多条记录,但是用户信息这部分在多条记录中是重复的,只有权限不同,我们需要把这多条权限记录映射到

  • Mybatis 入门示例代码之 Association

    接下来的文章中,关于Mybatis的示例,全部来自于Mybatis代码中的单元测试代码,通过这些代码能够学习Mybatis中很有用的知识,这些内容在doc文档中可能只是简单提到了,或者有一些文字说明,通过这些单元测试能更直观的了解如何在Mybatis使用这些内容. 这一节内容为Association关联的结果查询,就是在查询出结果后,根据查询的列和resultMap定义的对应关系,来创建对象并写入值. association – 一个复杂的类型关联;许多结果将包成这种类型 嵌入结果映射 – 结果

  • mybatis中一对一关系association标签的使用

    目录 一对一关系association标签使用 1.嵌套的resultMap 2.嵌套的select语句 association标签三种用法 association的用法一 association的用法二 association的用法三 一对一关系association标签使用 association字面翻译为联合之意,Java项目开发中常遇到一对一关系的结果,例如,一个商品对应一个生产商,在查询结果中如果某两个对象是一对一关系一般使用association标签,用法有两种: 1.嵌套的resu

  • MyBatis中association的基本使用方法

    目录 通过association对两表进行联表查询 按照查询嵌套处理 按照结果嵌套处理 总结 通过association对两表进行联表查询 student表属性如下 teacher表属性如下 按照查询嵌套处理 关于需求的SQL稍微有点复杂时,可以打开右侧查询框进行语句的编写执行. 当使用以下时,查询出来存在问题 <select id="getStudentTeacher" resultType="Student" > select s.id,s.name

  • mybatis中延迟加载Lazy策略的方法

    lazy策略原理:只有在使用查询sql返回的数据是才真正发出sql语句到数据库,否则不发出(主要用在多表的联合查询) 1.一对一延迟加载: 假设数据库中有person表和card表:其中person表中有字段pid,pname,page,psex,cid,card表中有字段cid,cnum; 假设要查询某个人的姓名和身份证号码: 原理:在查询姓名时,实际本没有查询出身份证号码的信息,只有当前台使用身份证号时才发出对card的查询,需要查询出身份证号码是采取查询的一种策略: 实现实例: 实现步骤:

  • Mybatis 中的sql批量修改方法实现

    在项目中遇到需要批量更新的功能,原本想的是在Java中用循环访问数据库去更新,但是心里总觉得这样做会不会太频繁了,太耗费资源了,效率也很低,查了下mybatis的批量操作,原来确实有<foreach>标签可以做到. dao  层接口: public class Demo{ private int id; private String name; private String sex; } <pre name="code" class="html"&

  • 关于Mybatis 中使用Mysql存储过程的方法

    1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编程中

  • MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

    1.#{}是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如上面的值 "4,44,514"就会变成" '4,44,514' ": 2.是字符串替换,在处理是字符串替换,MyBatis在处理时,它会将sql中的{}是字符串替换,在处理{ }是字符串替换, MyBatis在处理{ }时,它会将sql中的是字符串替换,在处理是字符串替换,MyB

  • Mybatis中SqlSession接口中selectList方法详解

    目录 1.SqlSession简介 2.selectList方法 3.selectList方法简介 总结 1.SqlSession简介 SqlSession是mybatis持久层框架提供的接口,该接口中包含了大量的CRUD操作方法(既增删改查方法). 2.selectList方法 selectList方法是用于查询的方法,该方法具有多态性,如图所示(打开mybatis的SqlSession接口所得到) 3.selectList方法简介 该方法一共有三种不同的调用方式: List selectLi

  • Oracle在Mybatis中SQL语句的配置方法

    数据库中有下划线的字段在实体中应采用驼峰命名法,如P_NAME对应pName,实例如下: 1.XML文件中SQL语句配置(Geteway.xml文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-m

  • MyBatis中动态sql的实现方法示例

    1. 动态sql 动态sql是mybatis中的一个核心,什么是动态sql? 动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.有些时候,SQL语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可

随机推荐