【mybatis笔记】 resultType与resultMap的区别

序言:

昨天做一个项目,看到很多刚开始用mybatis的同事对于resultType和resultMap的理解与使用含糊不清,这里我试图用最好理解的说法写一写,欢迎大家勘误。

两者异同:

相同点:resultType和resultMap都是映射结果集到Javabean用的

不同点:

  1. resultType属于自动映射到javabean,而resultMap是手动映射到Javabean的,其中简单的映射关系可以使用resultType,复杂映射关系的推荐使用resultMap。
  2. 使用resultMap需要先在mapper.xml中定义resultMap。而resultType则无需定义。

下面我举两个正例、两个反例:

需要映射的JavaBean:User

 1 package com.github.hellxz.entity;
 2 
 3 /**
 4  * @Author : Hellxz
 5  * @Description: 被映射的Javabean,常见的User
 6  * @Date : 2018/3/9 8:25
 7  */
 8 public class User {
 9 
10     private Long userId;
11     private String username;
12     private String password;
13 
14     public String getUsername() {
15         return username;
16     }
17 
18     public void setUsername(String username) {
19         this.username = username;
20     }
21 
22     public String getPassword() {
23         return password;
24     }
25 
26     public void setPassword(String password) {
27         this.password = password;
28     }
29 
30     public Long getUserId() {
31         return userId;
32     }
33 
34     public void setUserId(Long userId) {
35         this.userId = userId;
36     }
37 }

UserMapper接口定义:

 1 package com.github.hellxz.dao;
 2 
 3 /**
 4  * @Author : Hellxz
 5  * @Description: User的dao接口
 6  * @Date : 2018/3/9 8:44
 7  */
 8 public interface UserMapper {
 9     
10     User selectByUsername(String username);
11 }

正例:

【resultType正例】:resultType指向具体类型或别名 ✔

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.github.hellxz.dao.UserMapper" >
 4   <sql id="Base_Column_List" >
 5     user_id, user_name, password
 6   </sql>
 7   <select id="selectByUsername" resultType="com.github.hellxz.entity.User" parameterType="string" >
 8     select
 9     <include refid="Base_Column_List" />
10     from user
11     where user_name = #{username}
12   </select>
13   
14 </mapper>

【resultMap正例】:resultMap引用定义好的resultMap的id 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.github.hellxz.dao.UserMapper" >
 4   <resultMap id="BaseResultMap" type="com.github.hellxz.entity.User" >
 5     <id column="user_id" property="userId" jdbcType="BIGINT" />
 6     <result column="user_name" property="username" jdbcType="VARCHAR" />
 7     <result column="password" property="password" jdbcType="VARCHAR" />
 8   </resultMap>
 9   <sql id="Base_Column_List" >
10     user_id, user_name, password
11   </sql>
12   <select id="selectByUsername" resultMap="BaseResultMap" parameterType="string" >
13     select 
14     <include refid="Base_Column_List" />
15     from user
16     where user_name = #{username}
17   </select>
18 
19 </mapper>

反例:

【resultType反例】:使用resultType去引用定义的resultMap ✘

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.github.hellxz.dao.UserMapper" >
 4   <resultMap id="BaseResultMap" type="com.github.hellxz.entity.User" >
 5     <id column="user_id" property="userId" jdbcType="BIGINT" />
 6     <result column="user_name" property="username" jdbcType="VARCHAR" />
 7     <result column="password" property="password" jdbcType="VARCHAR" />
 8   </resultMap>
 9   <sql id="Base_Column_List" >
10     user_id, user_name, password
11   </sql>
12   <select id="selectByUsername" resultType="BaseResultMap" parameterType="string" >
13     select 
14     <include refid="Base_Column_List" />
15     from user
16     where user_name = #{username}
17   </select>
18 
19 </mapper>

【resultMap反例】:使用resultType去引用定义的resultMap或者引用没有定义的resultMap 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.github.hellxz.dao.UserMapper" >
 4   <sql id="Base_Column_List" >
 5     user_id, user_name, password
 6   </sql>
 7   <select id="selectByUsername" resultMap="com.github.hellxz.entity.User" parameterType="string" >
 8     select 
 9     <include refid="Base_Column_List" />
10     from user
11     where user_name = #{username}
12   </select>
13 
14 </mapper>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东北小狐狸-Hellxz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值