通用mapper:无法获取实体类XXXXXX对应的表名!

使用通用mapper,无法获取到对应的实体类:
无法获取对应的实体类
看上面的图片中,可以定位到报错的地方时:EntityHelper.getEntityTable,点进去之后,

public static EntityTable getEntityTable(Class<?> entityClass) {
        EntityTable entityTable = (EntityTable)entityTableMap.get(entityClass);
        if (entityTable == null) {
            throw new MapperException("无法获取实体类" + entityClass.getCanonicalName() + "对应的表名!");
        } else {
            return entityTable;
        }
    }

没有找到实体对象是因为entityTableMap 中没有数据,而entityTableMap 是初始化的时候就会加载的:

public static synchronized void initEntityNameMap(Class<?> entityClass, Config config) {
        if (entityTableMap.get(entityClass) == null) {
            Style style = config.getStyle();
            if (entityClass.isAnnotationPresent(NameStyle.class)) {
                NameStyle nameStyle = (NameStyle)entityClass.getAnnotation(NameStyle.class);
                style = nameStyle.value();
            }

            EntityTable entityTable = null;
            Table fields;
            if (entityClass.isAnnotationPresent(Table.class)) {
                fields = (Table)entityClass.getAnnotation(Table.class);
                if (!fields.name().equals("")) {
                    entityTable = new EntityTable(entityClass);
                    entityTable.setTable(fields);
                }
            }

            if (entityTable == null) {
                entityTable = new EntityTable(entityClass);
                entityTable.setName(StringUtil.convertByStyle(entityClass.getSimpleName(), style));
            }

            entityTable.setEntityClassColumns(new LinkedHashSet());
            entityTable.setEntityClassPKColumns(new LinkedHashSet());
            fields = null;
            List fields;
            if (config.isEnableMethodAnnotation()) {
                fields = FieldHelper.getAll(entityClass);
            } else {
                fields = FieldHelper.getFields(entityClass);
            }

            Iterator var5 = fields.iterator();

            while(true) {
                EntityField field;
                do {
                    if (!var5.hasNext()) {
                        if (entityTable.getEntityClassPKColumns().size() == 0) {
                            entityTable.setEntityClassPKColumns(entityTable.getEntityClassColumns());
                        }

                        entityTable.initPropertyMap();
                        entityTableMap.put(entityClass, entityTable);
                        return;
                    }

                    field = (EntityField)var5.next();
                } while(config.isUseSimpleType() && !SimpleTypeUtil.isSimpleType(field.getJavaType()));

                processField(entityTable, style, field);
            }
        }
    }

也就是说,在加载项目的配置文件的时候就会去加载好,但是现在没有。

查找解决问题的原因,很多都是说spring-boot的,我的项目是ssm框架的,所以我觉得应该是在spring加载的时候要处理的:只要查看spring-mybatis的配置:
果然:使用通用mapper,使用的是tk包的mybatis,不是org的,将org 的mybatis换成tk就可以了:

 <!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    <!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
        <!--&lt;!&ndash; 注入sqlSessionFactory &ndash;&gt;-->
        <!--<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>-->
        <!--&lt;!&ndash; 给出需要扫描Dao接口包 &ndash;&gt;-->
        <!--<property name="basePackage" value="XXXX"/>-->
    <!--</bean>-->

    <!-- Spring 与 Mybatis 整合配置,扫描所有 Mapper -->
    <!--如果使用的是通用mapper 需要将mapper的扫描配置换成tk包下的-->
    <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="XXXXX"/>
        <!-- 3.2.2版本新特性,markerInterface 可以起到 mappers 配置的作用,详细情况需要看 Marker 接口类 -->
        <!--<property name="markerInterface" value="XXXX.mapper"/>-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

这样就解决掉了

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值