spring boot+tkmybatis(mapper)工具实现通用数据操作接口时遇到的问题

最近在做一个sb+tkmybatis整合的可以提供通用数据操作接口的demo,然而出现了很诡异的事情.,使用mapper提供的selectByPrimaryKey接口返回结果时报异常:

java.lang.ClassCastException: com.yhq.ssmdemo.web.mysql.pojo.Tree cannot be cast to com.yhq.ssmdemo.web.mysql.pojo.Trees

...什么鬼?自己转换自己?还报异常?搞了一整天都不知道怎么回事,去看mybatis源码,mapper源码,都没发现会造成这种问题的代码..然后在另外一个不用springboot的demo里面试了却不会出现这种问题。然后我又开始研究是不是spring boot自动配置时少了某些东西,但也没发现,而且也不会是这种问题吧...然后后面上网搜了下(之前也搜过,但可能关键字不准确导致搜出来的没有想要的结果),然后发现了一个同样的问题,说这是工具造成的一个bug,但我还以为是mapper工具,看了他给出的解决方案然后才知道是spring devtools这个工具。由于是本地开发的,所以用了spring devtools工具来进行监测代码修改自动重启,我们知道这个工具的原理就是使用两个类加载器,一个加载不会改变的第三方的依赖jar;另一个加载自己项目中自己编写的类。所以会出现这个异常就是由于这个问题导致的,下面上图,这样可以更加清晰直观地看出来,

这个是在项目启动spring devtools模块时进行堆dump的图,可以看到我自己写的许多类都有两个:

这个是项目不启用spring devtools模块的堆dump图,自己写的类只有一个:

所以这完全就是spring devtools的使用导致的,那怎么解决呢?让同一个类加载器去加载mapper的jar和自己写的实体类就行了:

在项目的src/main/resources目录下新建一个目录:META-INF,然后新建一个spring-devtools.properties文件,内容为:restart.include.companycommonlibs=tk/mybatis.*即可。

原文地址:https://www.cnblogs.com/fakerblog/p/8406872.html

时间: 2024-08-04 09:08:51

spring boot+tkmybatis(mapper)工具实现通用数据操作接口时遇到的问题的相关文章

Spring Boot实战之Filter实现使用JWT进行接口认证

Spring Boot实战之Filter实现使用JWT进行接口认证 jwt(json web token) 用户发送按照约定,向服务端发送 Header.Payload 和 Signature,并包含认证信息(密码),验证通过后服务端返回一个token,之后用户使用该token作为登录凭证,适合于移动端和api jwt使用流程 本文示例接上面几篇文章中的代码进行编写,请阅读本文的同时可以参考前面几篇文章 1.添加依赖库jjwt,本文中构造jwt及解析jwt都使用了jjwt库 <dependenc

EF实体框架数据操作接口(转)

//----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司// // 功能描述:实体框架数据仓储的操作接口,包含增删改查接口////----------------------------------------------------------------using System;using System.Linq;using System.Linq.

EF实体框架数据操作接口

//----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司// // 功能描述:实体框架数据仓储的操作接口,包含增删改查接口////----------------------------------------------------------------using System;using System.Linq;using System.Linq.

Spring Boot中使用FastJson解析Json数据

首先我们创建一个maven工程,如下图: 第二步:配置pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> </parent> <properties> <p

Spring Boot完美使用FastJson解析JSON数据

个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析呢?        引入fastjson依赖库: <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1

Spring Boot + JPA 多模块项目无法注入 JpaRepository 接口

问题描述 Spring Boot + JPA 多模块项目,启动报异常: nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '***.***.***Dao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency

曹工说Spring Boot源码(13)-- AspectJ的运行时织入(Load-Time-Weaving),基本内容是讲清楚了(附源码)

写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean Definition到底是什么,咱们对着接口,逐个方法讲解 曹工说Spring Boot源码(3)-- 手动注册Bean Definition不比游戏好玩吗,我们来试一下 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean de

如何设置Spring Boot扫描mapper文件

一.扫描mapper接口文件: 1.推荐: 在Application.java启动文件中,加注解: @MapperScan("com.xxx.mapper") 2. @Mapper因为我的mapper是一个模块,portal一个模块.mapper在com.xxx.mapper下portal的groupid是com.xxx,这样可以@Mapper直接扫描到.但是mybatis-generator生成的mapper并没有@mapper,即使折腾出来了,虽然对运行效率不会有什么影响,启动就会

Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题

在写一个工具类的时候,因为要用到yml中的自定义参数,使用@Value发现值不能正常注入,都显示为null: yml文件中的自定义格式 调用工具类的时候不能new的方式 要使用@Autowired的方式注入进来, new会导致部分环境未加载,尽可能舍弃new的方式,交付spring管理 而工具类也是需要交给spring管理.需要在工具类上加上 @Component注解然后注意一下的是 在springframework下不能@Autowired静态变量 所以在变量上不能有 static 怎么扫描注