環境描述:
我在使用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的鍋,你是一個成熟的框架了,去空格這種事情還要我教你嗎?