스프링 기초

bitna's study note·2022년 6월 29일

스프링

목록 보기
2/54

6월 29일 내용정리

노트북 사망함....내모든 공부자료와 보관해 뒀던 내개인 자료며,,,즁요한건 다 날라갔다....했던 플젝도 다 날라가고....내 멘탈도 날라가고...

1.mybatis
sql을 컨트롤 하는 또다른 방법중 Mapper를 이용

public interface TimeMapper{
@Select("Select sysdate from dual") //dual은 범위 테이블이다.
public String getTime();

}

@RunWith(SpringJUnitClass.class)
@ContextConfiguration("root-context.xml파일 경로")
@Log4j
public class TimeMapperTests{
@ Setter(onMethod_ =@ Autowired) //스프링아 Setter 방식으로 주입해죠
private TimeMapper time;

@Test
public void testGetTime(){
log.info(timeMapper.getclass().getName())
log.info(timeMapper.gettime())
}
}

TimeMapper 인터페이스를 Mapper를 쓰고 있다는걸 스프링에 알려주시 위해서 root-context.xml에 설정을 해야한다.

*Namespace를 넣는 이유
자동완성을 뜨게 할려고함. xml에게 내가 ~~을 쓸거야 하고 알려주는것

2.src/test/java 를 쓰는 이유
서블릿과 jsp는 메인이 없으면 실행이 안되서 코드 테스트를 하고 싶을때 임의로 라도 메인을 만들어서 코드 테스트를 했어야 했는데, src/test/java 있으므로써 메인 없이도 코드테스트가 정상으로 돌아가는지 확인이 가능하다.

3.src/test/resources
xml은 class 나 interface랑 성격이 달라서 src/test/resources에 만들어야 한다.

//xml파일을 만들어서 Mapper를 직접 설정
<?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="org.mybatis.example.BlogMapper">
<mapper namespace="TimeMapper 경로">

<select id="getTime2" resultType="String">
	select sysdate from dual //sql문에는 세미콜론은 뺀다.
</select>

</mapper>



public interface TimeMapper{
@Select("Select sysdate from dual") //mybatis에서만든 애노테이션 @Select를 제공함. dual은 범위 테이블이다.
public String getTime(); //주입한 방식으로 위에 코드가 있다.
public String getTime2(); //xaml에 설정해주고, xml의  id="getTime2" 이부분을 읽어온다.

}

@RunWith(SpringJUnitClass.class)
@ContextConfiguration("root-context.xml파일 경로")
@Log4j
public class TimeMapperTests{
@ Setter(onMethod_ =@ Autowired) //스프링아 Setter 방식으로 주입해죠
private TimeMapper time;

@Test //주입한 방식
public void testGetTime(){
log.info(timeMapper.getclass().getName())
log.info(timeMapper.gettime())
}


@Test //xaml에 설정 방식
public void testGetTime2(){
log.info(timeMapper.gettime2())
}


}

정리하자면 Mapper는 2가지 방법이 있음
(1)root-context.xml에 mybatis소스를 다넣어줌-> 인터페이스에 직접 에노테이션을 달아준다.
(2)root-context.xml에 mybatis소스를 다넣어줌-> 인터페이스에 그냥 메서드만 주고, xml에 설정한 id="getTime2" 로 Mapper에 연결한다.

4.log4 jdbc
작업시 편하게 하기 위함(테이블 형태로 출력됨,초기 개발단계에서 편하게 보기위함)

5.M(Model)V(View)C(Controller)
대부분의 서블릿 기반 프레임워크들이 사용하는 방식
데이터와 처리,화면을 분리하는 방식
웹에서 모델2 방식으로 표현
유지보수를 위하여 세분화 하다보니 MVC가 탄생했다.

6.스프링과 스프링MVC
스프링 프레임워크 core+서브프로젝트 를 블럭처럼 끼워서 사용
별도로 결합해서 사용하기 때문에 설정역시 별도로 처리 가능

7.스프링의 설정 구조

spring Core와 MyBatis 은 root-context.xml에 설정을 써줘야한다. (이래저래 할거시다~~라고...시방서 작성)
spring Core와 MyBatis은 root-context.xml을 참고 한다는 의미

spring MVC같은 경우는 servlet.context.xml을 참고 해야한다.

xml이나 java설정 이용시에 설정분리

8.웹 프로젝트의 구조
applicationContext(일반설정)+MVC설정
을 해준걸 WebApplicationContext 라고 한다.!

같이 연동되는 방식으로 동작하기 때문에 설정을 분리해도 통합해서도 사용가능

root-context.xml에 빈을 설정해주면 스프링이 스캔을 하면서 의존성 관계를 설정해 주고, 대기하고 있다가 요청이 오면 주입해준다.

root-context.xml과 servlet-context.xml에 각각 필요한 내용을 기술 해줘서 먼저 root-context.xml 빈들의 관계 설정후에 DispatcherServlet으로 servlet-context.xml의 빈들의 의존성 관계를 맺어준다.

9.스프링의 MVC의 기본 사상

서블릿 기반이긴 하지만 한 단계 더 추상화된 수준의 개발 지향으로
서블릿 API 없이도 spring MVC를 중간 매개로 직접 서블릿을 관여 하지 않아도 개발이 가능한 수준

10.구체화된 스프링의 MVC

11.Controller
-서블릿 기술에서 시작
-httpServletRequest, httpServletResponse를 거의 사용할 필요 없이 필요한 기능을 구현한다.
이건 누가한다?? 스프링이 해준다. 위 그림의 파란색 네모들이!!!
-다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
-get방식, post방식 등 전송방식에 대한 처리를 어노테이션으로 처리가능
-상속,인터페이스 방식 대신에 어노테이션 만으로도 필요한 설정 가능하다.
-어노테이션의 적절한 사용방법을 익히고, 적절히 사용하는것이 중요하다.

12.Controller의 어노테이션
@Controller
해당 클래스의 인스턴스를 스프링의 빈으로 등록하고 컨트롤러로 사용
로 xml에 다가 알려줌
뭘??컨트롤러에 등록한 인스턴스 빈을...

@RequestMapping
특정한 URI에 대한 처리를 해당 컨트롤러나 메서드에서 처리해줌
예) @RequestMapping(value="/basic",
method={RequestMethod.GET, RequestMethod.Post})

요즘은 @GetMapping 과 @PostMapping으로 써줌
@GetMapping("/basic")

@Controller
@RequestMapping("\sample\*") //스프링이 등록해줘서 빈이 관리하는 샘플컨트롤러가 되었다는 의미
@Log4j
public class SampleController{
	
	@RequestMapping("")
	 public void basic(){
	log.info("내용");
}
	@RequestMapping(value="/basic",
method={RequestMethod.GET, RequestMethod.Post})  //옛날방식

public void basicGet(){
	log.info("내용");
}

@GetMapping("/basic")  //현재 방식
public void basicGet2(){
	log.info("내용");
}
	
}

13.컨트롤러의 파라미터 수집
-스프링 MVC의 컨트롤러는 메서드의 파라미터를 자동으로 수집,변환하는 편리한 기능을 제공
-자바빈 규칙에 맞게 작성되어야 한다.

@Data
public class sample{
private String name;
private int age;
}

  
@Controller
@RequestMapping("\sample\*") //스프링이 등록해줘서 빈이 관리하는 샘플컨트롤러가 되었다는 의미
@Log4j
public class SampleController{

@GetMapping("/ex01")  
public String ex01(sample s){//스프링이 sample 객체를 만듬
log.info(""+s); //그안에 있는 sample 객체의 멤버들  name,age를 불러서 log.info로 찍어줌
return "ex01"; // 리턴하면 views에서 ex01을 찾아줌
}
  
}
  

14.리스트나 배열도 처리 가능하다.

@Controller
@RequestMapping("\sample\*") //스프링이 등록해줘서 빈이 관리하는 샘플컨트롤러가 되었다는 의미
@Log4j
public class SampleController{

@GetMapping("/ex02")  
public String ex02(@RequestParam("name") String name
@RequestParam("age") int age){

log.info("name:"+name);
log.info("age:"+age);

return "ex02";
}

//ex02Array?ids=111&ids=333&ids=555 으로 쿼리스트링 줌
@GetMapping("/ex02Array") 
public String ex02Array(@RequestParam("ids")String[] ids){
log.info("ids=>" +ids );  //주소값 나옴
log.info("ids=>" +Array.toString(ids));
return "ex02Array";
} 

@GetMapping("/ex02List") 
public String ex02List(@RequestParam("ids")ArrayList<String>ids){
log.info("ids=>" +ids);
return "ex02List";
} 

}
@Controller
@RequestMapping("\sample\*") //스프링이 등록해줘서 빈이 관리하는 샘플컨트롤러가 되었다는 의미
@Log4j
public class SampleController{

@GetMapping("/ex02Bean") 
public String ex02Bean(SampleDTOList list){ //SampleDTOList가 없어서 만들어 줘야 한다.
log.info("list=>" +list);
return "ex02Bean"; //ex02Bean?list[0]name=ABC&list[1]name=DEF
				//ex02Bean?list%5B0%5Dname=ABC&list%5B1%5Dname=DEF  ->[]를 16진수로 표현%5B 내용 %5D 
}
}

public class SampleDTOList{
private List<SampleDTO> list;

public SampleDTOlist(){
list=new ArrayList<>();
}

}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글