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();   }  } }
相關文章
相關標籤/搜索