2013-12-05 4 views
0

Я использую Spring with Mybatis. У меня он настроен на сканирование для mappers во всем моем проекте, и я предположил, что он определил mapper, потому что нашел XML-файл, который имеет ссылку на интерфейс java.Почему сканер Mapbisis набирает неправильный класс

Но это доказано неправильно сегодня, потому что я должен был добавить новый интерфейс, который не является классом картографа и Mybatis думает, что это, так что это вызывает проблемы в моем приложении из-за эту ошибку: сбор

Подключенных Заявлений не содержит значения для com.blah.MyInterface.someMethod

com.blah.MyInterface - это просто простой интерфейс, который мне нужно было включить в контекст Spring, поэтому я дал ему тег @Component. Это неправильный тег для использования? Это откуда происходит путаница?

Мне просто нужно было создать этот интерфейс, чтобы я мог прокси-сервер переносить мою базу данных в одном месте, где я могу поместить тэг @Transactional, поскольку Spring игнорирует его, когда он находится в моем методе контроллера.

Пример кода

package com.blah.something; 

@Component public interface MyInterface { 

    public void someMethod(SomeObject obj) throws Exception; 
} 


package com.blah.something; 

public class MyImplementation implements MyInterface { 

     @Transactional 
     public void someMethod(SomeObject obj) throws Exception { 
       ... do a whole bunch of stuff 
     } 
} 

Я не хочу, чтобы это включено в MyBatis картографами!

Edit: добавлена ​​mybatis конфигурационный XML в соответствии с просьбой:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE configuration 
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 

    <settings> 
     <setting name="lazyLoadingEnabled" value="false" /> 
     <setting name="defaultStatementTimeout" value="60"/> 
    </settings> 

    <typeAliases> 
     <typeAlias alias="StripTrailingZerosBigDecimalTypeHandler" type="com.blah.typehandlers.StripTrailingZerosBigDecimalTypeHandler"/> 
    </typeAliases> 

</configuration> 

Это часть моей яровой XML конфигурации, которая вызывает сканер mybatis сопоставителя:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="com.blah" /> 
</bean> 

Так что я установить его для сканирования весь проект, который включает мой интерфейс выше, но я не могу себе представить, что он просто захватывает каждый отдельный интерфейс и рассматривает их всех картографов!

В моем журнале отладки я вижу mybatis собирание мой интерфейс:

12/9/13 11:18:44 904 [org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner.findCandidateComponents:4125] - Scanning file [D:\Weblogic\wls11\domains\ldapdomain\autodeploy\default\WEB-INF\classes\com\blah\MyInterface.class] 
12/9/13 11:18:44 904 [org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner.findCandidateComponents:4125] - Identified candidate component class: file [D:\Weblogic\wls11\domains\ldapdomain\autodeploy\default\WEB-INF\classes\com\blah\MyInterface.class] 
12/9/13 11:18:44 904 [org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner.findCandidateComponents:4125] - Scanning file [D:\Weblogic\wls11\domains\ldapdomain\autodeploy\default\WEB-INF\classes\com\blah\MyImplementation .class] 
12/9/13 11:18:44 904 [org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner.findCandidateComponents:4125] - Ignored because not a concrete top-level class: file [D:\Weblogic\wls11\domains\ldapdomain\autodeploy\default\WEB-INF\classes\com\blah\MyImplementation .class] 

Там нет XML для этого интерфейса, нет картографа имен для него, это просто обычный старый Привычный интерфейс и MyBatis не должны подумайте, что это услуга картографа

+0

Есть ли какое-либо сопоставление коллекций в файлах xml-файлов mybatis? –

+0

Не могли бы вы опубликовать конфигурацию вашего mybatis scaner? –

+0

В mybatis config xml есть только запись о ленивых и таймаутах запросов, в нем нет спецификаций сопоставления – Trant

ответ

0

ОК, похоже, что сканер MyBAtis действительно принимает каждый интерфейс, у него нет никаких «smarts» в нем, чтобы идентифицировать интерфейсы карт, как я думал, это будет - на основе поиска соответствия XML или пространств имен , Мне пришлось добавить фильтр в конфигурацию картографа, а затем ввести новую аннотацию для аннотирования моих интерфейсов картографа.

Смежные вопросы