MyBatis(七)------MyBatis映射器(resultMap元素)

目录

1、resultMap元素

1.1 resultMap元素的构成

1.2 使用map存储结果集

1.3 使用POJO存储结果集


1、resultMap元素

resultMap的作用:定义映射规则、级联的更新、定制类型转化器等。resultMap定义的主要是一个结果集的映射关系,也就是SQL到Java Bean的映射关系定义,它也支持级联等特性。只是MyBatis现有的版本只支持resultMap查询,不支持更新或者保存,更不必说级联的更新、删除和修改了。

1.1 resultMap元素的构成

resultMap元素的子元素:

<resultMap>
    <constructor>
        <idArg/>
        <arg/>
    </constructor>
    <id/>
    <result/>
    <association/>
    <collection/>
    <discriminator>
        <case/>
    </discriminator>
</resultMap>
  • constructor:用于配置构造方法。一个POJO可能不存在无参数的构造方法,可以使用constructor进行配置

一个栗子:角色类SysRole不存在没有参数的构造方法,那么需要配置结果集,这样MyBatis就会使用对应的构造方法来构造POJO了:

<resultMap ...>
    <constructor>
        <idArg column="id" javaType="int"/>
        <arg column="roleName" javaType="String"/>
    </constructor>
    ...
</resultMap>
  • id:表示哪个列时主键,允许多主键,多个主键称为联合主键
  • result是配置POJO到SQL列名的映射关系
  • result元素和idArg元素的属性如下:
元素描述备注
property映射到列结果的字段或者属性。如果POJO的属性匹配的是存在的且与给定SQL列名(column元素)相同,那么MyBatis就会映射到POJO上使用导航式的字段,比如访问一个学生证student对象需要访问学生selfcard的发证日期issueDate,那么可以写成selfcard.issueDate
column对应的是SQL的列——
javaType配置Java的类型可以是特定的类完全限定名或者MyBatis上写文别名
jdbcType配置数据库类型这是一个JDBC的类型,MyBatis已经做了限定,支持大部分常用的数据库类型
typeHandler类型处理器

允许用特定的处理器来覆盖MyBatis默认的处理器。这就要指

定jdbcType和JavaType相互转化的规则

 

 

 

 

 

 

 

 

 

1.2 使用map存储结果集

一般而言,任何select语句都可以使用map存储。如下:

<select id="getRoleByNote" parameterType="String" resultType="sysRole">
    select id, color, note
    from sys_role
    where note like concat('%', #{note}, '%')
</select>

使用map原则上是可以匹配所有结果集的,但是使用map接口就意味着可读性的下降,因为使用map时需要进一步了解map键值得构成和数据类型,所以这不是一种推荐的方式,更多的时候推荐使用POJO分布式。

1.3 使用POJO存储结果集

 使用POJO存储结果集,可以使用自定映射,如同resultType属性一样,但是有时候需要更为复杂的映射或者缓存,这个时候还可以使用select语句的resultMap属性配置映射集合,只是使用前需要配置类似的resultMap。

<resultMap id="roleResultMap" type="sysRole">
    <id property="id" column="id"/>
    <result property="roleName" column="role_name"/>
    <result property="note" column="note"/>
<resultMap/>

resultMap元素的属性id表示这个resultMap的标识,type标识需要映射的POJO,这里使用定义好的lei别名,也可使用自定义的类的全限定名。

在映射关系中,子元素id:表示resultMap的主键,而result表示其属性,id和result元素的属性property表示POJO类的属性名,而column表示SQL的字段名。把POJO的属性和SQL的列名做对应,就建立起了映射关系。

<select id="getRoleMap" paramterType="long" resultMap="roleResultMap">
    select id, role_name, note
    from sys_role
    where id=#{id}
</select>

可知,SQL语句的列名和roleResultMap的column是一一对应的,使用XML配置的结果集,不能和resultType同时配置使用。

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis-Plus 是一个 MyBatis 的增强工具,它提供了一系列增强功能来简化 MyBatis 的使用。其中之一就是提供了一个比 MyBatis 更加方便的结果映射方式,就是通过 `ResultMap`。 `ResultMap` 是 MyBatis 提供的结果映射器,它可以将数据库查询返回的结果映射Java 对象。MyBatis-Plus 的 `ResultMap` 功能就是在 MyBatis 的 `ResultMap` 基础上进行的增强。 在 MyBatis-Plus 中,我们可以通过 `@TableName` 注解来指定实体类和数据库表的映射关系,然后使用 `@TableField` 注解来指定实体类中的属性和数据库表中的字段的映射关系。 使用 MyBatis-Plus 的 `ResultMap` 功能时,我们只需要在实体类中定义一个 `ResultMap`,然后在查询语句中使用该 `ResultMap` 即可将查询结果映射Java 对象。 以下是一个使用 MyBatis-Plus `ResultMap` 的示例: ```java @TableName("user") public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; @TableField("username") private String username; @TableField("password") private String password; // getter 和 setter 省略 } // 定义 ResultMap private static final ResultMap USER_RESULT_MAP = new ResultMap.Builder(configuration, "userResultMap", User.class, new ArrayList<ResultMapping>()) .id(new ResultMapping.Builder(configuration, "id", "id", Long.class).build()) .result(new ResultMapping.Builder(configuration, "username", "username", String.class).build()) .result(new ResultMapping.Builder(configuration, "password", "password", String.class).build()) .build(); // 使用 ResultMap 查询 List<User> userList = sqlSession.selectList("com.example.mapper.UserMapper.selectUserList", null, new RowBounds(0, 10), USER_RESULT_MAP); ``` 在上面的示例中,我们首先使用 `@TableName` 和 `@TableField` 注解指定了实体类和数据库表之间的映射关系。然后我们定义了一个 `ResultMap`,并在其中指定了实体类中的属性和数据库表中的字段的映射关系。最后我们在查询语句中使用该 `ResultMap` 将查询结果映射Java 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒家肉山大魔王

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值