springboot が jar にコンパイルされて Linux 上で実行されると、タイプ エイリアスに対応するエンティティ クラスが見つからないことが報告されます。これは springboot のパッケージ スキャンの問題です。 。
プロジェクトはデフォルトでスキャンに Mybatis の DefaultVFS を使用しますが、スプリングブート環境では Mybatis の DefaultVFS がパッケージのスキャン時に問題を引き起こすため、VFS は明確にするためにのみ変更できます
@Bean public SqlSessionFactory sqlSessionFactoryBean() throws Exception { logger.info("load SpringBootVFS"); //DefaultVFS在获取jar上存在问题,使用springboot只能修改 VFS.addImplClass(SpringBootVFS.class); SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources1 = resolver.getResources("classpath*:/mybatis/*.xml"); Resource[] resources2 = resolver.getResources("classpath*:/mysql/mapper/*.xml"); Resource[] resources = (Resource[]) ArrayUtils.addAll(resources1,resources2); sqlSessionFactoryBean.setMapperLocations(resources); sqlSessionFactoryBean.setTypeAliasesPackage("com.xxx.xx.entity"); return sqlSessionFactoryBean.getObject(); }
SpringBoot プロジェクトは IDEA 上では正常に動作しますが、その後エラーが発生しますエラーはおおよそ mybatis parsing the Mapper.xml typeAlias can not find the XX class
<select parameterType="XXClass" resultMap="XXMap">
この書き方でもIDEAでの実行には問題ありませんが、パッケージ化に問題があります。
<select parameterType="cn.test.xxx.XXClass" resultMap="XXMap">
コード内のparameterTypeにはフルパスを使用する必要があります。そうしないとエラーが発生します。
以上がSpringBootに基づいてMybatisをロードするTypeAliasの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。