MyBatis resultMap与restType、parameterMap与parameterType 区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangyong01245/article/details/90290432

官方解释:


官方文档位置Url : https://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

resultMap & resultType理解阐述

1、resultMap & resultType 两者都是处理sql查询的结果集,将结果集放入到Java Bean中
2、写法稍有不同,resultType 会自动对应Java Bean与sql查询结果并返回,resultMap 需要手动编写查询结果与实体之间的配置。
3、示例代码:
Mysql 建表语句:

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;

Java Bean 代码

public class User {
    private Integer id;
    private Integer age;
    private String name;
	....省略 Get、Set 方法.......
}

Dao 代码

public interface UserDao {
    User selectUserById(Integer id);
}

当方法selectUserById 查询出User对象时 resultType & resultMap 的写法如下如下

 <!-- resultType  写法--> 
 <select id="selectUserById"  parameterType="integer" resultType="com.lot.zy.entity.User">
     select * from tb_user where id  = #{id }
 </select>
 <!-- resultMap 写法-->
<resultMap id="userMap" type="com.lot.zy.entity.User">
       <id column="id" property="id" jdbcType="INTEGER" />
       <result column="age" property="age" jdbcType="INTEGER" />
       <result column="name" property="name" jdbcType="VARCHAR" />
 </resultMap>
 <select id="selectUserById" parameterType="integer" resultMap="userMap">
        select * from tb_user where id = #{id}
 </select>

4、resultType 和 resultMap 不同之处 :
  resultType 可以直接返回查询到的数据,适用于单表的操作,无需额外配置。
  resultMap 需要额外陪置查询结果column与property的关系,可以用于复杂sql的查询结果的处理
5、两者可以交互使用提升开发效率。

parameterType和parameterMap 理解阐述

1、官网已经提示 parameterMap 已经被废弃的属性,这里一笔带过,有兴趣的同学可以研究一下
2、 parameterType 传入指定参数的类型,可以基本数据类型的包装类:Integer,Long,String 等,也可以是集合类 List、Map 或者自定义实体类bean等 (自定义Bean 必须写全路径)
3、当方法参数为一个时 parameterType 可写也可以省略,参数为多个时,parameterType 不可用,可用Param注解解决,例子如下:
4、参数为 一个Integer 类型时:
Dao :

User selectUserByAge(Integer age);

Mapper文件 (parameterType可以省略):

<select id="selectUserByAge"  parameterType="Integer" resultType="com.lot.zy.entity.User">
        select * from tb_user where age = #{age}
 </select>

5、当参数为多个时 :
Dao:

User selectUserByNameAndUser(@Param("name") String name, @Param("user") User user);

Mapper :

<select id="selectUserByNameAndUser"  resultType="com.lot.zy.entity.User">
        select * from tb_user
        where name = #{name} and age = #{user.age}
    </select>

** 以上为博主的个人理解,如有异议请留言讨论

猜你喜欢

转载自blog.csdn.net/zhangyong01245/article/details/90290432