结果映射(resultMap)

  • constructor - 用于在实例化类时,注入结果到构造方法中(一般不用)

    • idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
    • arg - 将被注入到构造方法的一个普通结果
  • id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
  • result – 注入到字段或 JavaBean 属性的普通结果
  • association – 一个复杂类型的关联;许多结果将包装成这种类型
    • 嵌套结果映射 – 关联本身可以是一个 resultMap 元素,或者从别处引用一个
  • collection – 一个复杂类型的集合
    • 嵌套结果映射 – 集合本身可以是一个 resultMap 元素,或者从别处引用一个
  • discriminator – 使用结果值来决定使用哪个 resultMap(一般不用)
    • case – 基于某些值的结果映射

      • 嵌套结果映射 – case 本身可以是一个 resultMap 元素,因此可以具有相同的结构和元素,或者从别处引用一个

  id和result的属性 - 映射普通类型

    • property - 映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用
    • column - 数据库中的列名,或者是列的别名
    • javaType - 一个 Java 类的完全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型

  association的属性 - 映射对象

    • property - 用来匹配的 JavaBean 类型
    • javaType - 用来匹配的查询结果对应的java类型
    • column - 如果需要嵌套查询,用来传参,一般和select一起用
    • select - 嵌套查询时传select的id

  collection的属性 - 映射集合

    • property - 用来匹配的JavaBean类型
    • javaType - 用来匹配查询结果对应的java类型
    • ofType - 映射集合的泛型
    • select - 嵌套查询时的select ID
    • column - 如果需要嵌套查询,用来传参,一般和select一起用

 

一对多查询示例:

 <!--按照查询嵌套处理-->
<select id="getList" resultMap="studentTeacher">
select * from student
</select> <resultMap id="studentTeacher" type="student">
<id property="id" column="id"></id>
<result column="name" property="name"></result>
<association property="teacher" column="tid" javaType="teacher" select="getTeacher"></association>
</resultMap> <select id="getTeacher" resultType="teacher">
select * from teacher where id = #{tid}
</select> <!--按照结果嵌套处理-->
<select id="getList" resultMap="studentTeacher" >
select s.id as sid ,s.name as sname,t.id as tid,t.name as tname from student as s inner join teacher as t
on s.id = t.id
</select> <resultMap id="studentTeacher" type="student">
<id property="id" column="sid"></id>
<result column="sname" property="name"></result>
<association property="teacher" javaType="teacher" >
<result property="id" column="tid"></result>
<result column="tname" property="name"></result>
</association>
</resultMap>

多对多查询示例:

 <!--按照结果嵌套处理-->
<select id="getList" resultMap="teacherStudent">
select t.id tid,t.name tname,s.id sid,s.name sname from teacher t,student s where t.id = s.tid
</select>
<resultMap id="teacherStudent" type="teacher">
<id property="id" column="tid"></id>
<result column="tname" property="name"></result> <collection property="students" ofType="student">
<id property="id" column="sid"></id>
<result column="sname" property="name"></result>
</collection>
</resultMap> <!--按照查询嵌套结果-->
<select id="getList" resultMap="teacherStudent">
select * from mybatis.teacher
</select>
<resultMap id="teacherStudent" type="teacher">
<collection property="students" javaType="ArrayList" ofType="student" select="getStudents" column="id" >
</collection>
</resultMap>
<select id="getStudents" resultType="student">
select * from mybatis.student where tid = #{tid}
</select>

Mybatis 结果集映射的更多相关文章

  1. Mybatis结果集映射问题

    之前的数据库图简单都是纯小写格式,这一次做项目为了显得正规一些,模拟实际的情况,采用了驼峰命名的规则,这时候就遇到了结果匹配的问题. 之前只要 <select id="select&q ...

  2. Mybatis学习笔记8 - resultMap自定义结果集映射规则

    一.resultMap自定义结果集映射规则 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public ...

  3. mybatis中处理结果集映射

    单行结果集映射: 接口中方法返回值定义为Map类型,sql语句的resultType属性设置为map即可.这种情况默认把列名作为key,列中的值作为value. 也就是说用map<Strirng ...

  4. Mybatis——ResultMap(结果集映射)的使用

    ResultMap的使用 在Mybatis中,可以使用resultMap(结果集映射)作为sql的返回类型 一般用来解决如下问题: 数据库表字段名和实体类属性名不一致的问题: 多对一问题: 例如:多个 ...

  5. Mybatis学习笔记-ResultMap结果集映射

    解决属性名与字段名不一致的问题 新建项目 --> 测试实体类字段不一致的情况 数据库字段:id,name,pwd 实体类属性:id,name,password 输出结果 User{id=1, n ...

  6. mybatis百科-结果集映射类ResultMap

    目录 1 成员变量 2 构造函数 3 其他函数 3.1 setter 和 getter 函数 4 静态内部类 4.1 成员变量 4.2 构造函数 4.3 建造者相关的函数 4.4 获取配置的构造方法参 ...

  7. Mybatis 强大的结果集映射器resultMap

    1. 前言 resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC ...

  8. mybatis源码追踪2——将结果集映射为map

    org.apache.ibatis.binding.MapperMethod中execute方法 ...} else if (method.returnsMap()) { result = execu ...

  9. mybatis(五):源码分析 - 结果集映射流程

随机推荐

  1. vue的一些基础知识点,后续会更新最全的vue知识点

    axios中jq的基础 jq语法 $(this).hide() 隐藏当前的html元素 $(''#test").hide() 隐藏id='test'的元素 添加新的 HTML 内容 我们将学 ...

  2. 记录 shell学习过程(3) if 的格式

    ] #-e 为检测目录或文件是否存在 !为取反 then mkdir -v /tmp/ echo 'ok' fi if else if [ $USER == 'root' ] then echo 'h ...

  3. Supervision meeting notes 2019/11/29

    topic 分支:  1. subgraph/subsequence mining Wang Jin, routine behavior/ motif. Philippe Fournier Viger ...

  4. Linux源码编译安装php7.3

    ---恢复内容开始--- ps:一切从简 一.安装所需环境 yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel ...

  5. php 基础系列之 php快速入门

    ·插补操作 将简单变量写入一个由双引号引用的字符串中,就叫插补操作.例如: $test = 'xx'; echo "你好:$test"; 注意:插补操作只是双引号引用字符串的特性. ...

  6. Java之字符串替换replace()

    replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的 import java.uti ...

  7. java连接mysql数据库8.0以上版本过程中遇到的坑

    来自:https://blog.csdn.net/u013276277/article/details/80255468 首先,我居然不能用navicat客户端连接上mysql8.0数据库报1251错 ...

  8. layui之laydate

    .点击年份马上关闭窗口并且赋值 html代码: <div class="layui-form-item"> <label class="layui-fo ...

  9. Android开发实战——记账本(6)

    开发日志——(6) 今天将app签名打包,并部署在了真机上.真机上的截图: 运行成功:

  10. Android 服务和广播的使用

    Android 服务和广播的使用 服务的使用 创建服务类 创建一个java文件,取名 mService.java,继承Service. public class mService extends Se ...