mybatis—— 一個空格引發的血案


環境描述:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM