Mybatis中ResultMap的作用

这种情况主要用于解决实体类属性名与数据库表中字段名不一致的情况下,解决将查询结果映射成实体对象。

1、准备实体类

public class Emp2 {
    private Integer eid;
    private String ename;
    private Integer eage;
    }

2、修改映射文件–添加代码

<resultMap type="org.xsx.entity.Emp2" id="empMap">
    <result property="eid" column="id" jdbcType="INTEGER" javaType="int" />
    <result property="ename" column="name" jdbcType="VARCHAR" javaType="string" />
    <result property="eage" column="age" jdbcType="INTEGER" javaType="int" />
</resultMap>

<select id="findAll1" resultMap="empMap">
    select id,name,age from emp
</select>

column 从数据库中查询到的结果集的列名或列别名
property 将 column属性指定的列结果映射到对象的哪个属性

resultMap与resultType、parameterMap与 parameterType的区别
Map:映射;Type:Java类型
resultMap 与 resultType、parameterMap 与 parameterType的区别在面试的时候被问到的几率非常高

resultMap & resultType
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。

resultMap表示将查询结果集中的列一一映射到bean对象的各个属性。映射的查询结果集中的列标签可以根据需要灵活变化,并且,在映射关系中,还可以通过typeHandler设置实现查询结果值的类型转换,比如布尔型与0/1的类型转换。

例如:

<resultMaptype="hdu.terence.bean.Message"id="MessageResult"> 
    <!--存放Dao值--><!--type是和数据库对应的bean类名Message-->
    <idcolumn="id"jdbcType="INTEGER"property="id"/><!--主键标签-->    <resultcolumn="COMMAND"jdbcType="VARCHAR"property="command"/>
   <resultcolumn="DESCRIPTION"jdbcType="VARCHAR"property="description"/>

    <resultcolumn="CONTENT"jdbcType="VARCHAR"property="content"/>
</resultMap>
<selectid="queryMessageList" parameterType="hdu.terence.bean.Message"resultMap="MessageResult">
    SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1      

    <iftest="command!=null and !"".equals(command.trim())">

    andCOMMAND=#{command}
    </if>
    <iftest="description!=null and!"".equals(description.trim())">
    andDESCRIPTION like '%' #{description} '%'
    </if> 
  </select>

resultType 表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。

以下是resultType的写法,将其值设置成对应的java类上即可。不需要上述resultMap的映射关系。

">
    SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1      

    <iftest="command!=null and!"".equals(command.trim())">
    andCOMMAND=#{command}
    </if>

    <iftest="description!=null and!"".equals(description.trim())">
    andDESCRIPTION like '%' #{description} '%'
    </if> 
  </select>

ParameterMap(不推荐) & parameterType

ParameterMap和resultMap类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。

一般使用parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应,例如上述代码中下划线部分表示将查询结果类型自动对应到hdu.terence.bean.Message的Bean对象属性类型。

#{}和${}的使用

resultMap和ParameterMap书写拼写要使用#{},resultType 和parameterType类型使用${},使用例子如下:

Select ID,COMMAND from Message where COMMAND=#{command}

Select ID,COMMAND from Message where COMMAND=‘${command}’

前者解析为:
Select ID,COMMAND from Message where COMMAND=?具有预编译效果

后者解析为:
Select ID,COMMAND from Message where COMMAND=段子   不具有预编译效果

但是,例如当页面向后台传递一个列名(属性名)的时候,是不希望被预编译出一个?的,此时要用到$格式;

如:加上 order by${param} ,此时param是一个列名。

转自博客:https://blog.csdn.net/csdn_terence/article/details/60779889

### 回答1: MyBatisResultMap用于将查询结果映射到Java对象上,它定义了如何将数据库的列映射到Java对象的属性上。通过ResultMap,我们可以将查询结果映射到一个复杂的Java对象上,而不是简单的基本类型或简单的Java对象。ResultMap可以定义在Mapper XML文件,也可以通过注解的方式定义在Java类上。使用ResultMap可以使我们的代码更加简洁、易于维护,同时也可以提高代码的可读性和可维护性。 ### 回答2: Mybatis是一个流行的Java持久化框架,它的结果映射工具是其特色功能之一。结果映射是将SQL查询结果映射到Java对象上的过程,而ResultMap是定义SQL查询结果到Java对象之间映射关系的重要工具。 ResultMap定义了查询语句所查询的列与Java类的字段之间的映射关系。在Mybatis,将查询结果映射到Java对象,可以使用ResultMap来完成映射。ResultMap可以定义单个类或多个嵌套类的映射关系。每个ResultMap都有一个唯一的ID和一个或多个结果集映射。结果集映射包含列名和Java属性之间的映射以及自定义映射规则。 ResultMap有以下几个作用: 1.自定义映射规则。Mybatis的查询结果能够与Java对象之间的映射关系是一对一的关系,但是有时候查询结果的字段名称与Java对象的字段名称不一致,此时就需要使用ResultMap来自定义映射规则。例如可以通过 column属性来指定数据库的列名,通过 property属性指定Java对象的属性名。 2.重用SQL语句。Mybatis当SQL语句的查询结果需要映射到多个Java对象时,使用ResultMap可以重用相同的SQL语句和结果映射规则,从而避免冗余代码。 3.提高代码可维护性。Mybatis使用ResultMap可以在开发阶段检查和定义结果集映射,提高代码的可维护性和可读性。 4.提高性能。在查询复杂的关联数据时,使用ResultMap可以减少查询SQL语句的复杂度、节省查询时间,提高系统性能。 总之,MybatisResultMap是一个重要的工具,可以简化开发者的查询语句,并提高代码质量和性能,是编写高效且可扩展性强的应用程序的必备工具。 ### 回答3: Mybatis是一个流行的Java ORM框架,旨在简化数据访问层的开发。使用Mybatis,我们可以将数据库操作所需的SQL语句和参数映射到Java对象上。而ResultMapMybatis的一个重要特性,用于将查询结果映射到Java对象上。 ResultMap是一个由开发者定义的映射规则,用于将查询结果记录映射到Java对象上。在Mybatis的配置文件,可以使用ResultMap元素来指定ResultMap的映射规则,如定义Java属性和数据库表字段之间的映射关系。ResultMap可以用于单表映射或复杂的关联查询,具有相当的灵活性。 ResultMap作用主要有以下几个方面: 1.封装查询结果:使用ResultMap,我们可以将查询结果封装到我们想要的Java对象上,使得查询结果更易于操作和使用。同时,ResultMap也可以帮助我们避免手动构建Java对象。 2.解决属性名和列名不一致的问题:在数据库表设计时,属性名和列名可能不一致,这就需要在查询结果和Java对象之间进行映射。使用ResultMap,我们可以定义属性和列之间的对应关系,使得查询结果能够正确映射到Java对象上。 3.实现复杂查询:有时候,查询结果可能由多个表的数据复合而成,我们需要将它们映射到一个Java对象ResultMap支持复杂查询,可以定义多个ResultMap来映射不同的属性,从而实现复杂查询的操作。 4.提高性能:使用ResultMap可以将多条查询结果映射到一个对象上,减少了大量的数据库操作,从而提高了系统的性能。 总之,ResultMapMybatis一个非常重要的特性,使用它可以轻松完成Java对象和数据库查询结果的映射,大大简化了数据访问层的开发,提高了系统的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值