MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别相关的知识,希望对你有一定的参考价值。

MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用。

1、resultType

返回单个实例

<select id="selectUser" parameterType="int" resultType="User">

select * from user where id = #{id}

</select>
返回List集合

<select id="selectUserAll" resultType="User" > <!-- resultMap="userMap" -->
select * from user
</select>

2、resultMap

简单查询:

<resultMap type="User" id="userMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
</resultMap>
column:数据库中列名称,property:类中属性名称


resultMap:适合使用返回值是自定义实体类的情况

resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型

resultMap : 

映射实体类的数据类型

resultMap的唯一标识

column: 库表的字段名

property: 实体类里的属性名

配置映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:当前库表映射文件的命名空间,唯一的不能重复 -->
<mapper namespace="com.hao947.sql.mapper.PersonMapper">
  <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 -->
  <resultMap type="person" id="BaseResultMap">
    <!-- column:库表的字段名 property:实体类里的属性名 -->
    <id column="person_id" property="personId" />
    <result column="name" property="name" />
    <result column="gender" property="gender" />
    <result column="person_addr" property="personAddr" />
    <result column="birthday" property="birthday" />
  </resultMap>
  <!--id:当前sql的唯一标识
     parameterType:输入参数的数据类型 
     resultType:返回值的数据类型 
     #{}:用来接受参数的,如果是传递一个参数#{id}内容任意,如果是多个参数就有一定的规则,采用的是预编译的形式select 
    * from person p where p.id = ? ,安全性很高 -->

  <!-- sql语句返回值类型使用resultMap -->
  <select id="selectPersonById" parameterType="java.lang.Integer"
    resultMap="BaseResultMap">
    select * from person p where p.person_id = #{id}
  </select>
  <!-- resultMap:适合使用返回值是自定义实体类的情况 
  resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型 -->
  <select id="selectPersonCount" resultType="java.lang.Integer">
    select count(*) from
    person
  </select>

  <select id="selectPersonByIdWithMap" parameterType="java.lang.Integer"
    resultType="java.util.Map">
    select * from person p where p.person_id= #{id}
    </select>

</mapper>

实体类Person.Java

<pre name="code" class="java">package com.hao947.model;
import java.util.Date;
public class Person {
  private Integer personId;
  private String name;
  private Integer gender;
  private String personAddr;
  private Date birthday;
  @Override
  public String toString() {
    return "Person [personId=" + personId + ", name=" + name + ", gender="
        + gender + ", personAddr=" + personAddr + ", birthday="
        + birthday + "]";
  }
}

测试类

public class PersonTest {
  SqlSessionFactory sqlSessionFactory;
  @Before
  public void setUp() throws Exception {
    // 读取资源流
    InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
    // 初始化session工厂
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
  }

  

  @Test
  public void selectPersonById() {
    // 创建一个sqlsession
    SqlSession session = sqlSessionFactory.openSession();
    try {
      Person p = session.selectOne(
          "com.hao947.sql.mapper.PersonMapper.selectPersonById", 1);
      System.out.println(p);
    } finally {
      session.close();
    }
  }
  @Test
  public void selectPersonCount() {
    // 创建一个sqlsession
    SqlSession session = sqlSessionFactory.openSession();
    try {
      Integer p = session.selectOne(
          "com.hao947.sql.mapper.PersonMapper.selectPersonCount");
      System.out.println(p);
    } finally {
      session.close();
    }
  }
  @Test
  public void selectPersonByIdWithMap() {
    // 创建一个sqlsession
    SqlSession session = sqlSessionFactory.openSession();
    try {
      Map<String ,Object> map = session.selectOne(
          "com.hao947.sql.mapper.PersonMapper.selectPersonByIdWithMap",1);
      System.out.println(map);
    } finally {
      session.close();
    }
  }
}

以上是关于MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis学习总结_05_实现关联表查询

MyBatis学习总结_06_调用存储过程

mybatis学习笔记(13)-查询缓存之二级缓存

MyBatis学习总结_14_Mybatis使用技巧总结

MyBatis学习总结_07_Mybatis缓存

MyBatis学习总结——实现关联表查询(转载)