环境描述:

我在使用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. NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

    作者:来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略.首先介绍了 NLLB-200 的背景.数据.分词器和 ...

  2. 交叉编译SQLite3

    交叉编译SQLite3 SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的SQL 数据库引擎. 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置. ...

  3. tomcat启动时启动窗口出现乱码的解决方案

    工具/原料   一台安装了tomcat的电脑 方法/步骤     先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却 ...

  4. 探秘Transformer系列之(6)--- token

    探秘Transformer系列之(6)--- token 0x00 概述 语言是人类特有的概念.作为一个抽象符号,人是可以理解每个语言单词的意义的,但是现在的NLP语言模型无法直接的从感知中抽象出每个 ...

  5. 网线 - 568B接法

  6. linux服务问题传文件连不上问题远程问题等

    通过iptables相关命令实现防火墙的打开和关闭 1.首先可以在打开的终端使用iptables --help查看帮助使用命令: 2.查看防火墙状态:service iptables status(此 ...

  7. 【SfM】Colmap和openMVG尝试记录

    数据集来源:http://www.maths.lth.se/matematiklth/personal/calle/dataset/dataset.html Colmap与openMVG关于SfM稀疏 ...

  8. JMeter 性能优化

    Jmeter 性能优化:(3优化 + 1补充)   1.在 jmx 文件中 Disable 所有的结果输出,如: View Results Tree / Graph Results / Aggrega ...

  9. DBeaver连接mysql时,报错Public Key Retrieval is not allowed

    解决 在新建连接的时候,驱动属性里设置 allowPublicKeyRetrieval 的值为 true.

  10. golang gin框架使用swagger生成接口文档

    前言 一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率. 本文将介绍如何使用swagger生成接口文档. swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RE ...