spring 和 mybatis 结合的mapper问题

项目中mapper.java 和dao.java文件的内容是一样的,所以我做了整合,把mapper.java删掉掉了,用dao.java代替。同时把xml中的namespace指向了dao。

但是项目运行的时候出现了问题,发现程序执行过程不经过daoImpl。在service层直接进入了xml的sql代码中。
理了理逻辑,daoImpl上写了@Repository, service层中的dao变量上面也写了@AutoWrited ,发现spring的注入过程没有问题,于是单步调试,发现在service层中,spring 往dao变量注入的不是daoImpl,而是mybtis经过动态代理生成的对象

原因:

spring扫描xml中指定的namespace接口类,并自动为其生成实现的bean。
如:<mapper namespace="com.dataaccess.gag.dao.CommentDao"/>

spring 就根据xml,动态代理生成了名字为commentDao的bean。在service层中发现
@Autowired
private CommentDao commentDao;

的时候,就把动态代理生成的commentDao的bean注入了进去(尽管你在CommentDaoImpl上面写了@Repository),所以程序运行的时候就无法进入DaoImpl中的代码。

解决:

①dao跟mapper都要有,分开管理,xml中的namespace指向mapper,即使两个类中的内容是一样的。
②自定义bean名称
生成bean:
@Repository("what_you_want")
public class CommentDaoImpl

注入bean:
@Autowired
@Qualifier("what_you_want")
private CommentDao commentDao;

这样在service中往dao变量注入的就是daoImpl。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值