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;
目录结构:
2、如何使不同名的数据库字段和实体类属性建立映射关系
显然,不改动原先的代码,程序运行后是肯定查询不到name以及pwd的数据的。
因为字段名的不统一所以导致虽然查到了一条记录,但是实体类的 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>
运行
诚然,这种改动的结果是显而易见的,不过对于大型工程来说,动辄对上百条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>
注意:
- sql语句标签中的resultMap的值应该与resultMap中的id相同,这样mybatis才能根据声明的ResultMap找到一一对应的关系
- resultMap标签下的result代表着结果集的映射关系,property为实体类属性名column为对应的数据库字段名
- Mybatis会在未声明的情况下默认提供一个隐式的配置,所以如果字段名与属性名一致的情况下,不写也没关系
运行:
如果这个世界总是这么简单就好了。
好了,现在一个简单的结果集关系映射就搞定了,及时我们有再多的sql语句,我们也只需要编写一个映射关系,并且指定每条sql语句标签中的resultMap就可以了
3、总结
简单一对一关系映射就这么搞定了,关于复杂的一对多和多对多关系映射在后面的进度中会详细阐述