环境描述:

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

mybatis—— 一个空格引发的血案的更多相关文章

  1. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  2. Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  3. 一个字母引发的血案 java.io.File中mkdir()和mkdirs()

    一个字母引发的血案 明天开始放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码: //省略部分代码... Long fileId= (Long) data.get( ...

  4. SQL实战——04. 查找所有已经分配部门的员工的last_name和first_name以及dept_no (一个逗号引发的血案)

    查找所有已经分配部门的员工的last_name和first_name以及dept_noCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_ ...

  5. 一个空格引发的bug

    好久没写博客了. 我们的一个项目用的thinkphp框架,当在debug模式下面运行很正常,但切换到生产模式时,刷新页面第一次可以正常显示,刷新第二次会出现错误如下: Fatal error: Cal ...

  6. Gson-记录一个空格引发的json血案

    使用的Gson将json自动装载到Bean,一般情况下,用起来又快又稳. 直到有一天,测试告诉我说,填写地址时,地址里有空格,就会500异常. 我把异常截取出来: Type Exception Rep ...

  7. 【原创】经验分享:一个Content-Length引发的血案(almost....)

    前言 上周在工作中遇到一个问题,挺有意思,这里记录一下.上周在工作中遇到一个问题,挺有意思,这里记录一下.标题起的很唬人,这个问题差点引发血案,花哥还是很严谨的一个人,后面备注了almost.... ...

  8. 一个链接引发的血案---------服务器 IO及网络流量暴涨解决历程

    在这里介绍一次因为更改网站地址而引发服务器IO读取速度,网络流入流出速度暴涨10倍的解决经历. 环境:Ubuntu + Nginx + php-cgi + Wordpress 事情是这样的,现在网站使 ...

  9. 一个NULL引发的血案

    go sql.stmt query 发生了一个NULL值,所以发现了error, 发现服务不停的初始化sql stmt, 导致连接数过多,服务就变得很慢. 首先,我在初始化的之前,要判断这个是否是NU ...

  10. String属于“假引用类型”,代码为证(一个String引发的血案...)

    一直以为String是引用类型,今天写了个浅拷贝的测试,发现String有基本类型的特征. class A{ public int a = 555; } class User implements C ...

随机推荐

  1. mac安装nodejs、npm包设置

    一.安装nodejs 1.下载自己系统的nodejs,我选择18.20版本 https://nodejs.cn/download/ 二.设置 1.设置镜像源: npm config set regis ...

  2. 初探ASP.NET Core 3.x (2) - ASP.NET Core与ASP.NET前世今生

    本文地址:https://www.cnblogs.com/oberon-zjt0806/p/12210662.html 注意 本节是历史课,且绝大多数内容来自于百科或者其他的什么资料来源,如果不感兴趣 ...

  3. V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库

    前言 今天大姚给大家分享一个基于 .NET MAUI 的开源免费.开箱即用的UI组件库:V-Control. V-Control项目介绍 V-Control 是一个适用于 .NET MAUI 的开源( ...

  4. startup_stm32f10x_xx.s 启动代码文件的选择

    网上查到的各个文件的解释是: startup_stm32f10x_cl.s 互联型的器件startup_stm32f10x_hd.s 大容量startup_stm32f10x_hd_vl.s 大容量s ...

  5. hbase - [03] 客户端常用命令(hbase shell)

    1.列出所有namespace list_namespace 2.创建namespace create_namespace 'ns_name' 3.修改namespace属性 alter_namesp ...

  6. Ansible - [02] 基础配置以及常用操作场景

    Ansible 基础配置 主配置文件:/etc/ansible/ansible.cfg ansible配置文件查找顺序 首先检测ANSIBLE_CONFIG变量定义的配置 其次检查当前目录下的./an ...

  7. /proc的相关知识

    /proc的相关知识 /proc 介绍 /proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可 ...

  8. 基于PHPstream扩展手动实现一个redis客户端

    描述 redis是一个经典的key-value缓存数据库,采用C/S架构.当我们安装成功以后,你就知道它有个服务端,启动后默认监听6379端口,然后提供一个客户端工具redis-cli. 我们可以使用 ...

  9. halcon 入门教程(五) 缺陷检测

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18785484 有兴趣可以多看其他的halcon教程 halcon 学习教程目录 本篇主要讲一些 ...

  10. ShardingSphere分组聚合,数据异常问题

    在使用ShardingSphere分组聚合时是,出现了数据汇总不正确问题.我这里只进行了分表,未进行分库.使用的是广播查询,因为是定时任务统计,无法使用到分片键.进行分组的字段是两个 1. SQL查询 ...