MyBatis resultMap与resultType、parameterMap与parameterType 区别

ゝ一纸荒年。 2022-01-29 23:25 362阅读 0赞

官方解释:

20190517114308131.jpg
官方文档位置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 建表语句:

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

Java Bean 代码

  1. public class User {
  2. private Integer id;
  3. private Integer age;
  4. private String name;
  5. ....省略 GetSet 方法.......
  6. }

Dao 代码

  1. public interface UserDao {
  2. User selectUserById(Integer id);
  3. }

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

  1. <!-- resultType 写法-->
  2. <select id="selectUserById" parameterType="integer" resultType="com.lot.zy.entity.User">
  3. select * from tb_user where id = #{id }
  4. </select>
  5. <!-- resultMap 写法-->
  6. <resultMap id="userMap" type="com.lot.zy.entity.User">
  7. <id column="id" property="id" jdbcType="INTEGER" />
  8. <result column="age" property="age" jdbcType="INTEGER" />
  9. <result column="name" property="name" jdbcType="VARCHAR" />
  10. </resultMap>
  11. <select id="selectUserById" parameterType="integer" resultMap="userMap">
  12. select * from tb_user where id = #{id}
  13. </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 :

  1. User selectUserByAge(Integer age);

Mapper文件 (parameterType可以省略):

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

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

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

Mapper :

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

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

发表评论

表情:
评论列表 (有 0 条评论,362人围观)

还没有评论,来说两句吧...

相关阅读