当前位置: 首页 > 知识库问答 >
问题:

MyBatis with Spring:找不到结果映射

云伯寅
2023-03-14

我无法使用xml文件将查询结果映射到带有MyBatis和Spring Boot的bean。

public interface MyMapper {
    @ResultMap("MyBean")
    @Select("SELECT myData as myData FROM myTable")
    public List<MyMapper> getMappedData();
}
<!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>
@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映射器,因此无法在正确的bean上映射结果。我收到的错误是:

16:02:56,074错误[org.springframework.boot.web.servlet.support.errorpagefilter](默认任务-1)由于异常[找不到结果映射Mypackage.MyMapper.MyBean],从请求[/Mypage/GetData]转发到错误页:org.apache.ibatis.builder.IncompleteElementException:找不到结果映射Mypackage.MyMapper.MyBean

我错过了一些配置?可能在application.property文件上?

共有1个答案

解修然
2023-03-14

您必须在

例如:MyBean pkg是:org.mypkg.MyBean:

 <resultMap id="MyBean" type="org.mypkg.MyBean">
    <id property="myData " column="myData " />
</resultMap>
 类似资料:
  • 我开始使用JOOQ和dvd租赁商店数据库aka sakila。基本上,我想找一个演员和他的角色(我创建的表)。到目前为止,我想到了这个: 我希望能够将演员及其角色提取到一个对象中:DTO。我找到了这篇文章https://arnaudroger.github.io/blog/2017/03/02/jooq-one-to-many-without-dto.html但我发现使用sfm的解决方案过于冗长,

  • 我正在开发一个使用现有数据库的应用程序,该数据库只能通过存储过程访问。这些SP中的大多数返回来自多个表的列。 我们有一个数据访问层,它从我们的域对象层返回类型的对象。但是,由于SPs返回来自多个表的列,我不确定应该如何构建我的域对象,因为它们中的大多数不会“自然”映射到从SPs返回的数据。 示例:存储过程返回来自“员工”表和“经理”表的列: -员工ID -FirstName -LastName -

  • 我有一个用户类,有16个属性,比如名字,姓氏,出生日期,用户名,密码等...这些都存储在MySQL数据库中,当我想要检索用户时,我使用ResultSet。我想将每一列映射回用户属性,但我这样做的效率似乎非常低。例如,我正在做: 也就是说,我检索所有的列,然后通过将所有的列值插入用户构造函数来创建用户对象。 有人知道更快、更整洁的方法吗?

  • 我是使用Spring SOAP W的新手。我学习了许多教程,并试图适应这个示例的需要,但从未成功,我得到了这样的消息:找不到[SaajSoapMessage { http://ws . veritran . net/vtAuthServer/types } validatePOTCRequest]的endpoint映射 这是梅的代码: 这是我的终点: 这是我的服务级别: 这是我的WSDL定义 最后

  • 我无法使用xml文件将查询结果映射到带有MyBatis和Spring Boot的bean。 配置:Spring启动,mybatis。 1) 我有一个制图器: 2)在同一个包中,我有用于ResultSet的xml: 3) DTO: 3) 申请。属性: 4)应用程序: 请帮忙!