【问题标题】:mybatis-spring & spring boot - Could not resolve type alias issuemybatis-spring & spring boot - 无法解决类型别名问题
【发布时间】:2017-09-10 14:42:26
【问题描述】:

我正在使用带有 mybatis-spring 3.1 的 spring boot 1.5.4。我能够通过 Eclipse 成功运行我的应用程序。但是当我使用命令行(java -jar jarname)时,我得到了以下异常。我的独立应用程序正在停止。我想移动我的应用程序以使用 jar 部署到不同的机器。请帮忙。

原因:org.apache.ibatis.type.TypeException:无法解析类型别名“MyClass”。原因:java.lang.ClassNotFoundException:找不到类:MyCLass 在 org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120) 在 org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149) 在 org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116) ... 36 更多

【问题讨论】:

    标签: spring-boot spring-mybatis


    【解决方案1】:

    我通过转向自动配置(使用弹簧属性)解决了同样的问题,我最初在 javaconfig 类中配置了我的数据库配置(数据源,会话工厂)。我已删除配置并将我的配置移至我的应用程序属性(yml 格式).. 以下是我所拥有的

    mybatis:
      typeAliasesPackage: com.wiredinformatics.preauth.domain
    spring:
      datasource:
        url: jdbc:mysql://127.0.0.1:3306/preauth?
        useSSL=false&serverTimezone=UTC
        username: myuser
        password: mypass
      dbcp2:
        driver: com.mysql.cj.jdbc.Driver
        initial-size: 2
        max-total: 10
        max-idle: 10
        min-idle: 5
        max-wait-millis: 30000
        validation-query: SELECT 1 
    

    我还没有时间弄清楚为什么我自己的 java 配置会破坏扫描。它在eclipse中运行正常,但在命令行运行时失败

    【讨论】:

    • 我也试过了。我按如下方式放入app confgi并尝试但没有得到 typeAliasesPackage=com.package.entity
    【解决方案2】:

    我解决了这个问题!

    https://github.com/mybatis/mybatipse/issues/77
    @deoxyseia

    1. 移除 sessionFactoryBean.setTypeAliasesPackage("com.your.packae.pojo")
    2. 将 resultType="MyClass" 更改为 resultType="com.your.packae.pojo.MyClass"
    3. 重新包装

    【讨论】:

    • 虽然此链接可能会回答问题,但 Stack Overflow 上不鼓励仅链接的答案,您可以通过获取链接的重要部分并将其放入您的答案来改进此答案,这样可以确保您的答案是如果链接被更改或删除,仍然是一个答案:)
    【解决方案3】:

    我在 Maven 项目中工作时遇到了类似的问题,导致同样的错误。

    我的情况是我有一个带有 Spring Boot 的可执行 jar,它有一个嵌套 jar(使用常规 Spring)作为依赖项。在 IntelliJ 中运行时,由于 IntelliJ 查找其类的方式,绝对没有问题。

    在尝试使用 java -jar jarname.jar 在本地启动 jar 以便我可以将其部署到远程服务器上时,MyBatis 在扫描 typeAliases 和 typeHandlers 包时遇到了问题。

    由于我正在处理一个混合了在 Java 和 xml 中初始化的 Spring Beans 的遗留项目,因此我花了很多时间来确定根本原因。很多答案都说将您的 resultType 更改为完整的类路径,例如 answer。这行得通。但就我而言,这意味着对我们的 DAO 进行数百次更改。

    最后,我追上了external link from titanwolf。

    您需要执行以下操作:

    1. 将以下依赖项添加到您的 POM(包含您的 MyBatis 设置的 jar)
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>
    
    1. 在 SqlSessionFactoryBean 上设置 VFS 属性

    xml:

        <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
            <property name="vfs" value="org.mybatis.spring.boot.autoconfigure.SpringBootVFS"/>
            <property name="configLocation" value="classpath:mybatis-config.xml"/>
            <property name="dataSource" ref="dataSource"/>
        </bean>
    

    或者如果您使用常规 Java 进行 bean 初始化:

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
      SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
      factory.setDataSource(dataSource);
      factory.setVfs(SpringBootVFS.class);
      return factory;
    }
    

    就是这样。在本地和远程服务器上工作。希望我为其他人省去了一些麻烦。

    注意: mybatis-config.xml 包含我的配置,包括但不限于:

    <configuration>
        <settings>
            <setting name="lazyLoadingEnabled" value="false"/>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    
        <typeAliases>
            <package name="com.my.path.model"/> <!--wasn't being picked up before fix-->
        </typeAliases>
    
        <typeHandlers>
            <package name="com.my.path.mybatis"/> <!--wasn't being picked up before fix-->
        </typeHandlers>
    
        <mappers>
            <mapper resource="sql/my-dao.xml"/>
        <mappers>
    </configuration>
    

    您可以通过为 MyBatis 启用日志记录来更好地跟踪您自己的错误。只需将以下行添加到您的 application.properties 文件中:

    logging.level.org.mybatis=DEBUG

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2019-07-29
      • 2022-09-22
      • 1970-01-01
      • 2021-04-16
      • 2021-11-14
      • 2018-05-13
      相关资源
      最近更新 更多