問題描述:
建立了一個簡單的Springboot項目,對Oracle數據庫進行訪問,查詢數據,返回JSON。
代碼如下:
Application.java
package com.bocom;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*
* @since 2017年12月27日下午2:18:18
* @author shanming.yang
*
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
XiaomingController.java
package com.bocom.controller;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.bocom.service.XiaomingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
/**
*
* @since 2017年12月27日下午2:28:16
* @author shanming.yang
*
*/
@Api(value = "XiaomingController",description = "測試API")
@RestController
public class XiaomingController {
@Autowired
private XiaomingService xiaomingService;
@RequestMapping(value="/abc/{jqbh}",method = RequestMethod.GET)
public Map<String,Object> querySth(@PathVariable("jqbh") String jqbh){
return xiaomingService.getJQById(jqbh);
}
}
XiaomingService.java
package com.bocom.service;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bocom.dao.XiaomingDao;
/**
*
* @since 2017年12月27日下午3:43:21
* @author shanming.yang
*
*/
@Service
public class XiaomingService {
@Autowired
private XiaomingDao xiaomingDao;
/**
* 根據id獲取警情詳細信息
* @param id 警情id
*/
public Map<String,Object> getJQById(String jqbh) {
Map<String,Object> map = xiaomingDao.getJQById(jqbh);
return map;
}
}
XiaomingDao.javapackage com.bocom.dao;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
/**
*
* @since 2017年12月27日下午3:48:10
* @author shanming.yang
*
*/
@Mapper
public interface XiaomingDao {
/**
* 根據id獲取警情詳細信息
* @param id 警情id
*/
public Map<String,Object> getJQById(String jqbh);
}
XiaomingDao.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.bocom.dao.XiaomingDao">
<!-- 根據id獲取警情詳細信息 -->
<select id="getJQById" resultType="hashMap">
SELECT *
FROM t_jqxx
<![CDATA[
WHERE id = #{jqbh,jdbcType=VARCHAR} AND ROWNUM<2
]]>
</select>
</mapper>
項目結構:
項目運行時報錯:
***************************
APPLICATION FAILED TO START
***************************
Description:
Field xiaomingDao in com.bocom.service.XiaomingService required a bean of type 'com.bocom.dao.XiaomingDao' that could not be found.
Action:
Consider defining a bean of type 'com.bocom.dao.XiaomingDao' in your configuration.
解決方式:
注意上面XiaomingDao.java代碼中的import org.apache.ibatis.annotations.Mapper;
就是它,引錯包了,爲什麼會引錯包呢,在編寫DAO這個文件的時候我沒有在POM中引用
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
所以我在寫DAO時,使用Ctrl+shift+o,自動引入了包:org.mapstruct.Mapper,不知道是什麼鬼包,但肯定不是我想要的,所以啓動程序時就報錯了。
所以,建議在使用前把需要用到的包全都在pom.xml中依賴好,再進行開發,否則出現這樣的問題,很難排查。
雖然問題解決了,但覺得這個問題實在太簡單了,結果花了半天時間去排查問題,實在很SB,踩過的坑,感謝同事的幫助,一擊即中,直中要害。