mybatis: использование интерфейсов сопоставления с XML-конфигурацией для глобальных параметров

Мне нравится нотация XML для определения глобальных параметров, таких как строки подключения. Мне также нравятся аннотации Mapper. Когда я пытаюсь объединить два, я получаю это исключение.

Есть ли способ объединить два? Я хотел бы использовать файл XML для глобальных конфигураций, но mybatis должен учитывать интерфейсы Mapper.

Проблема в том, что SqlSessionFactoryBuilder(). Build() принимает либо Reader (который я хочу использовать для передачи конфигурации XML), либо объект Configuration (который, как я вижу, имеет addMappers() метод, который может мне помочь) - но я не понимаю, как объединить оба.

4 ответа

Решение

factory.getConfiguration().addMapper(...);

Когда вы создаете интерфейс 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? Когда у вас инициализирована SqlSession,

EntityMapperInterface emi = session.getMapper(EntityMapperInterface.class);
List eList = emi.selectEmployeeWithId(1);

У меня была та же проблема, и это было потому, что пространство имен в файле сопоставления mybatis и пакет интерфейса сопоставления не совпадали.

Спасибо, это мне очень помогает. Я не использую XML-конфигурацию mybatis с spring. Вот что я делаю:

      SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
Configuration configuration = new Configuration();
configuration.addMapper(AccountMapper.class);
factoryBean.setConfiguration(configuration);
return factoryBean.getObject();
Другие вопросы по тегам