赞
踩
一、问题描述
今天在测试分页接口的时候,遇到了这个问题,xxx can be cast to xxx,意思是某实体类型不能“转化”为另一个实体类型,在开发中要尽量避免重复踩坑,以此写一篇博客来记录一下。由于问题不好复现,只能简单描述一下,我用的框架是mybatis。
二、举例说明
定义一个实体类User
public class User{ //用户id Long id; //用户名 String username; //密码 String password; //获取id public Long getId(){ return this.id; } //设置id public void setId(Long id){ this.id = id; } //获取用户名 public String getUsername(){ return this.username; } //设置用户名 public void setUsername(String username){ this.username = username; } //获取密码 public String getPassword(){ return this.password; } //设置密码 public void setPassword(String password){ return this.username; } }
接下来再定义一个,用户结果集实体UserResult,用于返回查询用户时需要的字段,比如只需要返回用户名和密码
public class UserResult{ //用户名 String username; //密码 String password; //获取用户名 public String getUsername(){ return this.username; } //设置用户名 public void setUsername(String username){ this.username = username; } //获取密码 public String getPassword(){ return this.password; } //设置密码 public void setPassword(String password){ return this.username; } }
接下来写mapper文件,UserMapper.java
public Interface UserMapper{
/**
* @param form这里是可能是列表分页的参数
* @return List<UserResult> 返回列表
*/
List<UserResult> queryUserList(UserPageForm form);
}
对应的UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="UserMapper"> <!-- 用户类型 --> <resultMap id="userMapper" type="User"> <result column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> </resultMap> <!-- 用户结果集类型 --> <resultMap id="userResultMapper" type="UserResult"> <result column="username" property="username"/> <result column="password" property="password"/> </resultMap> <!-- 查询用户列表sql,这里的返回类型是userMapper--> <select id="queryUserList" resultMap="userMapper"> select u.*, u.id as id, u.username as username, u.password as password from user u </select> </mapper>
接下来,是service了
public Interface IUserService{
/**
* @param form这里是可能是列表分页的参数
* @return List<UserResult> 返回列表
*/
List<UserResult> queryUserList(UserPageForm form);
}
实现类
public class UserServiceImpl implements IUserService{
private UserMapper userMapper;
List<UserResult> queryUserList(UserPageForm form){
//这一步也不会出问题list仍然会显示出来,但是如果要给视图封装一些数据查不出的字段
List<UserResult> resultList = userMapper.queryUserList(form);
//fengzhuang()是一个方法,可以对UserResult封装一下,再返回,但是到这一步可能会报错
resultList.stream().map(
userResult -> fengzhuang(userResult)
).collect(collectors.toList());
return resultList;
}
}
解决
以上就是基本的复现场景,基本上写了是很难发现问题的,除非debug一步步排查,只要将sql语句的返回类型改为UserResultMap就可以了,所以开发过程中还是要仔细的,各个环节都要注意到,否则一个问题可能卡很久,从而影响开发进度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。