开发者社区> 问答> 正文

springmvc整合mybatis的问题?报错

是这样的, 配置好了所有的配置文件之后, 用junit测试, 测试代码如下:


public class CategoryServiceImplTest {
	private ApplicationContext actx;

	@Before
	public void setUpBeforeClass() throws Exception {
		actx = new ClassPathXmlApplicationContext(new String[] { 
				"classpath:spring/applicationContext-dao.xml", 
				"classpath:spring/applicationContext-service.xml",
				"classpath:spring/applicationContext-transactional.xml",
				"classpath:spring/applicationContext-mvc.xml"});	
	}

	@Test
	public void test() {
		CategoryController controller = (CategoryController) actx.getBean("categoryController");
		String str = (String) controller.queryCList2().getViewName();
		System.out.println(str);
	}
}



然后正常的获取到了controller的bean, 也正确的输出了结果.


我也分别获取了categoryMapper的bean和categoryService的bean.

其中categoryService中注入了categoryMapper, 

controller中注入了categoryService.

controller类的代码:

@Controller
public class CategoryController {
	@Resource
	private CategoryService categoryService;
	
	@RequestMapping("/queryCList2")
	public ModelAndView queryCList2() {
		ModelAndView mv = new ModelAndView();
		//categoryService = (CategoryService) actx.getBean("categoryService");
		List<Category> cList = categoryService.findAll();
		mv.addObject("cList", cList);
		mv.setViewName("index");
		return mv;
	}
}

然后, 我发布到tomcat, 就报错.

1.Error creating bean with name 'categoryController':
//上面的类注入了下面的类
2.Error creating bean with name 'categoryService': 

3.No qualifying bean of type [com.shop.mapping.CategoryMapper] 
found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this 
dependency. 
Dependency annotations: 
{@javax.annotation.Resource(shareable=true, 
mappedName=, description=, name=, type=class java.lang.Object, 
authenticationType=CONTAINER)}



注入方式:

@Service("categoryService")
public class CategoryServiceImpl implements CategoryService {
	@Resource
	private CategoryMapper categoryMapper;



如果我把这里的自动扫描去掉, 在配置文件中配置 categoryService的bean,那么 第三个错误的内容就变成第二个错误的内容, 也就是 service出错:
No qualifying bean of type [com.shop.mapping.CategoryService]...

请问这是什么原因呢,谢谢您的解答.




展开
收起
爱吃鱼的程序员 2020-06-09 11:21:00 484 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    看样子是mybatis的mapper类没有生成造成的,也没有说mapper生成错误,可能是mybatis的基本配置就有问题,根本没有去创建Mapper

    1.检查一下配置文件的位置路径有没有问题

    <spanstyle="font-size:13.3333px;">2.mybatis扫描路径配置问题

    3.Mapper类注解是否添加

    写个junit测试看下CategoryMapper是否能够取到怀疑<spanstyle="font-family:'MicrosoftYaHei',Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">Mapper类注解是否正确回复<aclass='referer'target='_blank'>@丶KKdo:可以看一下楼下的.已经获取过了,也没有问题,使用的是自动扫描包的形式配置的mapperbean.

    <imgsrc="http://static.oschina.net/uploads/space/2016/0822/090524_940i_2861620.png"alt="">

    <preclass="brush:java;toolbar:true;auto-links:false;">privateApplicationContextactx;@BeforepublicvoidsetUpBeforeClass()throwsException{actx=newClassPathXmlApplicationContext(newString[]{"classpath:spring/applicationContext-dao.xml","classpath:spring/applicationContext-service.xml","classpath:spring/applicationContext-transactional.xml"});}@Testpublicvoidtest(){CategoryMappercategoryMapper=(CategoryMapper)actx.getBean("categoryMapper");CategoryServicecategoryService=(CategoryService)actx.getBean("categoryService");System.out.println(categoryMapper);System.out.println(categoryService);CategoryControllercontroller=(CategoryController)actx.getBean("categoryController");Stringstr=(String)controller.queryCList2().getViewName();System.out.println(str);}



    看日志可以看到三个bean都被成功的获取了的,我不知道是不是我的web.xml加载的时候出了问题

    <preclass="brush:xml;toolbar:true;auto-links:false;"><context-param><param-name>contextConfigLocation</param-name><!--<param-value>/WEB-INF/applicationContext- .xml,classpath:applicationContext- .xml</param-value>--><param-value>classpath:applicationContext-dao.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><!--default:/WEB-INF/applicationContext.xml--></listener><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--contextConfigLocation加载的配置文件(配置了处理器适配器映射器等)--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>



    然后在applicationContext-dao中import进来了service

    2020-06-09 11:21:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud 微服务核心组件集 mica 的设计思路 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-Spring Cloud Alibaba 微服务全家桶体验 立即下载
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载

相关实验场景

更多