zoukankan      html  css  js  c++  java
  • 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的锅,你是一个成熟的框架了,去空格这种事情还要我教你吗?

    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    c++ 图解快速排序算法
    Shell脚本检测文件夹是否已被挂载的方法
    Linux使用mount挂载samba共享
    PHP使用字符串名称调用类的方法
    命令行查看端口号被进程占用
    Golang Clearing slice
    送给自己的程序员箴言
    Entity Framework6 with Visual Studio 2013 update3 for Oracle 11g
    深入浅出ASP.NET MVC5系列之一
    年终福利:调试.NET Framework源代码
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13987061.html
Copyright © 2011-2022 走看看