ssamdiv
153
2019-08-14 13:25:55
0
39

The injection point has the following annotations 문제로 문의드립니다.



Field testMapper in com.example.demo.service.TestService required a bean of type 'com.example.demo.mapper.TestMapper' that could not be found.

The injection point has the following annotations:

        - @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'com.example.demo.mapper.TestMapper' in your configuration.


gradle bootRun 실행 시 위와 같은 오류가 뜹니다.
구글링 한 후 해결책들을 포함하여 실행하면 오류없이 실행되어 포트가 열리나
들어갈 시 404에러가 뜹니다. 

구글링 시 메인 클래스에서 어노테이션을 추가하면 된다고 하는데 추가하여 실행 시 실행은 되나 화이트라벨 페이지만 계속 뜹니다...

vscode로 테스트 중이며, 이 부분이 해결이 안 돼서 며칠 째 진도를 못 나가고 있습니다...ㅜㅜ
의존성에서 jsp 부분을 추가한 것은 이후에 jsp 파일 연동하여서 진행 할 예정이기 때문입니다.

해결 방법을 아시는 분 계시면 꼭 좀 도와주시면 감사하겠습니다.
바쁘신 와중에 읽어주셔서 감사드립니다.


의존성 추가 한 부분

    compile 'org.springframework.boot:spring-boot-starter-jdbc'
    compile 'org.mariadb.jdbc:mariadb-java-client'
    compile 'org.mybatis:mybatis:3.5.2'
    compile 'org.mybatis:mybatis-spring:1.2.3'
    compile 'javax.servlet:jstl'
    compile 'org.apache.tomcat.embed:tomcat-embed-jasper'


프로퍼티


spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://11.11.11.11:1111/A?useSSL=false
spring.datasource.username= a
spring.datasource.password= b


쿼리문

<?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.example.demo.mapper.TestMapper"> <!-- mapper interface에 대한 풀패키지 경로를 알아 두어야 하며, 쿼리문에 대한 id값이 향후 함수명과 일치해야 함-->
<select id="getAll" resultType="com.example.demo.dto.Test">
SELECT * FROM A
</select>
</mapper>

실행을 위한 메인 클래스

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {



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

}


DataBaseConfig

package com.example.demo;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration /* Database에 대한 접속 정보를 나타내고 있음. */
@MapperScan(basePackages = "com.example.demo.mapper") /* 설정된 패키지에서 mapper를 스캔하기 위함 */
@EnableTransactionManagement /* TransactionManager를 적용할 것인지에 대해 설정하는 annotation */

public class DatabaseConfig {

@Bean /* DataSource를 parameter로 받아서 .sqlSessionFactory를 생성*/
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); /* 객체를 생성하여서 SessionTemplate 인자로 넘겨주기 위하여 사용*/
sessionFactory.setDataSource(dataSource); /* dataSource를 설정 */
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); /* 실제로 쿼리문이 존재하는 .xml 파일 위치를 지정해주는 부분 */
sessionFactory.setMapperLocations(resolver.getResources("classpath:mybatis/mapper/*.xml")); /* 폴더가 없거나, xml 파일이 없거나, 문법 오류가 없어야 정상적으로 생성 */
return sessionFactory.getObject();
}

@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception { /* 실제 DB에 사용되는 템플릿을 생성하여 반환 */
final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory); /* 실제 db에 사용되는 객체를 생성하여 반환 */
return sqlSessionTemplate;
}
}


TestService

package com.example.demo.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.dto.Test;
import com.example.demo.mapper.TestMapper;

@Service
public class TestService {

@Autowired
TestMapper testMapper;

public List<Test> getAll() throws Exception { /* TestMapper interface를 autowired 걸고, 그 안의 getAll 함수를 call */
return testMapper.getAll();
}
}


TestMapper

package com.example.demo.mapper;

import java.util.List;

import com.example.demo.dto.Test;

public interface TestMapper {
public List<Test> getAll() throws Exception; /*쿼리 아이디와 함수명이 일치해야 함 */
}


Test

package com.example.demo.dto;

public class Test {
private String lead_cd;
private String leadsrc_fg;

public String getLead_cd() {
return lead_cd;
}

public void setLead_cd(String lead_cd) {
this.lead_cd = lead_cd;
}

public String getLeadsrc_fg() {
return leadsrc_fg;
}

public void setLeadsrc_fg(String leadsrc_fg) {
this.leadsrc_fg = leadsrc_fg;
}
}


TestController

package com.example.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.dto.Test;
import com.example.demo.service.TestService;

@Controller
public class TestController { /* DB조회를 요청할 서비스 */

@Autowired
TestService testService; /* Servicef를 autowired를 걸고 call한 결과를 리턴 */

@RequestMapping("/query")
public @ResponseBody List<Test> query() throws Exception {
return testService.getAll(); /* 화면/jsp를 리턴하는 것이 아니라면 responseBody를 앞에 붙여야 한다. */
}
}

0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.