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();   }  } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM