Mybatis中resultMap的Colum和property属性详解

目录
  • resultMap的Colum和property属性
    • 1: resultMap标签
    • 2:使用情况
      • 2.1 简单查询
      • 2.2 一对一
      • 2.3 一对多
  • resultMap对column和property的理解
    • select元素有很多属性(这里说用的比较多的)
    • 什么时候我们知道使用resultMap,什么时候又使用resultType呢?
    • 最后说下

resultMap的Colum和property属性

1: resultMap标签

当我们的数据库字段与实体类的属性不一致时,就需要使用该标签进行一一映射。

2:使用情况

2.1 简单查询

 <resultMap id="这个resultMap的id" type="对应实体类的全限定类名">
         <id column="id" property="id"></id>
        <result column="username" property="name"></result>
        <result column="author" property="author"></result>
        <result column="number" property="number"></result>
       .............
       colum对应数据库的字段,property对应实体类的属性
    </resultMap>

他表示对数据按照什么样的规则进行一一映射,如:

  <!-- 根据编号查找书籍-->
    <select id="SelectbooksByNumber" parameterType="String"  resultMap="名字">
        select * from book where number=#{number};
    </select>

上面的查找结果按照你给的resultMap的对应规则进行映射。

2.2 一对一

需要注意的是你sql语句查出来的列名称是别名,那你就要填别名,就不是你数据库的列名称了。

返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型

2.3 一对多

同样和一对一 一样需要注意列名称。

返回结果:User
User中含有Role属性集合 一对多的关系
JavaType是用来指定pojo中属性的类型,
ofType指定的是 映射到list集合属性中pojo的类型
其中Role属性集合为List

pojo

public class User implements Serializable {
    private Integer id;
    private String username;
    private String password;
    private String salt;
    private Integer status; // 用户状态 0: 正常   1:禁用   2:锁定

    //角色集合
    private List<Role> roles;

role表

user表

user与role的映射表

resultMap对column和property的理解

首先,先看看这张图,看能不能一下看明白:

select元素有很多属性(这里说用的比较多的)

  • id:命名空间唯一标识,可以被用来引用这条语句
  • parameterType:将会传入这条语句的参数类的完全限定名或者别名
  • resultType:从这条语句要返回的期望类型的类的完全限定名或别名(这里注意下集合类型,应该是集合可以包含的类型,不能是集合本身),重要:使用resultType或resultMap,但不能同时使用。
  • resultMap:命名引用外部的resultMap,其名称要和外部的resultMap元素的ID名称一致,用于映射其结果到实体类指定对象中。

什么时候我们知道使用resultMap,什么时候又使用resultType呢?

①当去select一张表时,可以使用resultType,这些情况下,MyBatis会在幕后自动创建一个ReusltMap,基于属性名来映射到JavaBean属性上

②所以在使用resultMap时,就必须要写上resultMap相对应的xml

③为了方便我们开发出错,在没有特别要求的情况下,column名可以完全和property名称一致,否则当我们没有对应上的时候,数据库匹配不到,会将某某参数值变为大写,导致我们本来获取小写的参数名,结果没有获取到,后台报错,得不偿失啊!

最后说下

sql中比如,有 andm.id = #{id ,jdbcType=VARCHAR } 要标明jdbcType为什么呢?

解释:

如果你映射了一个javabean,MyBatis通常可以断定类型(项目里好多都要写,我也不知道为啥),然而,如果你映射到的是比如:HashMap,那么应该明确指定的jdbcType来保证所需的行为

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Mybatis中resultMap的使用总结

    Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中. resultMap包含的元素: <!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性--> <resultMap id="唯一的标识" type="映射的pojo对象&

  • mybatis的mapper.xml中resultMap标签的使用详解

    1.前言 最近博主在做一个ssm框架的共享汽车管理系统,其中,数据库字段设计的有下划线方式,a_username,然后在写mapper.xml里面的sql语句的时候,一直出现查询语句查询的值为null的情况.或者是resultMap标签和驼峰规则不太明白的同学,可以看这里. 于是顺便梳理一下. 2.关于resultMap 2.1.什么是resultMap? 在mybatis中有一个resultMap标签,它是为了映射select查询出来结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进

  • Mybatis中强大的resultMap功能介绍

    前言 在Mybatis中,有一个强大的功能元素resultMap.当我们希望将JDBC ResultSets中的数据,转化为合理的Java对象时,你就能感受到它的非凡之处.正如其官方所述的那样: resultMap元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作.实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长

  • Mybatis中ResultMap解决属性名和数据库字段名不一致问题

    目录 前言 1. 字段名不一致 解决方法: 第一种方式: 起别名 第二种方式: 结果集映射 resultMap 2. 多对一处理 3. 一对多处理 小结 前言 我们Pojo类的属性名和数据库中的字段名不一致的现象时有发生,简单的情况我们可以开启驼峰命名法解决大小写问题,但是遇到其它非大小写问题,我们就不得不使用Mybatis中的结果集映射resultMap. 1. 字段名不一致 数据库中的字段 我们项目中实体类的字段 public class User { private int id; pri

  • Mybatis中resultMap的Colum和property属性详解

    目录 resultMap的Colum和property属性 1: resultMap标签 2:使用情况 2.1 简单查询 2.2 一对一 2.3 一对多 resultMap对column和property的理解 select元素有很多属性(这里说用的比较多的) 什么时候我们知道使用resultMap,什么时候又使用resultType呢? 最后说下 resultMap的Colum和property属性 1: resultMap标签 当我们的数据库字段与实体类的属性不一致时,就需要使用该标签进行一

  • 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时

  • JavaScript对象的property属性详解

    JavaScript中对象的property有三个属性:1.writable.该property是否可写.2.enumerable.当使用for/in语句时,该property是否会被枚举.3.configurable.该property的属性是否可以修改,property是否可以删除. 在ECMAScript 3标准中,上面三个属性的值均为true且不可改:新建对象的property是可写的.可被枚举的.可删除的:而在ECMAScript 5标准中,可通过property的描述对象(prope

  • java开发MyBatis中常用plus实体类注解符详解

    目录 mybatis-plus常用注解符 1. 表名注解(@TableName) 2. 主键注解(@TableId) 3. 属性注解(@TableField) mybatis-plus常用注解符 1. 表名注解(@TableName) 作用:实体类和数据库中表建立对应关系:如 @TableName("thotset") public class HotsetEntity implements Serializable { private static final long serial

  • mybatis中几种typeHandler的定义使用详解

    1.存储到数据库, 将LONG数组转换成字符串;从数据库获取数据, 将字符串转为LONG数组 package com.winturn.utils.handler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.ibatis.type.BaseTypeHan

  • Mybatis中输入输出映射与动态Sql图文详解

    一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传入的POJO包装类型,即可以直接传入实体类,但是当多表查询的时候,就需要自定义POJO类型 ②我们使用自定义POJO类型来具体的了解一下 先设计 包装类型如下,其中UserPOJO是除了User本身之外的添加的其他跟User相关的属性的包装类,UserVo是用于视图层面的包装类型,同样也是作为Map

  • 如何在Django中添加没有微秒的 DateTimeField 属性详解

    前言 今天在项目中遇到一个Django的大坑,一个很简单的分页问题,造成了数据重复.最后排查发现是DateTimeField 属性引起的. 下面描述下问题,下面是我需要用到的一个 Task Model 基本定义: class Task(models.Model): # ...... 省略了其他字段 title = models.CharField(max_length=256, verbose_name=u'标题') created_at = models.DateTimeField(auto_

  • Asp中err和error对象的属性详解及用法示例

    一.ERR对象 err对象使用的时候不需要创建实例,就是说你要用的时候随便拿来使用,就像session一样. 不需要像ADODB对象使用的时候Set conn=Server.CreateObject("ADODB.Connection")来创建实例,它返回一个错误代码. 但是Err!=Err.Number,可以用Clear方法清除,以利于下次使用.它主要的是个Description方法,返回的是简要错误说明,这里一个很经典的例子: 程序代码: 复制代码 代码如下: < %@ LA

随机推荐