반응형

📝 @Mapper (Mybatis)

@Mapper // XML (쿼리문 내용)을 여기에 DI 하겠다는 의미
public interface DashBoardMapper {
	
	List<LineChartDto> selectLineChartInfo() throws Exception;
	List<PieChartDto> selectEachCount() throws Exception;
	
}
<?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.company.ocr.mapper.DashBoardMapper">

	<select id="selectLineChartInfo"
		resultType="com.company.ocr.dto.LineChartDto">
			SELECT
				date_format(a.create_date,'%Y-%m-%d') AS cre_date,
				b.txt_type,
				COUNT(b.txt_type) AS type_count
			FROM 
				ocr_search AS a
					INNER JOIN
				ocr_search_data AS b
				ON a.ocr_no = b.ocr_no
			GROUP BY cre_date, b.txt_type
			ORDER BY cre_date
	</select>
	
	
	<select id="selectEachCount"
		resultType="com.company.ocr.dto.PieChartDto">
		SELECT 
			txt_type,
			COUNT(txt_type) AS type_count
		FROM
			ocr_search_data
		GROUP BY 
			txt_type
	</select>

</mapper>

Mybatis에서 제공해주는 어노테이션으로 XML 지시서 내용을 DI를 하겠다는 의미이다.

 

 

📝 @Component

@Component
public class DashBoardServiceImpl implements DashBoardService{

	@Autowired
	private DashBoardMapper dashBoardMapper; // 객체 생성

	@Override
	public List<LineChartDto> selectLineChartInfo() throws Exception {
		return dashBoardMapper.selectLineChartInfo();
	}

	@Override
	public List<PieChartDto> selectEachCount() throws Exception {
		return dashBoardMapper.selectEachCount();
	}

}

해당 클래스를 빈 객체로 생성한다

 

 

 

📝 @Repository

@Repository 
public class DashBoardServiceImpl implements DashBoardService{

	... 동일

}

DAO 관련 클래스이고 해당 클래스를 빈 객체로 생성한다

 

📝 @Service

@Service 
public class DashBoardServiceImpl implements DashBoardService{

	... 동일

}

비즈니스 로직을 수행하는 클래스이고 해당 클래스를 빈 객체로 생성한다

 

📝 @Controller

@Controller 
public class DashBoardServiceImpl implements DashBoardService{

	... 동일

}

 

스프링 MVC Controller이고 해당 클래스를 빈 객체로 생성한다

 

📝 @Autowired, @Qualifer

@Component
public class DashBoardServiceImpl implements DashBoardService{

	// @Qualifier("exam1") // id를 자료형이 아닌 이름으로 정해주고 싶을 때 사용한다.
	@Autowired
	private DashBoardMapper dashBoardMapper; // IoC컨테이너에 있는 같은 타입 Injection

	@Override
	public List<LineChartDto> selectLineChartInfo() throws Exception {
		return dashBoardMapper.selectLineChartInfo();
	}

	@Override
	public List<PieChartDto> selectEachCount() throws Exception {
		return dashBoardMapper.selectEachCount();
	}

}

Autowired

  • IoC 컨테이너에서 만들어진 빈 객체를 해당 필드에 DI한다 

Qualifier

  • 생성된 빈객체 이름으로 주입한다

우선순위 

    1. 타입 매칭 

    2. 타입 매칭 결과가 2개 이상일 경우 필드 명, 파라미터 명으로 빈 이름 매칭

 

 

📝 @Injection

@Component // Service 내용이 들어있다는 의미
public class DashBoardServiceImpl implements DashBoardService{

	@Inject
	private DashBoardMapper dashBoardMapper; // 객체 생성

	@Override
	public List<LineChartDto> selectLineChartInfo() throws Exception {
		return dashBoardMapper.selectLineChartInfo();
	}

	@Override
	public List<PieChartDto> selectEachCount() throws Exception {
		return dashBoardMapper.selectEachCount();
	}

}

 

Autowired 어노테이션과 유사

 

📝 @Resource

@Component // Service 내용이 들어있다는 의미
public class DashBoardServiceImpl implements DashBoardService{

	// @Resource(name = "propertiesService")
	@Resource
	private DashBoardMapper dashBoardMapper; // 객체 생성

	@Override
	public List<LineChartDto> selectLineChartInfo() throws Exception {
		return dashBoardMapper.selectLineChartInfo();
	}

	@Override
	public List<PieChartDto> selectEachCount() throws Exception {
		return dashBoardMapper.selectEachCount();
	}

}
/**  
Resource 사용하기 위해 필요한 라이브러리
    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
    </dependency>
**/

Autowired 어노테이션과 유사하다. (차이점 : Autowired와 다르게 이름으로 연결해준다.(필드 / 메서드에만 적용 가능))

 

📝 @Value

@Component
public class NewlecExam implements Exam {

	@Value("20")
	int kor;
	@Value("20") // 초기값 설정
	int math;
	
	
	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

}

객체를 생성할 때(Component) 기본 값을 주입한다.

 

📝 @Component, @Configuration, @Bean

// @ComponentScan("di1.ui") // <context:component-scan base-package="di1.ui"/> 을 어노테이션 방식으로 변경
@ComponentScan({"di1.ui","di1"}) // scan 범위가 두개 이상일 경우 
@Configuration // 설정 파일이라는 뜻
public class NewlecDIConfig {
	
	@Bean // 빈 객체를 선언해 IoC 컨테이너에 담아라 라는 어노테이션이다.
	public Exam exam() { // exam → 함수명이 아니라 bean 객체의 id 이름을 의미한다.
		return new NewlecExam();
	}
	
	@Bean // 빈 객체를 선언해 IoC 컨테이너에 담아라 라는 어노테이션이다.
	public ExamConsole console() { // console → 함수명이 아니라 bean 객체의 id 이름을 의미한다.
		return new InlineExamConsole();
	}
}

ComponentScan

  • 해당 경로 하위에 있는 @Componet를 찾아 Bean객체를 생성해 IoC컨테이너에 넣는다

 

Configuration

  • 해당 클래스가 xml 지시서라는 의미이다. (설정 파일)

 

Bean

  • 빈 객체를 생성하라는 의미이다. (Bean 이름 설정 안 할시 함수명으로 생성)

 

📝 @GetMapping  옵션

// 특정 헤더 조건 매핑

@GetMapping(value = "/mapping-header", headers = "mode=debug")
  public String mappingHeader() {
      log.info("mappingHeader");
      return "ok";
}

// **미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume**

@PostMapping(value = "/mapping-consume", consumes = "application/json")
  public String mappingConsumes() {
      log.info("mappingConsumes");
      return "ok";
}

// 미디어 타입 조건 매핑 - HTTP 요청 Accept, produce
@PostMapping(value = "/mapping-produce", produces = "text/html")
  public String mappingProduces() {
      log.info("mappingProduces");
      return "ok";
}

 

📝 @PostMapping, @PatchMapping, @DeleteMapping

// 일반적으로 회원 목록 조회
@GetMapping(value = "/users")
public User getUsers(){
    ....
}

// 일반적으로 회원 등록
@PostMapping(value = "/user")
public User signupUser(){
    ....
}

// 일반적으로 회원 수정
@PatchMapping(value = "/user")
public User updateUser(){
    ....
}

// 일반적으로 회원 삭데
@DeleteMapping(value = "/user")
public User deleteUser(){
    ....
}

 

 

 

 

반응형