Mybatis中輸出對映-resultType與resultMap的區別
Mybatis中輸出對映resultType與resultMap的區別
一、resultType
使用resultType進行輸出對映,只有查詢出來的列名和pojo(實體bean)中的屬性名一致,該列才可以對映成功。
如果查詢出來的列名和pojo中的屬性名全部不一致,沒有建立pojo物件。只要查詢出來的列名和pojo中的屬性有一個一致,就會建立pojo物件。
1、輸出簡單型別
1).需求
使用者資訊的綜合查詢列表總數,通過查詢總數和上邊使用者綜合查詢列表才可以實現分頁。2).mapper.xml
-
<mappernamespace="cn.edu.hpu.mybatis.mapper.UserMapper"
- <!-- 使用者資訊綜合查詢
- #{UserCustom.sex}取出包裝物件中性別值
- ${UserCustom.username}取得pojo包裝物件中使用者名稱稱
- -->
- <selectid="findUserList"parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo"
- resultType="cn.edu.hpu.mybatis.PO.UserCustom">
-
select * from user
- where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
- </select>
- <!-- 使用者資訊綜合查詢總數 -->
- <selectid="findUserCount"parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo"resultType="int">
-
select count(*) from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
- </select>
- ......
- </mapper>
3).mapper.java
- //使用者管理的Dao介面
- publicinterface UserMapper {
- //使用者資訊綜合查詢
- public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
- //使用者資訊綜合查詢總數
- publicint findUserCount(UserQueryVo userQueryVo) throws Exception;
- ......
- }
4).測試程式碼
- //使用者資訊綜合查詢總數
- @Test
- publicvoid testFindUserCount() throws Exception{
- SqlSession sqlSession=sqlSessionFactory.openSession();
- //建立UserMapper代理物件
- UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
- //建立包裝物件,設定查詢條件
- UserQueryVo userQueryVo=new UserQueryVo();
- UserCustom userCustom=new UserCustom();
- userCustom.setSex("男");
- userCustom.setUsername("張三");
- userQueryVo.setUserCustom(userCustom);
- //呼叫userMapper的方法
- int count=userMapper.findUserCount(userQueryVo);
- System.out.println("總數為:"+count);
- }
測試結果:總數為:2
輸出日誌:
- DEBUG [main] - Opening JDBC Connection
- DEBUG [main] - Created connection 7832149.
- DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]
- DEBUG [main] - ==> Preparing: select count(*) from user where user.sex=? and user.username like '%張三%'
- DEBUG [main] - ==> Parameters: 男(String)
- 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
- <!-- 定義resultType
- 將select id id_,username _username from user和User類中的屬性做一個對映關係
- type:resultMap最終所對映的Java物件型別,可以使用別名
- id:對resultMap的唯一標識
- -->
- <resultMaptype="user"id="userResultMap">
- <!-- id表示查詢結果集中唯一標識
- column:查詢出的列名
- property:type所指定的POJO中的屬性名
- 最終reslutMap對column和property做一個對映關係(對應關係)
- -->
- <idcolumn="_id"property="id"/>
- <!-- 對普通列的對映定義 -->
- <resultcolumn="_username"property="username"/>
- </resultMap>
3).使用resultMap作為statement的輸出對映型別
- <!-- 使用resultMap進行輸出對映
- resultMap:指定定義的resultMap的id,如果這個resultMap在其它的mapper檔案,前面需要加namespace
- -->
- <selectid="findUserByResultMap"parameterType="int"resultMap="userResultMap">
- select id _id,username _username from user where id=#{value}
- </select>
4).mapper介面類中新增相應方法
- //使用者管理的Dao介面
- publicinterface UserMapper {
- public User findUserByResultMap(int id) throws Exception;
- ......
- }
測試:
- @Test
- publicvoid testFindUserByResultMap() throws Exception{
- SqlSession sqlSession=sqlSessionFactory.openSession();
- //建立UserMapper代理物件
- UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
- //呼叫userMapper的方法
- User user=userMapper.findUserByResultMap(1);
- System.out.println(user.getUsername());
- }
測試結果:張三
輸出日誌:
- EBUG [main] - Opening JDBC Connection
- DEBUG [main] - Created connection 1465214.
- DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]
- DEBUG [main] - ==> Preparing: select id _id,username _username from user where id=?
- DEBUG [main] - ==> Parameters: 1(Integer)
- DEBUG [main] - <== Total: 1
三、總結
使用resultType進行輸出對映,只有查詢出來的列名和pojo中的屬性名一致,該列才可以對映成功。
如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個對映關係。
相關推薦
Mybatis中輸出對映-resultType與resultMap的區別
Mybatis中輸出對映resultType與resultMap的區別 一、resultType 使用resultType進行輸出對映,只有查詢出來的列名和pojo(實體bean)中的屬性名一致,該列才可以對映成功。 如果查詢出來的列名和pojo中的屬性名全部不
[轉]MyBatis中resultType與resultMap區別
作用 進一步 sel 存在 其中 對象 直接 model ati MyBatis中關於resultType和resultMap的具體區別如下: MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap。resultTy
MyBatis中Mapper對映檔案的輸入(parameterType)和輸出(resultType)對映
Mapper.xml對映檔案中定義了操作資料庫的sql,每個sql是一個statement,對映檔案是mybatis的核心。 輸入型別parameterType 1)傳遞簡單型別 傳遞簡單型別,前兩節課都見過,這裡只給出案例: 2)傳遞pojo物件 MyBat
一文理清Mybatis中resultType與resultMap之間的關係和使用場景
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的自動對映autoMappingBehavior與mapUnderscoreToCamelCase
autoMappingBehavior 在Mybatis的配置檔案中新增settings屬性的autoMappingBehavior <settings> <setting name="autoMappingBehavior" value="NONE"/> </set
Mybatis中collection和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總結一:resultType ,resultMap
一 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配置檔案中資料型別date與timestamp區別
例如: <property name="createDate" type="timestamp" column="createDate"/> <property name="createDate" type="date" column="createDat
MyBatis中SQL對映的XML檔案
Mappers 既然MyBatis的行為已經由上篇介紹的MyBatis配置檔案的元素配置完了,我們現在就要定義SQL對映語句了。但是,首先我們需要告訴MyBatis到哪裡去找到這些配置。Java在這方
java單例模式中餓漢式與懶漢式區別
餓漢式: 設計思想:構造方法私有,這樣就保證了在外部是無法例項化物件的;然後先在內部定義一個靜態常量物件,再寫一個static方法來返回這個物件,這樣就保證是一個物件了。 【程式碼實現】 public class HungryManSingleton { /**
Spring MVC中WebMvcConfigurerAdapter、WebMvcConfigurationSupport與WebMvcConfigurer區別
最近參考書籍《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