1. 程式人生 > >Mybatis java.lang.NullPointerException可能的解決辦法

Mybatis java.lang.NullPointerException可能的解決辦法

寫在前面

在Spring MVC框架結構中,總是會遇到各種各樣的異常,而Mybatis java.lang.NullPointerException應該算是最常遇到的吧。下面介紹一下我在專案中面對這個異常的解決辦法。

Mybatis java.lang.NullPointerException

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NullPointerException
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: java.lang.NullPointerException
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:360)
at com.sun.proxy.$Proxy17.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:183)

步驟一:開通列印SQL語句

因為是通過MyBatis 連線資料庫,所以需要檢視SQL的執行語句

Spring+Mybatis在控制檯輸出SQL的最簡單方法:

在application.properties檔案中新增:

logging.leve.你的Mapper所在的包=debug (如果你的Mapper包在com.demo.mapper就填這個)

步驟二:檢查SQL裡的欄位

  • SQL裡的字型要與實體類的成員變數相對應,大小寫也要注意
  • 注意區分屬性ResutlMap和ResultType的使用,別混了。

步驟三:檢查資料庫的字元編碼

資料庫、表、欄位的字元編碼都應該統一,最好設定成utf8-general_ci

步驟四:檢查Mapper是否注入成功

@Autowire報錯導致的NullPointerException,雖然報錯,專案執行沒有問題。可是隻有緊挨著@Autowire的一個起作用,下面的都沒有注入成功。這時需要在每一個注入的Mapper中都加上@Autowire。

步驟五:List All elements are null導致NullPointerException

當List物件顯示 All elements are null時,雖然輸入為[null],但是list.size()=1。不管是list==null,list.isEmpty(),list.size()都無法判斷list是否為空。

可以在執行上面語句時,加上list.remove(null)