1. 程式人生 > >Mybatis中輸出對映-resultType與resultMap的區別

Mybatis中輸出對映-resultType與resultMap的區別

Mybatis中輸出對映resultType與resultMap的區別


一、resultType

使用resultType進行輸出對映,只有查詢出來的列名和pojo(實體bean)中的屬性名一致,該列才可以對映成功。

如果查詢出來的列名和pojo中的屬性名全部不一致,沒有建立pojo物件。
只要查詢出來的列名和pojo中的屬性有一個一致,就會建立pojo物件。

1、輸出簡單型別

1).需求

使用者資訊的綜合查詢列表總數,通過查詢總數和上邊使用者綜合查詢列表才可以實現分頁。

2).mapper.xml

  1. <mappernamespace="cn.edu.hpu.mybatis.mapper.UserMapper"
    >
  2.     <!-- 使用者資訊綜合查詢   
  3.     #{UserCustom.sex}取出包裝物件中性別值  
  4.     ${UserCustom.username}取得pojo包裝物件中使用者名稱稱  
  5.     -->
  6.     <selectid="findUserList"parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo"
  7.                                 resultType="cn.edu.hpu.mybatis.PO.UserCustom">
  8.         select * from user 
  9. where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'  
  10.     </select>
  11.     <!-- 使用者資訊綜合查詢總數 -->
  12.     <selectid="findUserCount"parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo"resultType="int">
  13.         select count(*) from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'  
  14.     </select>
  15.     ......  
  16. </mapper>

3).mapper.java

  1. //使用者管理的Dao介面
  2. publicinterface UserMapper {  
  3.     //使用者資訊綜合查詢
  4.     public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;  
  5.     //使用者資訊綜合查詢總數
  6.     publicint findUserCount(UserQueryVo userQueryVo) throws Exception;  
  7.     ......  
  8. }  

4).測試程式碼

  1. //使用者資訊綜合查詢總數
  2.     @Test
  3.     publicvoid testFindUserCount() throws Exception{  
  4.         SqlSession sqlSession=sqlSessionFactory.openSession();  
  5.         //建立UserMapper代理物件
  6.         UserMapper userMapper=sqlSession.getMapper(UserMapper.class);  
  7.         //建立包裝物件,設定查詢條件
  8.         UserQueryVo userQueryVo=new UserQueryVo();  
  9.         UserCustom userCustom=new UserCustom();  
  10.         userCustom.setSex("男");  
  11.         userCustom.setUsername("張三");  
  12.         userQueryVo.setUserCustom(userCustom);  
  13.         //呼叫userMapper的方法
  14.         int count=userMapper.findUserCount(userQueryVo);  
  15.         System.out.println("總數為:"+count);  
  16.     }  

測試結果:總數為:2

輸出日誌:
  1. DEBUG [main] - Opening JDBC Connection  
  2. DEBUG [main] - Created connection 7832149.  
  3. DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]  
  4. DEBUG [main] - ==>  Preparing: select count(*) from user where user.sex=? and user.username like '%張三%'   
  5. DEBUG [main] - ==> Parameters: 男(String)  
  6. DEBUG [main] - <==      Total: 1  

5).小結

查詢出來的結果集只有一行且一列,可以使用簡單型別進行輸出對映。(輸出簡單型別的要求)

2、輸出pojo物件和pojo列表


不管是輸出的pojo單個物件還是一個列表(list中包括pojo),在mapper.xml中resultType指定的型別是一樣的。
在mapper.java指定的方法返回值型別不一樣:
1).輸出單個pojo物件,方法返回值是單個物件型別
2).輸出pojo物件list,方法返回值是List<Pojo>

生成的動態代理物件中是根據mapper方法的返回值型別確定是呼叫selectOne(返回單個物件呼叫)還是selectList (返回集合物件呼叫 ).

3、輸出HashMap

輸出pojo物件可以改用HashMap輸出型別,將輸出的欄位名稱作為map的key,value為欄位值。如果是集合,那就是list裡面套了HashMap。

二、.resultMap

mybatis中使用resultMap完成高階輸出結果對映。


1、resultMap使用方法

如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個對映關係。

2、下面來進行實驗

1).實驗需求

將下邊的sql使用User完成對映
SELECT id id_,username username_ FROM USER WHERE id=#{value}

User類中屬性名和上邊查詢列名不一致。

resultMap使用方法:(以下屬性均定義在Mapper.xml對映檔案中)

2).定義resultMap

  1. <!-- 定義resultType  
  2. 將select id id_,username _username from user和User類中的屬性做一個對映關係  
  3. type:resultMap最終所對映的Java物件型別,可以使用別名  
  4. id:對resultMap的唯一標識   
  5. -->
  6. <resultMaptype="user"id="userResultMap">
  7.     <!-- id表示查詢結果集中唯一標識   
  8.     column:查詢出的列名  
  9.     property:type所指定的POJO中的屬性名  
  10.     最終reslutMap對column和property做一個對映關係(對應關係)  
  11.     -->
  12.     <idcolumn="_id"property="id"/>
  13.     <!-- 對普通列的對映定義 -->
  14.     <resultcolumn="_username"property="username"/>
  15. </resultMap>

3).使用resultMap作為statement的輸出對映型別

  1. <!-- 使用resultMap進行輸出對映   
  2.     resultMap:指定定義的resultMap的id,如果這個resultMap在其它的mapper檔案,前面需要加namespace  
  3.     -->
  4. <selectid="findUserByResultMap"parameterType="int"resultMap="userResultMap">
  5.     select id _id,username _username from user where id=#{value}  
  6. </select>

4).mapper介面類中新增相應方法

  1. //使用者管理的Dao介面
  2. publicinterface UserMapper {  
  3.     public User findUserByResultMap(int id) throws Exception;  
  4.     ......  
  5. }  

測試:
  1. @Test
  2. publicvoid testFindUserByResultMap() throws Exception{  
  3.     SqlSession sqlSession=sqlSessionFactory.openSession();  
  4.     //建立UserMapper代理物件
  5.     UserMapper userMapper=sqlSession.getMapper(UserMapper.class);  
  6.     //呼叫userMapper的方法
  7.     User user=userMapper.findUserByResultMap(1);  
  8.     System.out.println(user.getUsername());  
  9. }  

測試結果:張三

輸出日誌:

  1. EBUG [main] - Opening JDBC Connection  
  2. DEBUG [main] - Created connection 1465214.  
  3. DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]  
  4. DEBUG [main] - ==>  Preparing: select id _id,username _username from user where id=?   
  5. DEBUG [main] - ==> Parameters: 1(Integer)  
  6. DEBUG [main] - <==      Total: 1  

三、總結

使用resultType進行輸出對映,只有查詢出來的列名和pojo中的屬性名一致,該列才可以對映成功。

如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個對映關係。

相關推薦

Mybatis輸出對映-resultTyperesultMap區別

Mybatis中輸出對映resultType與resultMap的區別 一、resultType 使用resultType進行輸出對映,只有查詢出來的列名和pojo(實體bean)中的屬性名一致,該列才可以對映成功。 如果查詢出來的列名和pojo中的屬性名全部不

[轉]MyBatisresultTyperesultMap區別

作用 進一步 sel 存在 其中 對象 直接 model ati MyBatis中關於resultType和resultMap的具體區別如下: MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap。resultTy

MyBatisMapper對映檔案的輸入(parameterType)和輸出(resultType)對映

Mapper.xml對映檔案中定義了操作資料庫的sql,每個sql是一個statement,對映檔案是mybatis的核心。 輸入型別parameterType 1)傳遞簡單型別 傳遞簡單型別,前兩節課都見過,這裡只給出案例: 2)傳遞pojo物件 MyBat

一文理清MybatisresultTyperesultMap之間的關係和使用場景

1.概要 Mybatis ORM半自動對映框架對java開發工程師來說應該是必會的框架之一。它的好處這裡不是我們討論的重點。令很

Mybatis的mapper.xml裡面${} 和 #{}區別用法

Mybatis 的Mapper.xml語句中parameterType向SQL語句傳參有兩種方式:#{}和${} #{}方式能夠很大程度防止sql注入。 $方式無法防止Sql注入。 $方式一般用於傳入資料庫物件,例如傳入表名. 一般能用#的就別用$. #{}表示一個佔

Mybatis in 語法 的# $區別

今天寫map時,(虛擬碼):update xxx t set t.a='1' where id in (#{ids});  當ids傳入為string 1,2,3 時,得出效果只是更新了id=1的資料,原來#{xxx}是一個字串,mybatis只會當他是一個值,如果你想達到字

Mybatis$和#取數據的區別

bat con 分別是 style key strong 取出 bsp 因此 Mybatis配置中,取出map入參的數據一般有兩種方式#{key}和${key},下面是這兩種取值的區別:   以同樣的語句做對比: <select id="geUserByParam1

Mybatis的自動對映autoMappingBehaviormapUnderscoreToCamelCase

autoMappingBehavior 在Mybatis的配置檔案中新增settings屬性的autoMappingBehavior <settings> <setting name="autoMappingBehavior" value="NONE"/> </set

Mybatiscollection和association的使用區別

ring striped ram ati column font -a str result 1. 關聯-association2. 集合-collection 比如同時有User.java和Card.java兩個類 User.java如下: public class Us

Java String類的equals函式==的區別

String型別中的equals函式格式為 String A.equals(String B) 返回值為true或false。 如圖 當st1賦值為“123”時,“123”作為首次出現的值會被放在一個記憶體空間(地址為ad1)中。 當st1與st2用’==來進

mybatis的factory工廠Sqlsession

道路 lse 局部變量 bat 運行 重復 數據庫操作方法 pen 操作方法 1.SqlSession的使用範圍   SqlSession中封裝了對數據庫的操作,如:查詢、插入、更新、刪除等。通過SqlSessionFactory創建SqlSession,而SqlSessi

輸出對映resultType

√1:簡單型別 √2:簡單型別列表 √3:POJO型別只有列名或列名的別名與POJO的屬性名一致,該列才可以對映成功只要列名或列名的別名與POJO的屬性名有一個一致,就會建立POJO物件如果列名或列名的別名與POJO的屬性名全部不一致,不會建立POJO物件 √4:POJO型別列表 √5:HashMap

Mybatis總結一:resultTyperesultMap

一 resultType 如果返回的只是物件,而不是物件的list <sql id = "Base_Column"> p.id, p.name, p.age, p.gender , </sql> <select i

mybatis中報錯:resultType還是resultMap

mybatis中報錯: 6-Jan-2018 12:08:04.280 SEVERE [http-nio-8080-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service(

MyBatis對映檔案標籤屬性 parameterType

mybatis可以傳入的引數型別1.基本資料型別       可以通過#{引數名}直接獲取。每次只能傳入一個值<select id="selectTeacher" parameterType="int" resultType="com.myapp.domain.Te

Hibernate配置檔案資料型別datetimestamp區別

例如: <property name="createDate" type="timestamp" column="createDate"/> <property name="createDate" type="date" column="createDat

MyBatisSQL對映的XML檔案

Mappers 既然MyBatis的行為已經由上篇介紹的MyBatis配置檔案的元素配置完了,我們現在就要定義SQL對映語句了。但是,首先我們需要告訴MyBatis到哪裡去找到這些配置。Java在這方

java單例模式餓漢式懶漢式區別

餓漢式: 設計思想:構造方法私有,這樣就保證了在外部是無法例項化物件的;然後先在內部定義一個靜態常量物件,再寫一個static方法來返回這個物件,這樣就保證是一個物件了。 【程式碼實現】 public class HungryManSingleton { /**

Spring MVCWebMvcConfigurerAdapter、WebMvcConfigurationSupportWebMvcConfigurer區別

最近參考書籍《Spring Boot實戰——Java EE開發的顛覆者》使用Spring Boot(2.0)搭建Spring MVC(5.0)專案進行配置時候,發現WebMvcConfigurerAdapter已過時檢視原始碼發現WebMvcConfigurerAdapter

hibernate的list集合對映set區別

ref:http://blog.csdn.net/longyuan20102011/article/details/7722693 主要區別 set沒有順序,也不允許重複。可以級聯儲存 list可以允許重複,有次序。但沒有級聯一說,所以必須每個物件各自儲存各自的 depa