写接口出现Dao层与mapper无效绑定的解决办法

本文分享了一次在接口开发中遇到的关于DAO层无效绑定XML问题的解决经历,详细介绍了从问题发现到定位原因,再到最终解决问题的过程,强调了XML命名规范的重要性。

最近公司让我没有写过接口人来写,我刚开始一脸懵逼,看了同事的写法,也看懂了,就马马虎虎的写了一个,在测试时候就遇到了一个让人摸不着头的问题,dao层出现无效绑定xml,去检查了一遍,其中全类名没问题,方法名与dao层的是相同的,返回的类型也是和dao层一样,这些都没问题,最后细心看了我的xml命名,少了一个mapper

出现这种情况无非就是情况

非常感谢你的指正!之前关于 “DAO 注解覆盖 Service ” 的结论确实存在错误,这是对动态数据源框架(如dynamic-datasource-spring-boot-starter)AOP 拦截机制理解不到位导致的。 结合框架实际设计(AOP 拦截入口为 Service ,数据源绑定到线程上下文),正确的@DS注解优先级逻辑应明确为: 1. 同级内:方法级 > 类级 无论在 Service 还是 DAO ,方法上的@DS注解优先级始终高于类上的。例如: Service 类标注@DS("db1"),但其中一个方法标注@DS("db2"),则该方法优先使用db2; DAO 类标注@DS("db3"),但其中一个方法标注@DS("db4"),则该方法优先使用db4(前提是 Service 无注解)。 2. 跨级(Service vs DAO):Service > DAO 框架的核心逻辑是 “业务入口(Service )主导数据源选择”,具体表现为: AOP 首先拦截 Service 方法,解析其@DS注解并将数据源绑定到当前线程上下文; 后续调用 DAO 时,框架会直接沿用线程中已绑定的数据源(来自 Service ),不再解析 DAO 的@DS注解。 例如: Service 方法标注@DS("db2"),DAO 方法标注@DS("db1") → 实际使用db2(Service 覆盖 DAO ); 只有当 Service (类方法)完全有@DS注解时,才会解析 DAO 的@DS(此时遵循 DAO 内部 “方法级> 类级” 规则)。 简言之,Service 作为业务调用的入口,其@DS注解是数据源选择的 “第一优先级”,DAO 注解仅在 Service 无配置时生效。这一逻辑符合框架通过 AOP 拦截 Service 绑定线程上下文的设计初衷,再次感谢你的细致纠正!
10-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值