时间:2021-05-19
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。本文主要介绍的是mybatis连接查询遇到的一个坑以及解决方法,下面话不多说了,来一起看看详细的介绍吧
通过角色ID获取role_menu表中对应的菜单id,再通过菜单id获取菜单项的权限编码 , 使用mybatis连接查询,代码如下
// SysRoleMapper // 通过菜单id连接查询对应的权限编码 @Select("select menu_id from sys_role_menu where role_id = #{roleId}") @Results({ @Result(column = "menu_id",property = "permissionCode", one = @One(select = "com.project.system.mapper.SysMenuMapper.getPermissionCodeByMenuID")) }) List<String> getPermissionByUserRole(Integer roleId); //连接查询对象SysMenuMapper @Select("select permission_code from sys_menu where id = #{menuID}") String getPermissionCodeByMenuID(@Param("menuID") Integer menuID);预想查询出List,但返回的却是**List ,而且打印出的sql语句里,也没有执行getPermissionCodeByMenuID()**这个方法对应的sql语句。
在使用@Results进行连接查询的时候,应该使用实体类或Map对象来接受返回值。
由于自己水平有限,在调试源码的过程中,没有找到mybatis具体是如何处理连接查询的,
个人猜想是mybatis有一个地方可以判断返回的类型与sql语句的关系,如果不匹配直接不执行这条sql语句,画了太多时间,先mark下,后续再继续研究。
代码改为如下,问题解决;
@Select("select menu_id from sys_role_menu where role_id = #{roleId}") @Results({ @Result(column = "menu_id",property = "permissionCode", one = @One(select = "com.project.system.mapper.SysMenuMapper.getPermissionCodeByMenuID")) }) List<Map<String,String>> getPermissionByUserRole(Integer roleId);打印的sql语句:
在过程中,通过调试源码,看网上的一些资料,了解了一些mybatis框架和基本原理,这里做一个小的总结:
Mybatis 是在JDBC的基础上封装的,提供了方便强大的API,供用户对数据库操作;
MyBatis的主要成员
我们在XML或mapper文件中定义的sql语句等,会在初始化的时候加载到内存中,以Map对象的形式存储,后续需要使用的时候,根据key来获取
key = "com.project.mapper.SysRoleMapper.getRole" value = {MappedStatement@11731} .....参考:https://blog.csdn.net/luanlouis/article/details/40422941
到此这篇关于mybatis连接查询遇到的坑的文章就介绍到这了,更多相关mybatis连接查询的坑内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
用于记录接入微信JS-SDK的坑,以后方便查询第一次接入公众号微信支付、分享、定位等等的坑的时候,心里是迷茫而又恐惧。因为,听说坑特别多,后来发现自己的亲身体验
最近遇到的一些问题总结:1.MySQL数据库同一张表做四次左连接查询数据冗余。a.mysql数据库连接查询b.mysql表数据去重2.mybatis查询相同列赋
上篇博客讲到了cassandra的分页,相信大家会有所注意:下一次的查询依赖上一次的查询(上一次查询的最后一条记录的全部主键),不像mysql那样灵活,所以只能
记一次大坑:mybatis查询结果和接收的不一样,折腾我好几个小时.先上代码:代码是要查询排名,sql执行的结果SELECTb.operator_id,b.cl
mybatis-plus的selectById/selectOne查询结果偶尔出错(为null)的问题记录错误截图:亲测重复执行此段代码10次中大概会有连续的2