スポンサーリンク

エラー・例外

spring-maybatisのエラー・例外

投稿日:2021年6月30日 更新日:

MybatisでSpringBoot起動時にCaused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias

ログの出力例

Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.springhack.okozukaisystem.integration.mapper.enitity.ChildrenEntity'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.springhack.okozukaisystem.integration.mapper.enitity.ChildrenEntity

上記例では、
com.springhack.okozukaisystem.integration.mapper.enitity.ChildrenEntity
が見つからないと怒られています。

そのクラスのパッケージを確認しましょう。

もしくは、「com.springhack.okozukaisystem.integration.mapper.enitity.ChildrenEntity」で文字列検索して、SQLを定義したXMLファイル内で使用されているかもしれません。

修正例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springhack.okozukaisystem.integration.mapper.ChildrenMapper">
    <select id="selectAll" resultType="com.springhack.okozukaisystem.integration.mapper.enitity.ChildrenEntity">
        SELECT * FROM children;
    </select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springhack.okozukaisystem.integration.mapper.ChildrenMapper">
    <select id="selectAll" resultType="com.springhack.okozukaisystem.integration.enitity.ChildrenEntity">
        SELECT * FROM children;
    </select>
</mapper>

わかりにくいかもしれませんが、パッケージ名に不要な「mapper」が入っちゃっていました。あなたのXML内のパッケージ名を確認してください。

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

ログの出力例

2022-01-26 12:54:30.041 ERROR 68837 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.springhack.okozukaisystem.integration.mapper.ChildrenMapper.selectAll] with root cause

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.springhack.okozukaisystem.db.mapper.ChildrenMapper.selectAll
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.9.jar:3.5.9]
	at

SQLを定義したXMLファイルが見つからない。

まずは、XMLファイルの配置ディレクトリを確認すること。

上記ログの例では、

package com.springhack.okozukaisystem.integration.mapper;

@Mapper
public interface ChildrenMapper {
    public List<ChildrenEntity> selectAll();
}

上記のselectAllに相当するXMLファイルが見つからない。

XMLファイルはこの場合、
src/main/resources/com/springhack/okozukaisystem/integration/mapper/ChildrenMapper.xml
このように配置されていないといけない。

Field shopMapper in com.xxx.controller.ShopListController required a bean of type 'com.xxx.mapper.ShopMapper' that could not be found.

コントローラーやサービスにおいて、MapperインターフェースのDIに失敗しています。

MapperとしてDI対象になるのは、@MapperScanで指定されたパッケージに入っているインターフェースです。
Mapperインターフェースが@MapperScanで指定されたパッケージに入っているか確認してください。

@Configuration
@MapperScan("com.noricgeographic.shopreview.mapper")
public class MyBatisConfig {
  @Bean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(dataSource);
    return factoryBean.getObject();
  }

上記の設定例では、「com.noricgeographic.shopreview.mapper」パッケージ配下にMapperインターフェースを配置する必要があります。

package com.noricgeographic.shopreview.mapper;

import java.util.List;
import com.noricgeographic.shopreview.mapper.dto.ShopDto;

public interface ShopMapper {
	List<ShopDto> findAll();
	boolean insert(ShopDto shopDto);
}

このように、Mapperインターフェースのパッケージが、@MapperScanの引数で指定されているパッケージ内であることが必要です。

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-エラー・例外

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.