1. 程式人生 > >mybatis中方法返回泛型與resultType不一致

mybatis中方法返回泛型與resultType不一致

當xxxMaaper.java的方法返回值型別是List<A>,而xxxMappper.xml中對應的sql的resultType指定為B物件,這樣是不會包錯的(即使A與B不存在關係)

原因分析:

1.集合物件原本就是儲存物件,可以是不同的物件List

2.直接處理List型別常常會出現型別轉換異常,jdk5出現泛型,使得程式設計師向list中存放相同型別物件

3.泛型作用於編譯階段,僅為了防止型別混亂而出現,型別轉換異常

4.mybatis結果集封裝bean時採用反射,是在執行時進行的,此時再看泛型容易進入誤區

例項:

public class A

}

public class B{

}

@Service()
public class AImpl implements AService {

private AMapper  aMapper ;

public List<B> increTrade(Map<String, Object> map) {

List<B> lst =aMapper.increTrade(map); //這裡debug看到list是A型別,此時泛型誤導人

return lst;
}

}


public interface AMapper {
List<B>increTrade(Map<String, Object> map);

}

AMapper 對應的xml檔案

<select id="increTrade" parameterType="java.util.Map" resultType="cn.easier.admin.model.A">

//-------------

</select>

相關推薦

mybatis方法返回resultType一致

當xxxMaaper.java的方法返回值型別是List<A>,而xxxMappper.xml中對應的sql的resultType指定為B物件,這樣是不會包錯的(即使A與B不存在關係)

java 方法 返回結果

package testDouble; import java.util.HashMap; public class Test { static HashMap<String, String> sMap = new HashMap<String, S

方法返回陣列

正常情況下,泛型陣列是無法初始化的,比方這樣T [] a=new T[5] ,就會報錯; 但是通過反射可以實現泛型陣列。程式碼如下: /** * Created by wangbin10 on 2019/1/2. * 在泛型方法中返回泛型陣列 */ public class Test {

如果數據庫的時間類mybatis的時間類對應關系

log return column div ali ble ron ctype ret 如果數據庫時間字段的類型是datetime 跟TIMESTAMP ,則mybatis中的jdbctype都是TIMESTAMP MySQL Type Name Return

c#的自定義類、方法接口

泛型方法 return bsp 其中 tel sts code 方式 void ? 泛型的產生其中一個原因就是為了解決原來集合類中元素的裝箱和拆箱問題: 一、泛型類: /// <summary> /// 返回前臺的消息 /// &

方法方法是內部調用、PInvoke 或是在 COM 導入類定義的。

imp services != keys inter 解決 ade dex virt 泛型基類中引用Api函數定義時static extern,在子類中會提示: 未處理TypeLoadException 泛型方法或泛型類中的方法是內部調用、PInvoke 或是在 COM 導

28---概述+擦除&補償+在集合的應用+類+方法+介面

一、泛型概述 1、泛型:對要操作的資料型別進行指定。是JDK1.5出現的安全機制。泛型是給編譯器使用的技術,用在編譯時期,提高了編譯的安全性(確保型別安全) 2、向集合中新增元素,public boolean add(E e); 任何型別都可以接收(新增的元素被提升為Object型別)。通常

在feign介面返回

在feign介面中返回泛型類時,由於java的泛型機制,在例項化之前無法得到具體的型別 ,因此,雖然服務提供方返回的是具體例項的資料,但是在客戶端decode時,無法轉化為具體的類。 例如 @RequestMapping("getGoodByCode")   <T extends BaseEn

Mybatis解決資料庫表字段實體類一致的解決方法

解決方法一:通過在查詢sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致,這樣就可以使表的欄位名和實體類的屬性名一一對應上了,這種方式時通過在sql語句中定義別名來解決欄位名和屬性名的對映關係的。 解決方法二:通過<resultMap>來對映欄位名和實體類屬性名一

“全棧2019”Java第五十八章:多方法返回型別可以是子類型別

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第五十八章:多型中方法返回型別可以是子類型別 下一章 “全棧2019”Java第五十九章:抽

Controller方法返回值其他類需要添加jackson依賴

nap nbsp cnblogs alt 軟件 org codehaus blog 分享圖片 第一個 第二個: 第三個 https://www.cnblogs.com/codejackanapes/p/5569013.html:json

Java 之路 (十五) -- 上(類、方法、有界型別引數、繼承、型別推斷)

Thinking in Java 中關於泛型的講解篇幅實在過長,前後嘗試閱讀這一章,但總是覺得找不到要點,很迷。於是放棄 Thinking in Java 泛型一章的閱讀,轉而官方教程,本章可以算作官方教程的中文版。 1.為什麼使用泛型 簡單來說

Java返回方法-例項

package com.frank.app; import java.io.UnsupportedEncodingException;import java.lang.reflect.Type;import java.net.URLEncoder;import java.util.LinkedList;imp

28---概述+擦除&補償+在集合的應用+類+方法+介面

一、泛型概述 1、泛型:對要操作的資料型別進行指定。是JDK1.5出現的安全機制。泛型是給編譯器使用的技術,用在編譯時期,提高了編譯的安全性(確保型別安全) 2、向集合中新增元素,public boolean add(E e); 任何型別都可以接收(新增的元素被提升為Ob

mybatis>mapper直接返回boolean資料以及相關注意事項

通常情況下,我們一般會在service中進行真與假的邏輯判斷,比如先取出一個物件,根據物件是否為空來判斷我們的真假邏輯,這部分可以移動到mapper中進行處理。 示例,我們做一個暱稱是否存在的驗證:     <select id="ifExist" parameter

C# 過載

C#中如泛型與過載有相同型別(型別等價),普通函式會優先呼叫,而且在決議過程中,泛型函式中的where條件未計入考慮。測試程式如下: class A { public override string ToString() {

C#C++的模板

今天一個同事問我C#中有沒有模板函式,他想寫一個函式能夠處理不同的型別,裡面演算法一樣,如果要過載實現的話,就造成大量重複的程式碼,而且擴充套件性不好。我說肯定有啊,你可以上網搜一下,結果他說沒搜到,而我對C#根本就不熟,我就和他說你先按照過載的方式先做著,我再查查。 晚上

MybatisMapper代理形式開發spring整合

can sna 修改 jar xid oca pac user cal 1.導入jar包 2.分包 cogfig:存放配置文件 mapper:存放映射與接口 pojo:存放實體類 test:測試代碼 3.編寫配置文件 SqlMapConfig.xml <?

再談怎樣以最簡單的方法為String類的集合或String類的數組轉化為逗號間隔字符串形式

集合 ret 類型 author sta rgs bsp lan ont 今天review代碼,看見某些大爺在將泛型為String類型的集合或String類型的數組轉化為逗號間隔字符串形式時仍然僅僅顧結果不註重過程,“大爺”咱能負點責任嗎?

Java集合筆記

第二章 情況 參數 編譯器 類型擦除 多個參數 一個 each ava 第一章 Java的泛型為了兼容性和防止代碼爆炸,在編譯成字節碼時會進行類型擦除,編譯器自動添加代碼做類型轉換(用到List<Integer>的地方用Integer來做轉換),自動做裝箱拆箱,