1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MyBatisエラー:Invalid bound statement (not found)

Posted at

MyBatisの「Invalid bound statement (not found)」エラーは、MyBatisが実行しようとしているSQLステートメントが見つからない場合に発生します。このエラーの原因とその解決策について、以下に記す。

1. Mapper InterfaceとXMLのファイル名、ファイル階層の不一致

MapperインタフェースとXMLは、以下のように階層構造ファイル名が一致している必要がある。

  • src/main/java/jp/com/example/domain/dao/TestMapper.java
  • src/main/resources/jp/com/example/domain/dao/TestMapper.xml

階層構造を同じにしたくない場合

@MapperScanでインタフェースが存在するパッケージを指定する

@SpringBootApplication
@MapperScan("com.example.mapper")  // Mapperインタフェースのパッケージ
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

・application.yml または application.properties に mapper.xml のパスを指定する

application.yml
mybatis:
  mapper-locations: classpath:/mappers/**/*.xml  # XMLファイルのパスを指定

2. SQLステートメントIDの不一致

Mapperインタフェースで定義されているメソッド名と、XMLファイルに定義されているSQLステートメントのIDが一致していない場合、MyBatisはそのステートメントを見つけられません。

TestMapper.java
@Mapper
public interface TestMapper {
    UserInfoResult selectUserById(String id);
}
TestMapper.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="jp.com.example.domain.dao.TestMapper">
<select id="selectUserById" resultType="com.example.entity.UserEntity">
    SELECT id, name, age
    FROM users
    WHERE id = #{id}
</select>
</mapper>

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?