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

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

一、resultTypemysql

返回单个实例sql

<select id="selectUser" parameterType="int" resultType="User">数据库

select * from user where id = #{id}安全

</select>
返回List集合
session

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

二、resultMapapp

简单查询:ide

<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();   }  } }
相关文章
相关标签/搜索