Ответ 1
factory.getConfiguration().addMapper(...);
Мне нравится нотация XML для указания глобальных параметров, таких как строки подключения. Мне также нравятся аннотации Mapper. Когда я пытаюсь объединить эти два, я получаю это исключение.
Есть ли способ объединить два? Я хотел бы использовать XML файл для глобальных конфигураций, но mybatis использует интерфейсы Mapper.
Проблема заключается в том, что SqlSessionFactoryBuilder(). build() принимает либо Reader (который я хочу использовать для передачи конфигурации XML), либо объект Configuration (который, как я вижу, имеет метод addMappers()
, который может мне помочь) - но я не понимаю, как их сочетать.
factory.getConfiguration().addMapper(...);
Когда u создайте интерфейс mapper с абстрактными методами, имеющими точную сигнатуру метода как sql в xml.
Например, Это было пространство имен для dao.xml, в котором содержался фактический запрос.
<mapper namespace=" com.mybatis.dao.EntityMapperInterface">
<select id="selectEmployeeWithId" parameterType="Long"
resultType="com.mybatis.domain.Employee">
select id,name from employee where 1=1
<if test="_parameter != null">
AND id=#{id}
</if>
order by id
</select>
Он будет отображаться в интерфейсе . com.mybatis.dao.EntityMapperInterface
public interface EntityMapperInterface {
public List<Employee> selectEmployeeWithId(Long id);
Файл Mybatis-config
<mappers>
<mapper resource="com/mybatis/mappers/EntityMapper.xml" />
</mappers>
Как вы вызываете его из класса Action/Servlet? Когда u инициализируется SqlSession,
EntityMapperInterface emi = session.getMapper(EntityMapperInterface.class);
List eList = emi.selectEmployeeWithId(1);
У меня была такая же проблема, и потому, что пространство имен в файле mybatis mapper и пакете интерфейса mapper не совпадали.