原文地址:https://blog.csdn.net/weixin_40326509/article/details/80865646
在使用springboot中,需要使用JPQL和SQL去查詢記錄。
獲取一整條記錄,返回的類型就是對應的實體類或者實體類的集合。
當不是全部字段時,返回類型就不能是實體類了。
以下是用JPQL和SQL獲取單個字段或多個字段的返回類型:
JPA查詢單個字段:
@Query(value="select age from User u where u.name=?1")
T find(String userName);
當只有一條記錄時,T可以是查詢字段對應的類型,這里是String;也可以是Object;同時也可以用List表示,這里是List<String>或者List<Object>。
Notes:如果T是Object[],但是在提取元素使用的時候,不能是
String age=(String)find(String userName),運行時報object類型不能轉換成XXX類型,可能需要instanceof 判斷一下吧。
直接打印 System.out.println(find(String userName)[0]),會是一個object對象,並不是age的值。
當有多條記錄時,T用List表示,這里是List<String>或者List<Object>。或者是List<Object[]>。
JPA查詢對個字段:
@Query(value="select age,sex from User u where u.name=?1")
T find(String userName);
無論返回的是單條記錄還是多條記錄,T 都只能是List<Object[]>。
Notes:返回多個字段並且是單條記錄的時候,T很自然的就會用Object[],這時候這個數組的長度永遠只會是1,並且還會有類型轉換問題,這是個坑。
總結:
單個字段單條記錄時,返回類型最好用對應字段的類型或者Object。
單個子彈多條記錄時,返回類型最好用List<Object>或者List<字段對應類型>。
多個字段時,不論是多條記錄還是單條記錄,返回類型都應該是List<Object[]>
---