当前使用版本(必须填写清楚,否则不予处理)
mybatis-plus-boot-starter 3.3.0
该问题是怎么引起的?(最新版上已修复的会直接close掉)
我理解的这个方法是返回第一条记录(findOne),然后转成另外一个类型,实际上这个方法是返回第一条记录的第一个字段,一般都是ID,然后再转成另外一个类型。
我想知道这个方法为什么要这样设计,一般第一个字段都是ID,还需要转吗。
重现步骤
报错信息
java.lang.ClassCastException: java.lang.Long cannot be cast to com.wenxia.mbpd.entity.User
Comment From: Phantom0103
图看不到,贴下代码:
@Override
public <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
return SqlHelper.getObject(log, listObjs(queryWrapper, mapper));
}
@Override
public <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
return baseMapper.selectObjs(queryWrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
}
/**
* 根据 Wrapper 条件,查询全部记录
* <p>注意: 只返回第一个字段的值</p>
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Comment From: miemieYaho
本来就是返回第一个字段,有疑问去找mybatis质问,Function 只是把部分获取到的sql类型转成自己要的类型