将以前项目中的一个功能接口拿到现在正在做的项目中,之前的项目用的是 SpringBoot+JDBCTemplete,现在做的项目用的是 Spring Boot+Mybatis,如果将这个功能代码从JDBCTemplete 改为Mybatis 会比较麻烦,然后就决定不改,就混合使用,果然出现了问题。

1、没有出现问题之前

如果在这个项目中的其中一个admin模块中,完整的写出MVC三层架构,虽然以前使用的是JDBCTemplate,但是我自己新写的controller+service+dao是可以正常运行的,这里我自己新写的是用的mybatis完成的dao层代码,与之前的JDBCTemplate不同,dao层并没有实现类,而是直接在dao层里面的方法上面使用@Select注解直接写sql语句,所以还需要在dao层的方法上面加上@Mapper和@Repository。

(这里提一句,如果单独使用@Repository,那也会产生找不到dao层的情况。)

而之前的项目使用的全都是JDBCTemplate实现持久层的功能,是需要写dao层的实现类的,而且由于@Mapper是mybatis的注解,所以在使用JDBCTemplate的时候是不能用的,这就解释了为什么之前项目里的所有的用SpringBoot+JDBCTemplete实现的dao层都没有@Mapper扫描但还是可以正常实现功能的原因。

2、出现问题之后

***************************
APPLICATION FAILED TO START
***************************
Description:
Field commentDao in com.sse.house.biz.service.CommentService required a bean of type 'com.sse.house.biz.dao.CommentDao' that could not be found.
Action:
Consider defining a bean of type 'com.sse.house.biz.dao.CommentDao' in your configuration.

在我将我在项目中新写的接口移入项目中的另一个模块schedule(这个是专门用来做定时任务的模块)之后,这个时候就只需要把相关实体类dao层代码还有service的实现类(impl)的业务代码放入一个定时任务(@Schedule)中,剩下的controller层和service层就可以删掉了,但是删掉以后,schedule模块就启动不了而且会报以上的错误,扫描不到dao层的xxxDao(或者是xxxMapper),最后在schedule模块中只剩下我一开始写的实体类、dao层、以及定时任务了,但是我一开始用的是mybatis写的dao层代码,并没有实现类,只有xxxdao,没有xxxdaoImpl,然后启动之后出现了xxxDao说could not be found的结果,注解什么的都没有少,也注入了,就是一直为could not be found找了好长时间的原因,是因为调用这个xxxDAO 的 xxxService 都有问题 ,这个 xxxService 就没有注入成功,造成 xxxDAO 为 找不到的状态 ,而且要是想将对象交给Spring工厂管理,你不能直接将这个对象 new 出来,否则运行时候可能会报空指针异常。

这个xxxService 为什么没有注入成功呢?就是因为我是将它 new 出来的,尽管上面有 @autowired 注解,没有用,然后我去掉了后面的 new ,发现还是不对,仔细一看,上面有个 static ,搜索了一下发现Static 静态变量 不能直接使用 @autowired 注解,然后我把 static 去掉之后才变正常。

3、冲突原因

此时,我满怀信心觉得应该没问题了,没想到还是不行,这次出现的问题是找不到 xxxDAO 中的方法,然后我觉得这个地方可能就是和 Mybatis 冲突的地方了,因为 Mybatis 中 DAO层的实现类是用 xml 文件实现的,而 TempleteJDBC 中是用 DAOImpl 类实现的,配置文件.yml 中指定了 xml 文件的路径,造成 TempleteJDBC 中的 xxxDAO 找不到它自己的实现类 xxxDAOImpl 。

4、解决方式

最后的解决方式是不要这个 xxxDAO 了,直接在 service 中注入JdbcTemplate ,将之前在xxxDAO 中的操作直接在 service 中实现,或者直接加一个dao层的实现类,在类中进行dao层的sql编写以及业务实现。

至此问题算是恍然大明白了。

jdbcTemplate和mybatis混合使用冲突的问题相关推荐

  1. TempleteJDBC和Mybatis混合使用注意事项

    今天,师傅让我将以前项目中的一个功能接口拿到现在正在做的项目中,之前的项目用的是 Spring+SpringMVC+TempleteJDBC,现在做的项目用的是 Spring Boot+Mybatis ...

  2. maven mysql的jdbctemplate_JDBC、JDBCTemplate、MyBatis、Hiberante 比较与分析

    JDBC (Java Data Base Connection,java数据库连接) JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Jav ...

  3. Spring 持久化笔记(JdbcTemplate、Mybatis、Redis)

    JdbcTemplate类 JdbcTemplate类是Spring框架数据抽象层的基础,其他更高层次的抽象类是构建于JdbcTemplate类之上的,JdbcTemplate类是Spring JDB ...

  4. SpringBoot (三) 整合数据库访问 jdbcTemplate、MyBatis

    哈喽,大家好,我是有勇气的牛排(全网同名)

  5. JDBC,JdbcTemplate,JPA傻傻分不清楚

    2019独角兽企业重金招聘Python工程师标准>>> JDBC.JDBCTemplate.MyBatis.Hiberante.Jpa关系概述 JDBC的使用 使用JDBC访问数据库 ...

  6. mybatis jar包_springboot2整合mybatis-plus3踩到的坑

    前言 最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus.因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改j ...

  7. mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务

    springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就 ...

  8. SpringBoot(13)--- 数据库操作(集成MyBatis)

    SpringBoot 数据库操作(集成MyBatis) Spring对持久化的支持,不单只支持JDBC,为各种支持的持久化技术都提供了简单的模板和回调: ORM持久化技术 模板类 JDBC(JdbcT ...

  9. druid 多数据源_Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

    关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...

最新文章

  1. AI时代,产品经理需要掌握的5项新技能
  2. 复原 IP 地址Python解法
  3. asp.net core 自定义基于 HttpContext 的 Serilog Enricher
  4. 重构-改善既有的代码设计-------代码的坏味道
  5. 做前端的你有没有觉得很吃力?
  6. c# 图像识别 车辆型号【百度AI】
  7. 智能合约安全漏洞检测技术研究综述——常见漏洞简述
  8. 网络术语---数字签名的简单认识
  9. 51单片机--外部中断
  10. 用html js制作迷宫,JavaScript生成随机迷宫详解
  11. Golang iota踩坑
  12. 国足晋级12强 | 爬取《NBA30支球队》“现役球员信息”,再来看看篮球吧!
  13. codeforces_#242 (Div. 2)
  14. django中间件的作用和用法
  15. 面试系列(四):vivo 软件工程师
  16. 1109 擅长C(C语言)
  17. 如何写好一篇产品测评报告
  18. [专栏精选]Unity动画系统的IK详解
  19. java类加载器可以从互联网加载,Java类加载器深入解析(2)
  20. arcgis pro各版本特性和要求

热门文章

  1. python智力问答游戏
  2. 如何融合多任务学习 (Multi-Task Learning ) 损失函数loss
  3. 创龙基于TI AM335x ARM Cortex-A8 CPU,主频高达1GHz核心板规格书
  4. PostMan动态参数及循环调用
  5. MSP432E401Y学习笔记(一)
  6. s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征...
  7. 巧用Superset大数据分析平台搞定各类图表
  8. AH8652小封装220伏如何做到固定电压5伏呢?
  9. 利用Nginx搭建文件服务器
  10. 手机硬件的未来在哪里?