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

    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    Spring 4 MVC+Apache Tiles 3 Example
    深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
    spring-boot-starter-parent 1.3.6.RELEASE
    Spring Boot with JSP and Tiles3
    更改linux的最大文件描述符限制
    Android SharedPreference最佳实践
    SQLite可视化管理工具
    android数据库sqlite可视化操作
    android网络通讯数据封装之 json
    PullToRrefresh自定义下拉刷新动画
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13987061.html
Copyright © 2011-2022 走看看