文章目录
resultMap配置数据库和java对象的映射,之前都是自动映射:自动映射有个前提条件:
- 数据库的列名和java实体的属性名要一致或者符合驼峰命名(并且开启驼峰命名)
- 全局配置文件中开启自动映射,默认就是开的
<setting name="autoMappingBehavior" value="PARTIAL"/>
1 入门
- 数据表是这样的
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名',
`password` varchar(60) NOT NULL COMMENT '密码,加密存储',
`phone` varchar(11) DEFAULT NULL COMMENT '注册手机号',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='用户表';
- 但是实体类属性名没有和表中字段名一致
@Data
@ToString
public class TbUser2 implements Serializable {
private Long id;
// ussername -->name
private String name;
private String password;
// phone -->mobile
private String mobile;
private String createTime;
private String updateTime;
}
TbUser2 select1(@Param("id") Long id);
<!--
配置映射规则
id: 唯一标识
type: 对应的实体的全类名,当然也可以配置别名,我个人不喜欢配置,这样更清晰
-->
<resultMap id="userMap" type="study.wyy.mybatis.sqlmapper.model.TbUser2">
<!--
指定主键列的映射,底层会有优化
column: 列名
property:java实体的属性名
jdbcType:jdbc类型,可不指定
javaType:java 类型,也可以不指定
-->
<id column="id" property="id"></id>
<result column="username" property="name"></result>
<result column="phone" property="mobile"></result>
</resultMap>
<!--
resultMap 指定映射规则的唯一标识
-->
<select id="select1" resultMap="userMap">
select
*
from
tb_user
where
id = #{id}
</select>
测试v
@Test
public void test04() {
TbUser2 tbUser2 = tbUserMapper.select1(1L);
System.out.println(tbUser2);
}
成功映射:
TbUser2(id=1, name=kobe, password=123456, mobile=13100001111, createTime=2019-04-04 22:58:26.0, updateTime=2019-04-04 22:58:26.0)
虽然resultMap可以只配置存在差异的列和属性,但是建议如果要配置resultMap,那么就全部字段都配置上去,方便查看