Mybatis返回單個實體或者返回集合List
Mybatis 的強大之處之一體現在對映語句上,讓我們可以使用簡單的配置,就可以實現對引數和返回結果的對映。
實體
package com.test.User
public class User{
private String userId;
private String userName;
private String userPassword;
private Date createTime;
...
setter getter....
}
DAO
public interface UserMapper{
User getUserById(String userId); //返回單個實體
List<User> getUserByName(String userName); //返回List
Map<String,Object> getUserInfoById(String userId);
List<Map<String,Object>> getUserInfoByName(String userName);
}
資料庫
create table user{
ID varchar(40),
USER_NAME varchar(200),
USER_PASSWORD varchar(100),
CREATE_TIME datetime,
....
}
1.返回某個實體
mybatis對映檔案
<select id="getUserById" parameterType="string" resultType="com.test.User">
select * from user where id = #{userId}
</select>
- id :identification:語句的標識,在同一個mapper對映檔案下id需要唯一
- parameterType: 引數型別,可以不寫。因為 MyBatis 可以推斷出傳入語句的具體引數
- resultType: 全限定類名或者是類型別名.
此時需要 資料庫表的列名或列別名 和 類的屬性名相同
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/> <!--開啟自動駝峰命名規則(camel case)對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映。-->
</settings>
此時,表列名的下劃線標記方式可以對映到駝峰標記的形式。
TooManyResultsException
當實際返回值有多個時則丟擲異常。
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
除非可以確定最多隻能查詢到一條結果,否則的話不建議這麼寫.可以嘗試返回集合的方式。
2.返回List
<select id="getUserInfoByName" resultType="map">
select * from user where user_name = #{userName}
</select>
返回List< T > 集合時,resultType設定為集合元素的型別即T。
從上面可以看到,返回單個實體與返回集合的sql 是一樣的,不一樣的地方在Mapper介面或者sqlSession中定義的返回結果型別。實際上mybatis執行查詢的時候也都是使用selectList()來進行查詢的。
- 使用Mapper的方式的查詢結果時,Mybatis會生成該介面的代理類(MapperProxy),然後根據Method的getReturnType()方法,拿到返回型別。最後也是呼叫sqlSession的一些方法。
- 使用SqlSession時,提供了selectOne() 或者selectList()來返回單個實體或者集合。
當返回的查詢結果數量和返回型別不一致時,則會丟擲TooManyResultsException
推薦使用返回集合的方式來查詢結果
//查詢單條結果
List<User> userList= mapper.getUserList(userName);
if(userList.isEmpty() || userList.size() >1)//期望獲得一條結果
//業務處理,一般是丟擲異常或者直接返回錯誤結果
//return xx;
//throw xxx
User user = userList.get(0);
3.返回Map
<select id="getUserInfoById" resultType="map">
select * from user where id=#{userId}
</select>
如果想要返回單個Map<key,value>集合,只需要設定resultType="map"就可以了,此時返回的例項型別是HashMap。Map的key就是資料表的列名或者列別名
如果需要返回LinkedHashMap,需要使用全限定類名resultType="java.util.LinkedHashMap"
。
4.返回List< Map >
<select id="" parameterType="" resultType="map">
sql_caluse
</select>
resultType設定為map,跟上面一樣resultType設定為List集合中元素的型別。
小結:
- 返回集合與返回單個實體物件在對映檔案的寫法是一致的,不同的地方在於Mapper的返回型別不同。
- 如果不確定返回值是否是唯一的,儘量使用 集合的返回方式。然乎使用get(0)的方式獲取實體。
- 如果返回實體,一般情況會使用
resultMap
來對映返回結果。這樣更清晰,直觀,而且還可以使用typeHandler
對資料做進一步處理
相關推薦
Mybatis返回單個實體或者返回集合List
Mybatis 的強大之處之一體現在對映語句上,讓我們可以使用簡單的配置,就可以實現對引數和返回結果的對映。 實體 package com.test.User public class User{ private String userId; private
mybatis查詢結果集,返回List的物件集合
mapper介面中寫的方法的返回值為List的物件陣列首先需要在mapper.xml中對映一個resultmap,column為類中的屬性也就是表中所對應的欄位。程式碼如下:<resultMap id="seeShare" type="com.example.demo.
關於引數傳遞接受@RequestBody 寫的位置不同決定返回list還是單個實體
//關於引數傳遞接受,有些引數不是required,可以不傳進來, //寫在外面的時候裡面的只能是單個實體 @RequestMapping(value = "/savemobile") @RequestBody public int saveMobile(@Req
使用MyBatis時接收值和返回值選擇Map型別或者實體型別
本文轉自:http://www.cnblogs.com/waliwaliwa/p/6924849.html今天換專案組了,給的專案,我看到mybatis框架寫的sql語句時,有點懵逼。。很久沒有用這種寫法了。就是接收引數和返回值都是用map而我之前所接觸的專案都是將引數和返回
Mybatis: 返回不同實體(物件陣列)
現在有這樣一個需求:我這裡有20個表名,然後隨便選一個,你給我到這個所選的表裡面把所有資料給我拿回來。之前的話我們都是有一個確定的表名,根據這個表建立一個實體類,當返回資料時,把resultTyoe設成這個實體類就可以了。但是
【java專案】mybatis中的mapper查詢時返回其他實體(多用於多表查詢)
<select id="selectUserorder" resultType="com.pojo.Orderdetail" parameterType="java.lang.Integer"> SELECT a.o_status, a.o_no, a.uid,
Mybatis中《insert》返回map、list及巢狀、association和collection分佈查詢及延遲載入(懶載入)(按需載入)
本文目錄類容目錄結構: 一、select返回值 1、返回值記錄封裝為List 2、返回值記錄封裝為map 二、select_resultMap 1、自定義結果對映規則 2、關聯查詢_級聯屬性封裝結果,即<result column="did" pro
jQuery AJAX方法 後臺返回一個實體類的list
java程式碼 自定義實體類ChartSeries public class ChartSeries { private String name; //曲線名稱 p
mybatis學習之查詢結果返回List以及Map
當要查詢的結果不是單個記錄而是一個集合的時候,mybatis的resultType寫的依然是集合中的物件的型別名稱,例如: <select id="getPersonByNameLike"resultType="mybatis_01.Pers
SpringMVC的介面,接收json資料返回json資料並且解析為List物件集合
請求引數實體類 package com.lifuyi.entity; /** * 請求引數**重點內容** */ public class RequestPram { //訂單號 private String orderNum;
mybatis呼叫oracle儲存過程返回遊標 讀取到java的List
mapper: <select id="testP" statementType="CALLABLE" > {call P_TEST(#{v_cursor, mode=OUT, jdbcType=CURSOR})} </select> ja
springboot下將返回的null值變為空字串或者空集合
最近在專案中遇到了後臺將返回資料中的null值全處理成了空字串,導致前端在使用集合型別的時候報錯,看了下當前程式碼處理的邏輯,是把所有的null值轉換成了空字串,對集合型別的資料沒有做特別處理。 隨後自己搭建了一個springboot專案來測試
sql存儲過程,根據多個條件查詢,返回一個dataTable或者DataSet
bold new exc cnblogs 所有 sql存儲過程 存儲 ring table 不廢話,先直接代碼 首先sql部分(我在這裏加了一個@zx作為判斷,一般不需要這個參數): ALTER Proc [dbo].[Proc_Boss_Show] @StrIndex
springmvc+spring+mybatis+sqlserver----查詢sqlserver----有返回參數
cal sql mod spring varchar type arc tty server <resultMap type="java.util.HashMap" id="resultMap"> <result column="U
mybatis添加記錄時返回主鍵id
測試數據 image creat ger org 設計 efault 需要 generated 參考:https://www.cnblogs.com/nuccch/p/7687281.html 場景 有些時候我們在添加記錄成功後希望能直接獲取到該記錄的主鍵id值,而不需要
MyBatis傳入集合 list 數組 map參數的寫法
obi ray syn div ppa oracl emp myba decimal foreach的主要用在構建in條件中,它可以在SQL語句中進行叠代一個集合。foreach元素的屬性主要有item,index,collection,open,separator,clo
mybatis插入數據後返回自增的主鍵id
pre tails isp entity CA ctc ron creat rod 在插入數據時候想自動返回mysql的自增的主鍵,需要在mapper.xml中配置下; <insert id="insert" parameterType="com.rograndec.
mybatis中使用selectKey,返回結果一直是1
batis type 這就是 字段 tis 屬性 筆記 getc tty mybatis中使用selectKey,返回結果一直是1,結合這個問題,筆記一下selectKey標簽以及問題的原因 先說需求,向數據庫插入一條記錄,表的id是自增的,插入以後返回插入記錄的id 下面
【java】【mybatis】在使用mybatis進行批量插入,批量更新等批量操作時,切割In集合List進行分批批量操作的java中的切割代碼
lse span ati 批量更新 次數 sublist 調用 size == 紅字部分代表mybatis的批量操作調用方法: int num = 0; int maxLength = 200; in
mybatis插入數據並返回主鍵(oracle)
數據庫 stat batis 還需 varchar 返回 序列值 long values 通常我們執行一個inser語句,即使有返回,也只是會返回影響了多少條數據 @insert("insert into t_user (id,name) values (suser.