mybatis—— 一個空格引發的血案
阿新 • • 發佈:2020-11-16
環境描述:
我在使用SSM做專案的時候需要一個需求:一個使用者有多個角色,一個角色有多個許可權,我需要根據使用者的id找到使用者的所有角色,及其對應的許可權。
資料庫是這個樣子,users_role表記錄了使用者和角色的關係,role_permission表記錄了角色和許可權的對應關係。
DAO層是這樣設計的
/** * 角色Dao */ public interface IRoleDao { /** * 根據使用者id查詢出所有對應的角色 * @param userId 使用者id * @return 使用者所有的角色資訊 * @throws Exception */ @Select("SELECT role.* FROM role,users_role WHERE role.id = users_role.roleId AND users_role.userId = #{userId}") @Results({ @Result(id = true, property = "id" , column = "id"), @Result(property = "permissions", column = "id" , many = @Many(select = "com.zjw.dao.IPermissionDao.findPermissionByRoleId ")) }) List<Role> findRoleByUserId(String userId) throws Exception; }
/** * 許可權Dao */ public interface IPermissionDao { /** * 根據角色id查詢所對應的許可權 * @param id 角色id * @return 角色id對應的許可權列表 * @throws Exception */ @Select("select permission.* from permission where id in (select permissionId from role_permission where roleId=#{id})") List<Permission> findPermissionByRoleId(String id) throws Exception; }
看起來一切ok。
但是在專案跑起來以後。。。。。
這不就尷尬了嗎???
報錯的大概的意思的它找不到需要執行的sql語句了。
但是執行sql的方法我寫了呀。。
世上最痛苦的事莫過於,我告訴了你她在哪,你給我說你是直男。 ——mybatis
案情分析
案情緊急,刻不容緩。
我懷疑
是我JavaBean寫錯了,與資料庫欄位不對應? 發現不是。
是我沒有重新clean專案,新的程式碼沒有打包上?試了也不行。
我@Result需要寫個JavaType?發現也不用啊。
是我測試類有影響?刪了也不行啊。
需要重啟IDEA?沒用。
我的sql語句有問題?在資料庫中查了一下,可以查詢啊。
出現轉機
我仔仔細細盯著幾行簡單的程式碼。。。。。
我。。。。。
突然。
發現。
這裡是不是多個空格???,影響執行嗎? 不管了,刪了空格再說。
clean,install,run,訪問。
報錯消失了。。。。我。。。下樓取快遞去。。。。。
總結:
不是我的錯,是mybatis的鍋,你是一個成熟的框架了,去空格這種事情還要我教你嗎?