mybatis: использование интерфейсов сопоставления с XML-конфигурацией для глобальных параметров
Мне нравится нотация XML для определения глобальных параметров, таких как строки подключения. Мне также нравятся аннотации Mapper. Когда я пытаюсь объединить два, я получаю это исключение.
Есть ли способ объединить два? Я хотел бы использовать файл XML для глобальных конфигураций, но mybatis должен учитывать интерфейсы Mapper.
Проблема в том, что SqlSessionFactoryBuilder(). Build() принимает либо Reader (который я хочу использовать для передачи конфигурации XML), либо объект Configuration (который, как я вижу, имеет addMappers()
метод, который может мне помочь) - но я не понимаю, как объединить оба.
4 ответа
Когда вы создаете интерфейс 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();