当前使用版本(必须填写清楚,否则不予处理)

v3.3.1

该问题是怎么引起的?(最新版上已修复的会直接close掉)

com.baomidou.mybatisplus.extension.plugins.pagination.Page 简单分页模型

中optimizeCountSql hitCount 字段的set方法与lombok以及默认生成不一致,导致使用属性copy无法找到optimizeCountSql hitCount 字段的set方法,导致无法进行属性复制

MyBatis-Plus Page<T> 简单分页模型  中optimizeCountSql 字段的set方法与lombok以及默认生成不一致,导致使用属性copy无法找到optimizeCountSql字段的set方法,导致无法进行属性复制 //默认生成的 MyBatis-Plus Page<T> 简单分页模型  中optimizeCountSql 字段的set方法与lombok以及默认生成不一致,导致使用属性copy无法找到optimizeCountSql字段的set方法,导致无法进行属性复制

重现步骤

@Test
   public void testMap() {
     Page page1 = new Page();
    page1.setOptimizeCountSql(false);
    Page page2 = new Page();
    copy(page1, page2);
    System.out.println( "page1"+ page1.optimizeCountSql());
     System.out.println( "page2"+ page2.optimizeCountSql());
  }


/**
 * BeanCopier的缓存
 */
static final ConcurrentHashMap<String, BeanCopier> BEAN_COPIER_CACHE = new ConcurrentHashMap<>();

/**
 * BeanCopier的copy
 *
 * @param source 源文件的
 * @param target 目标文件
 */
public static void copy(Object source, Object target) {
    String key = genKey(source.getClass(), target.getClass());
    BeanCopier beanCopier;
    if (BEAN_COPIER_CACHE.containsKey(key)) {
        beanCopier = BEAN_COPIER_CACHE.get(key);
    } else {
        beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false);
        BEAN_COPIER_CACHE.put(key, beanCopier);
    }
    beanCopier.copy(source, target, null);

}

/**
 * 生成key
 *
 * @param srcClazz 源文件的class
 * @param tgtClazz 目标文件的class
 * @return string
 */
private static String genKey(Class<?> srcClazz, Class<?> tgtClazz) {
    return srcClazz.getName() + tgtClazz.getName();
}

报错信息

MyBatis-Plus Page<T> 简单分页模型  中optimizeCountSql 字段的set方法与lombok以及默认生成不一致,导致使用属性copy无法找到optimizeCountSql字段的set方法,导致无法进行属性复制

Comment From: miemieYaho

这属性只有分页前是有用的,有什么必要还要在分页前copy一份出来?

Comment From: chengzichen

DTO BO 继承Page ,Feign 调用时转换需要

Comment From: nieqiurong

这里用BeanCopier应该还不止这几个问题,链式的set方法都会导致属性copy失败的,建议暂时换个属性拷贝的吧.

Comment From: chengzichen

换了hutool里的BeanUtils进行测试,是可以允许链式的set方法进行属性copy,但是方法名称问题还是会导致无法匹配找到optimizeCountSql字段的get方法 hitCount的set方法

把链式set方法和 默认set方法分开

public void setOptimizeCountSql(boolean optimizeCountSql) {
    this. optimizeCountSql = optimizeCountSql;
}

public Page optimizeCountSql(boolean optimizeCountSql) {
           setOptimizeCountSql(optimizeCountSql)
      return  this;
}

Comment From: nieqiurong

没用过hutool,暂时只用了mybatis自带的和spring的拷贝做了简单的测试,各个框架用拷贝的方式不一样,暂时无法做到一一满足.