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

考虑在配置中定义类型bean:MybATIs

云卓
2023-03-14

我对整个Spring的生态系统都是陌生的。我一直在学习一些教程,能够创建一个Spring Boot应用程序并执行crud操作。然后我开始把这个项目改成mybatis的标准。

我已经尝试了许多其他类似问题的答案,但到目前为止没有一个是有效的。

下面是问题陈述:

//CustomerService.java

package com.crudapp.service;

import com.crudapp.entity.Customer;

import java.util.List;

@Service
public interface CustomerService {

    public List<Customer> getAllCustomers();
//I have other methods as well to delete, update and post.

}

实现类实现为:


public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerMapper customerMapper;

    @Override
    public List<Customer> getAllCustomers() {
        List<Customer> list = customerMapper.getAllCustomers();
        return list;
    }
}

我的Mapper类如下所示:

@Mapper
public interface CustomerMapper {

    public List<Customer> getAllCustomers();
}

我的Mapper.xml课是:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.crudapp.mapper.CustomerMapper">
    <select id="getAllCustomers" resultType="customer">
        select * from customers
    </select>
</mapper>

最后是我的控制器类:

@RestController
@RequestMapping("/api/v1")
public class CustomerController {

    @Autowired
    CustomerService customerService;

    @RequestMapping(value = "/getAllCustomers", method = RequestMethod.GET)
    public List<Customer> getAllCustomers() {
        List<Customer> list = customerService.getAllCustomers();
        return list;
    }
}

我得到的错误是:

描述:

com.crudapp.service.impl.CustomeServiceImpl中的字段CusterMapper需要一个类型com.crudapp.mapper.CustomeMapper的bean,但找不到。

注入点具有以下注释:

  • @组织。springframework。豆。工厂注释。自动连线(必需=真)

行动:

考虑在您的配置中定义一个类型为“com.crudapp.mapper.自定义映射器”的bean。

毫无疑问,错误是直接的。我认为控制器中有两个@Autowired,另一个在服务实现中可能是问题所在。但我的理解是,bean将由框架自动管理。那么,我该如何解决这个问题呢?

更新:通过添加@MapperScan(“com.crudapp.mapper”)上述错误不再存在,但我得到了这个新错误:

org.springframework.beans.factory.BeanCreationExcema:错误创建名称为 在@EnableJpaRepository声明的@EnableJpaRepository中定义com.crudapp.repository.CustomeRepo定义的bean。EnableJpaRepositoriesConfiguration:调用init方法失败;嵌套异常是java.lang.IllegalArgumentExcoop: not a托管类型:类com.crudapp.entity.客户

我的主要课程是:

@SpringBootApplication
@MapperScan("com.crudapp.mapper")
public class CrudappApplication {

    public static void main(String[] args) {
        SpringApplication.run(CrudappApplication.class, args);
    }

}

在我的申请中。我拥有的属性文件:

mybatis.config=classpath:mapper/mybatis_config.xml
mybatis.typeAliasesPackage=com.crudapp.entity
mybatis.mapperLocations=classpath*:**/mappers/*.xml

共有1个答案

鲜于河
2023-03-14

确保在属性文件中有此项

迈巴蒂斯。typeAliasesPackage=com。西瓦拉布斯。演示。域mybatis。mapperLocations=classpath*:**/mappers/*。xml

裁判:https://dzone.com/articles/spring-boot-working-with-mybatis

和MapperScan注释

@SpringBootApplication
@MapperScan("com.sivalabs.demo.mappers")
public class SpringbootMyBatisDemoApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringbootMyBatisDemoApplication.class, args);
    }
}
 类似资料: