mybatis resultmap

mybatis ResultMap结果集映射(简单的一对一)

1、文件目录以及数据库

因为之前的demo中数据库字段和实体类属性一致,不符合真实开发环境以及代码规范,所以不妨改变一下数据库的字段

alter table user change name user_name varchar(30) null;
alter table user change pwd user_password varchar(30) null;

目录结构:

image

2、如何使不同名的数据库字段和实体类属性建立映射关系

显然,不改动原先的代码,程序运行后是肯定查询不到name以及pwd的数据的。

image

因为字段名的不统一所以导致虽然查到了一条记录,但是实体类的 name 和 pwd 显然未被正确的赋值

解决方法:

1. 根据mysql的特性,我们可以在sql语句上直接更改,给查询到的结果起别名 (as)

<select id="selectUserById" resultType="entity.User">
        select id,user_name as name,user_password as pwd from user where id=#{id}
</select>

运行
image
诚然,这种改动的结果是显而易见的,不过对于大型工程来说,动辄对上百条sql语句进行修改显然是不是一个好方法。

2. 结果集映射

首先把指定了返回类型的resultType修改为resultMap,因为现在需要一个映射来解决返回类型的问题,而不是固定的实体类

<select id="selectUserById" resultMap="userResultMap">
        select * from user where id=#{id}
</select>

然后在加上一个声明映射关系的resultMap标签:

<resultMap id="userResultMap" type="user">
<!--    <id property="id" column="id"/>       -->
        <result property="name" column="user_name"/>
        <result property="pwd" column="user_password"/>
</resultMap>

注意:

  1. sql语句标签中的resultMap的值应该与resultMap中的id相同,这样mybatis才能根据声明的ResultMap找到一一对应的关系
  2. resultMap标签下的result代表着结果集的映射关系,property为实体类属性名column为对应的数据库字段名
  3. Mybatis会在未声明的情况下默认提供一个隐式的配置,所以如果字段名与属性名一致的情况下,不写也没关系

运行:
image

如果这个世界总是这么简单就好了。

好了,现在一个简单的结果集关系映射就搞定了,及时我们有再多的sql语句,我们也只需要编写一个映射关系,并且指定每条sql语句标签中的resultMap就可以了

3、总结

简单一对一关系映射就这么搞定了,关于复杂的一对多和多对多关系映射在后面的进度中会详细阐述

posted @ 2021-05-20 18:45  陈修行  阅读(165)  评论(0)    收藏  举报