MyBatis查詢無記錄時(shí)的返回值問題
MyBatis查詢無記錄的返回值
在MyBatis 3.4.1下
如果Dao的返回值是實(shí)體,則select查詢無記錄時(shí)返回null。容易報(bào)空指針異常!
Notice findById();
如果Dao的返回值是List,則select查詢無記錄是返回的是[],也就是空數(shù)組,
而不是null。所以這時(shí)候判空需要用CollectionUtils.isNotEmpty(),而不是"==null"
List<Notice> findById();
查詢無結(jié)果時(shí)的返回值報(bào)錯(cuò)問題
mybatis的查詢無結(jié)果時(shí)報(bào)錯(cuò)
(方法名)queryAllNumFromCart attempted to return null from a method with a primitive return type (long)的問題
queryAllNumFromCart此方法在mapper.xml中是這樣定義的:
?<select id="queryAllNumFromCart" parameterType="java.lang.Integer" resultType="java.lang.Long">
? ?? ?select sum(num) from t_cart where user_id = #{userId}
? </select>在mapper中是這樣定義的:
long queryAllNumFromCart(Integer userId); ?//返回值為long類型
調(diào)用后運(yùn)行報(bào)錯(cuò):
java.lang.RuntimeException: org.apache.ibatis.binding.BindingException: Mapper method 'com.egoo.mapper.CartMapper.queryAllNumFromCart attempted to return null from a method with a primitive return type (long).
org.apache.ibatis.binding.BindingException: Mapper method 'com.egoo.mapper.CartMapper.queryAllNumFromCart attempted to return null from a method with a primitive return type (long).
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:94)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy16.queryAllNumFromCart(Unknown Source)
at com.egoo.service.impl.CartServiceImpl.getTotalFromMysql(CartServiceImpl.java:370)
at com.alibaba.dubbo.common.bytecode.Wrapper2.invokeMethod(Wrapper2.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:47)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:76)
at com.alibaba.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:52)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:62)
......
主要報(bào)錯(cuò)原因的語句為:
(method)attempted to return null from a method with a primitive return type (long)
此方法企圖從定義了原始的返回類型(long)的方法中返回null ,顯而易見,此處的返回值類型有問題。網(wǎng)上搜了之后發(fā)現(xiàn)是mybais的返回值為包裝類,且sql語句的定義的返回值類型為:java.lang.Long。查詢數(shù)據(jù)庫為空后,會(huì)返回null而不是0L,所以此處需要將方法的返回值類型改為包裝類java.lang.Long:
//Long queryAllNumFromCart(Integer userId); ?//當(dāng)查詢到的數(shù)據(jù)為0條時(shí),會(huì)返回null,而不是0,可以改為包裝類
或者在sql語句中加入IFNULL(expr1,expr2)的函數(shù)進(jìn)行判斷:
select IFNULL(sum(num),0) from t_cart where user_id = 1
建議還是使用修改sql語句的方式。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過Java連接SQL?Server數(shù)據(jù)庫的超詳細(xì)操作流程
java相對(duì)于其他語言(例如c,c++等)連接數(shù)據(jù)庫要方便得多,那么如何連接呢?下面這篇文章主要給大家介紹了關(guān)于通過Java連接SQL?Server數(shù)據(jù)庫的超詳細(xì)操作流程,需要的朋友可以參考下2023-03-03
劍指Offer之Java算法習(xí)題精講二叉樹專項(xiàng)訓(xùn)練
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03
java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException
Map在遍歷時(shí)候通常 現(xiàn)獲得其鍵值的集合Set,然后用迭代器Iterator來對(duì)Map進(jìn)行遍歷。2009-06-06
Java中關(guān)于isEmpty方法、null以及““的區(qū)別
這篇文章主要介紹了Java中關(guān)于isEmpty方法、null以及““的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Springboot基于maven打包分離lib及resource
這篇文章主要介紹了Springboot基于maven打包分離lib及resource,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

