1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mybatisplus实体类映射报错: java.lang.ClassCastException: User cannot be cast to UserVo

mybatisplus实体类映射报错: java.lang.ClassCastException: User cannot be cast to UserVo

时间:2020-03-15 21:32:09

相关推荐

mybatisplus实体类映射报错: java.lang.ClassCastException: User cannot be cast to UserVo

目录

问题现象:

问题分析:

下面的情况则更加复杂:

解决方法:

问题现象:

今天在使用springboot+mybatisplus做项目的时候,设置完mapper.xml文件之后发生了以下异常:

java.lang.ClassCastException: com.stephen.xxxxxx..model.User cannot be cast to com.stephen.xxxxxx.vmodel.UserVo

问题分析:

这个问题经常会发生在视图模型(vmodel实体类)中,一般我们的物理模型(model实体类)的每个属性都只用于存储数据库表中一一对应的字段.

但很多时候我们需要传递给前端的数据往往不止这么简单,很多时候我们会添加额外的数据返回给前端,而这些数据是无法对应到数据库表中的;因此就需要引申出了视图模型的概念了.

假如,我们返回给前端的数据比数据库表中有的数据要,我们可以用视图模型放入前端需要的属性即可;

假如,我们返回给前端的数据比数据库表中有的数据要,我们可以用视图模型继承其对应的物理模型,再放入前端需要的额外属性;

很多时候,我们返回给前端的数据比数据库表中有的数据要复杂得多,因此经常需要添加额外的属性,和相应的getter/setter方法;

下面的情况则更加复杂:

有时候,我们不仅要返回某个单表的数据,还得返回联表查询后的某些数据给前端,这就更加复杂了,但是细分下来,其实也很简单!

首先,我们需要基于某个物理模型,在其对应的mapper.xml文件中,进行修改,我们可以添加额外的sql标签,列出联表select后需要用到的的所有列名.如:

<sql id="View_Column_List">

user_name,

dept_name

</sql>

//这里user_name,和dept_name来自两个不同数据库表的数据.

然后建立新的resultMap,如下:

<resultMap id="ViewResultMap" type="com.stephen.xxxxxx.vmodel.User"><result column="user_name" property="userName"/><result column="dept_name" property="deptName"/></resultMap>

但是有个问题需要注意的,就是我标了黑体字的User.

这个问题也是导致抬头中提到的那个错误的发生:

java.lang.ClassCastException: com.stephen.xxxxxx..model.User cannot be cast to com.stephen.xxxxxx.vmodel.UserVo

name,到底错误是什么呢?

我们看下面的代码:

<resultMap id="BaseResultMap" type="com.stephen.xxxxxx.vmodel.User"><result column="user_id" property="userId"/><result column="user_name" property="userName"/></resultMap>

问题就在于我们直接复制了这段BaseResultMap的代码,而没有注意到,type的问题.

type属性用于配置实体类映射关系,由于我们的视图模型UserVo和物理模型User属性是不同的,

因此映射类型自然也不同,而我们在返回数据给前端的时候,肯定会应用到基于ViewResultMap所映射的数据关系,

ViewResultMap并不能映射到User上,因此出现报错.

解决方法:

<resultMap id="ViewResultMap" type="com.stephen.xxxxxx.vmodel.User">

改为:

<resultMap id="ViewResultMap" type="com.stephen.xxxxxx.vmodel.UserVo">

即可解决问题!!!!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。