Я не могу отобразить результат запроса в bean-компонент с MyBatis и Spring Boot с использованием XML-файла.
Если я пытаюсь отобразить результат с аннотацией @ResultType (ResultBean.class), все работает, но я не знаю, как отобразить внутренний класс, поэтому я пытаюсь отобразить результат с помощью преобразователя xml.
У меня есть этот интерфейс:
public interface MyMapper {
@ResultMap("MyBean")
@Select("SELECT myData as myData FROM myTable")
public List<MyMapper> getMappedData();
}
И у меня есть этот файл MyMapper.xml в том же пакете (класс java находится в src / main / java / myPackage, а файл xml находится в /src/main/resources/myPackage).
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="myPackage.MyMapper">
<resultMap id="MyBean" type="MyBean">
<id property="myData " column="myData " />
</resultMap>
</mapper>
Это мой класс SpringBootServletInitializer:
@SpringBootApplication
@EnableTransactionManagement
@MapperScan("myPackage")
@PropertySource(value = "classpath:application.properties")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Value("${spring.datasource.jndi-name}")
private String jndiName;
@Bean
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
DataSource dataSource = dsLookup.getDataSource(jndiName);
return dataSource;
}
@Bean
public DataSource jndiObjectFactoryBean() {
JndiObjectFactoryBean jofb = new JndiObjectFactoryBean();
jofb.setJndiName(jndiName);
return (DataSource) jofb.getObject();
}
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public ManagedTransactionFactory transactionFactory() {
return new ManagedTransactionFactory();
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("beansPackage");
return sessionFactory;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource());
return (SqlSessionFactory) sqlSessionFactory.getObject();
}
}
Боб
@Alias("MyBean")
public class MyBeanimplements Serializable {
private static final long serialVersionUID = 3143220123058683967L;
private String myData;
}
Но похоже, что MyBatis не может найти xml mapper, поэтому он не может отобразить результат на правильном бине. Я получаю ошибку:
16: 02: 56,074 ОШИБКА
[Org.springframework.boot.web.servlet.support.ErrorPageFilter]
(задание по умолчанию-1) Пересылка на страницу ошибки из запроса
[/ MyPage / getData] из-за исключения [Не удалось найти карту результатов
myPackage.MyMapper.MyBean]:
org.apache.ibatis.builder.IncompleteElementException: не удалось найти
Карта результатов myPackage.MyMapper.MyBean
Мне не хватает какой-то конфигурации? Может быть, в файле application.property?