這個錯誤比較重要,而且很常見,故單獨進行說明:
Mybatis出現:Unknown column 'xxx' in 'field list'
先來看一下程序的內部:
dao.addUser("ll111", "ll11");// 添加用戶l main函數測試
//添加用戶 成功1 失敗0 public int addUser(String userPhoneNumber, String userPassword) throws IOException { //用戶的 手機號,姓名(默認手機號),密碼 User user = new User(userPhoneNumber, userPhoneNumber, userPassword); int result = mapper.addUser(user); System.out.println(result); sqlSession.commit(); return result; }
<!-- 添加用戶--> <insert id="addUser" parameterType="main.pojo.User"> INSERT INTO user(user_phone_number, user_name, user_password) VALUES (${userPhoneNumber}, ${userName}, '${userPassword}'); </insert>
錯誤原因:本身來說,三個字段都屬於String類型,但是在使用Mybatis時由於用法的錯誤,致使出現上圖的結果,即本來手機號和名字想作為字符串插入,但是xml里卻當成了字段名。如果是整數還好,String可以解析整數並且轉化為字符串,但是像字母和數字混合,編譯器就無法識別。
本質上來說,是Mybatis使用上的錯誤,不熟悉,理解其實現機理所致。同樣的問題,也會出現在其他語句中,所以在實現時注意數據傳輸的類型!!!
解決方法:也如上圖xml代碼所示,password的變量使用單引號括住,即可表示為字符串,所以實際上,應該這樣寫:
<!-- 添加用戶--> <insert id="addUser" parameterType="main.pojo.User"> INSERT INTO user(user_phone_number, user_name, user_password) VALUES ('${userPhoneNumber}', '${userName}', '${userPassword}'); </insert>
或者進行參數化表示:
<insert id="addUser" parameterType="main.pojo.User"> INSERT INTO user(user_phone_number, user_name, user_password) VALUES (#{userPhoneNumber}, #{userName}, #{userPassword}); </insert>
這種情況下,VALUES內容為 VALUES(?,?,?) ,數據傳入時自動進行數據類型識別並填充,則沒有以上報錯。