Начал разбираться с mybatis, но при работе с ним не использую spring.
Проект имеет следующую структуру:
Классы Payment и Tariff на данный момент не используются.
Интерфейс SubscriberMapper.java имеет следующий вид:
public interface SubscriberMapper
{
Subscriber getSubscriberById(Integer id);
List getSubscribers();
}
Файл SubscriberMapper.xml имеет следующий вид:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper">
<select id="getSubscriberById" parameterType="java.lang.Integer">
select * from subscriber where id = #{id}
</select>
<select id="getSubscribers">
select * from subscriber
</select>
</mapper>
В файле mybatis-config.xml присутствуют строки:
<mappers>
<mapper class="mapper.SubscriberMapper"/>
</mappers>
При выполнении последней строки приведенного кода в файле SubscriberMapper.java
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
subscriberMapper = sqlSessionFactory.openSession().getMapper(SubscriberMapper.class);
Subscriber subscriber = subscriberMapper.getSubscriberById(1);
выпадает ошибка Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): mapper.SubscriberMapper.getSubscriberById
Я пока, видимо, еще не до конца осознал философию, по которой все это работает. Оба файла, по идее, и класс называются одинаково, все пути прописаны правильно. В pom.xml прописывал
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
И это не помогло.
Может кто-нибудь подсказать, с чем это может быть связано?
Заранее, спасибо!
З.Ы.: Использовал подобную запись интерфейса - программа работает, запросы отправляются. Полагаю, что проблема действительно в том, что почему-то не находится файл SubscriberMapper.xml. Основной вопрос - почему...
public interface SubscriberMapper
{
@Select("select * from subscriber where id = #{id};")
Subscriber getSubscriberById(Integer id);
@Select("select * from subscriber;")
List<Subscriber> getSubscribers();
}
Проблема в том, что у вас всё перемешалось. Если вы используете маппинг в xml-конфигурации, то конструкция mapper в mybatis-config.xml должна выглядеть так:
<mapper resource="SubscriberMapper.xml"/>
А сам SubscriberMapper.xml так:
<mapper namespace="com.example.SubscriberMapper">
<resultMap id="subscriber" type="com.example.Subscriber" />
<select id="getSubscriberById" parameterType="java.lang.Integer" resultMap="subscriber">
select * from subscriber where id = #{id}
</select>
<select id="getSubscribers" resultMap="subscriber">
select * from subscriber
</select>
</mapper>
А тег <resources> из pom.xml удалите, от греха подальше.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники