반응형
📝 @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(){
....
}
반응형
'[Java] > [Spring]' 카테고리의 다른 글
[Spring] Log4j2(로그포제이) 사용방법 (0) | 2022.11.06 |
---|---|
[Spring] Postman 설치 및 사용법 (0) | 2022.09.27 |
[Spring] 서블릿필터 (Servlet Filter) (0) | 2022.06.12 |
[Spring] Tiles(타일즈) (0) | 2021.10.24 |
[Spring] xmlns 의미, root-context.xml, servlet-context.xml, 폐쇄망 xsd 읽기 (0) | 2021.10.24 |