jdbcTemplate和mybatis混合使用冲突的问题
将以前项目中的一个功能接口拿到现在正在做的项目中,之前的项目用的是 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混合使用冲突的问题相关推荐
- TempleteJDBC和Mybatis混合使用注意事项
今天,师傅让我将以前项目中的一个功能接口拿到现在正在做的项目中,之前的项目用的是 Spring+SpringMVC+TempleteJDBC,现在做的项目用的是 Spring Boot+Mybatis ...
- maven mysql的jdbctemplate_JDBC、JDBCTemplate、MyBatis、Hiberante 比较与分析
JDBC (Java Data Base Connection,java数据库连接) JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Jav ...
- Spring 持久化笔记(JdbcTemplate、Mybatis、Redis)
JdbcTemplate类 JdbcTemplate类是Spring框架数据抽象层的基础,其他更高层次的抽象类是构建于JdbcTemplate类之上的,JdbcTemplate类是Spring JDB ...
- SpringBoot (三) 整合数据库访问 jdbcTemplate、MyBatis
哈喽,大家好,我是有勇气的牛排(全网同名)
- JDBC,JdbcTemplate,JPA傻傻分不清楚
2019独角兽企业重金招聘Python工程师标准>>> JDBC.JDBCTemplate.MyBatis.Hiberante.Jpa关系概述 JDBC的使用 使用JDBC访问数据库 ...
- mybatis jar包_springboot2整合mybatis-plus3踩到的坑
前言 最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus.因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改j ...
- mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务
springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就 ...
- SpringBoot(13)--- 数据库操作(集成MyBatis)
SpringBoot 数据库操作(集成MyBatis) Spring对持久化的支持,不单只支持JDBC,为各种支持的持久化技术都提供了简单的模板和回调: ORM持久化技术 模板类 JDBC(JdbcT ...
- druid 多数据源_Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...
最新文章
- AI时代,产品经理需要掌握的5项新技能
- 复原 IP 地址Python解法
- asp.net core 自定义基于 HttpContext 的 Serilog Enricher
- 重构-改善既有的代码设计-------代码的坏味道
- 做前端的你有没有觉得很吃力?
- c# 图像识别 车辆型号【百度AI】
- 智能合约安全漏洞检测技术研究综述——常见漏洞简述
- 网络术语---数字签名的简单认识
- 51单片机--外部中断
- 用html js制作迷宫,JavaScript生成随机迷宫详解
- Golang iota踩坑
- 国足晋级12强 | 爬取《NBA30支球队》“现役球员信息”,再来看看篮球吧!
- codeforces_#242 (Div. 2)
- django中间件的作用和用法
- 面试系列(四):vivo 软件工程师
- 1109 擅长C(C语言)
- 如何写好一篇产品测评报告
- [专栏精选]Unity动画系统的IK详解
- java类加载器可以从互联网加载,Java类加载器深入解析(2)
- arcgis pro各版本特性和要求
热门文章
- python智力问答游戏
- 如何融合多任务学习 (Multi-Task Learning ) 损失函数loss
- 创龙基于TI AM335x ARM Cortex-A8 CPU,主频高达1GHz核心板规格书
- PostMan动态参数及循环调用
- MSP432E401Y学习笔记(一)
- s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征...
- 巧用Superset大数据分析平台搞定各类图表
- AH8652小封装220伏如何做到固定电压5伏呢?
- 利用Nginx搭建文件服务器
- 手机硬件的未来在哪里?