前言
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。本文主要介绍的是mybatis连接查询遇到的一个坑以及解决方法,下面话不多说了,来一起看看详细的介绍吧

1、遇到的问题:
通过角色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语句。
2、先上结论:
在使用@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语句:
3、mybatis的基本原理:
在过程中,通过调试源码,看网上的一些资料,了解了一些mybatis框架和基本原理,这里做一个小的总结:
Mybatis 是在JDBC的基础上封装的,提供了方便强大的API,供用户对数据库操作;
MyBatis的主要成员
- Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
- SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
- Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
- StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
- ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
- ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
- TypeHandler 负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
- MappedStatement MappedStatement维护一条<select|update|delete|insert>节点的封装
- SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
- BoundSql 表示动态生成的SQL语句以及相应的参数信息
MappedStatement对象
我们在XML或mapper文件中定义的sql语句等,会在初始化的时候加载到内存中,以Map对象的形式存储,后续需要使用的时候,根据key来获取
key = "com.project.mapper.SysRoleMapper.getRole"
value = {MappedStatement@11731}
.....
参考:https://blog.csdn.net/luanlouis/article/details/40422941
总结
相关推荐:
ChatGPT无服务:如何突破限制,未来人工智能的新可能,ai绘制装饰画
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
WPJVX:开启数字化未来的智慧平台,关键词排名技术咨询乐云seo
用AI写科普文章:科技改变写作的未来
AI写作技巧,让创作事半功倍!
SEO很多,如何在竞争激烈的市场中脱颖而出?,在SEO优化中
在线AI文章生成:内容创作新革命
OpenAI注册问题解决方案:如何顺利通过手机号验证,反对ai头像
ChatGPT连了外网也登不了?如何解决这一问题,重新畅享AI助力!,ai少女大瓜
seo资源是什么意思,seo资源怎么打开 ,梅州ai自动插件加工
好用的人工智能AI软件推荐,让你的生活更智能!
SEO优化与SEM广告:提升品牌曝光与流量的双重利器,ai接回头
SEO观看:如何通过优化提升您的网站流量和品牌影响力,龙里网络营销推广
为什么做酒店seo,为什么做酒店 ,ai uehara下载
AI免费文章生成器:轻松创作高质量内容的终极工具
ChatGPT美区要梯子吗?轻松畅享全球智能聊天体验,ai音位
SEO包含的秘密:让你的网站轻松排上首页,新媒体营销推广方案目录
SEO要好,网站流量翻倍的关键秘诀,品牌网站建设关键词优化
AI免费工具:提升效率与创意的秘密武器
未来写作新方式原创AI文章的无限可能
中国AI软实力崛起:技术创新与产业应用的完美融合,seo0066
seo重点工作是什么,seo重点工作是什么意思 ,棋谱检查ai
SEO任何:如何通过精准优化让网站流量突破极限,太原网站建设培训班
seo站内关键词优化,seo关键词优化经验技巧 ,ai 优点
AI助手Stut:智能时代的创新引擎,开启未来工作新篇章,ai对ai的格斗游戏
ChatGPT当前不可用?背后的原因与解决方案全解析,ai propos
ChatGPT不能打开EL?揭秘这一困扰背后的真相与解决方案,ai被动房
seo要懂些什么软件,seo常用软件 ,ai写作网站网址大全
AI搜索写文章:一丝丝智慧背后的无限可能,电脑免费ai写作神器
GPT-3.5网页版:让你与人工智能零距离接触,ai英语学
为什么“搜狗不收录”会成为企业SEO的新挑战?,烤肉店的线下营销与推广
ChatGPT常见问题汇总:解答你关于AI的一切疑惑,松鼠ai智能教适应教育
SEO站在未来之巅,助力网站在激烈竞争中脱颖而出,推荐网站优化欢迎咨询
360AI写作怎样?助力创作的新风尚,ai到访
目前AI软件有哪些?智能新时代的必备工具
SEO表格:优化网站排名的秘密武器,大数据推广营销费用多少
SEO自行:提升网站流量的秘密武器,邹平县个人网站建设建议
ChatGPT打开后空白:如何解决这个困扰并高效使用AI助手,ai四声怎么写
seo线索收集是什么,seo线索收集是什么意思 ,ai生活ai童童
好用的AI智能工具,让生活与工作更高效!
好用的AI写作软件免费推荐:创作新境界!
ChatGPT手机下载后打不开?可能是这些问题导致的,解决方法在这里!,孤城ai动画
seo相当于什么职业,seo相当于什么职业类别 ,usatisfy ai
seo独立站是什么,独立站推广是什么 ,ai曲线笔刷扩展
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
ChatGPTApp怎么调大字体?提升阅读体验,让文字更清晰,推荐ai音频
如何查文章AI率?全面解析AI文章检测工具及技巧
SEO组织:让您的网站流量倍增的秘密武器,seo 绩效标准
AI批量文章工具,让写作变得高效与轻松,cs机器人ai