Spring setting2

donnikim·2022년 11월 13일

Spring

목록 보기
6/7

의존성 주입

  • @componet:객체를 만들어줌
  • @controller : 컨트롤 역할을 하며 객체를 만들어줌
  • @RequestMapping은 handlerMapping을 의미함

Lombok 롬복

  • 롬복은 라이브러리이다 (라이브러리는 항상 pom.xml)
  • maven repository에서 project lombok 선택 후 많이 사용한 롬복 클릭
  • maven 코드 복사후 붙여넣기
  • 롬복이 STS에 깔려있으면 경로찾아서 파일 선택
  • 위의 알림창이뜨면 specify location에서 sts위치 선택한 후 설치 누르기!!

  • 롬복설치 완료되면 STS끄고 다시 실행해야 깔림!

  • 이제 model.vo 내용은 어노테이션으로 생성할 꺼임

  • @NoArgsConstructor :기본생성자

  • @AllArgsConstructor :

  • @Getter

  • @Setter

  • @ToString

Controller를 만들었으니 뷰리졸브를 만들어야 겠지?

  • 1) 회원관련 컨트롤러를 만들었으니 뷰리졸브를 만들기 위해 xml파일로가서 member와 관련된 servlet을 만들어 줌!
    ex)서블릿 이름 서블릿 경로, 멤버와 관련된 서블릿 url.me인지 .bo인지등등
  • 2) Spring에서 appServlet에서 Sptring Bean Definition file생성
    member-context.xml 후 넥스트
  • 3) 설정은 해당 xml에서 어떤걸 가지고 있을 지 설정
    context클릭 후 버전은 항상 최신 버전!!
  • 4) 컨트롤 서블릿이므로 MVC 설정도 헤주어야 함!! context.xml파일은 소스와 Namespaces에 있음 이곳에 mvc체크 해주어도 됨!!

파라미터 전송 방식

/**** 파라미터 전송 받기****/

  • 1.JSP/Servlet 방식 HttpServletRequest이용

@RequestMapping(value="login.me", method=RequestMethod.POST)
public String login(HttpServletRequest request) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");

}
  • 2.@RequestParam이용
    @RequestMapping(value="login.me", method=RequestMethod.POST)
    public String login(@RequestParam(value="id", defaultValue="hello") String id, @RequestParam("pwd") String pwd,
    @RequestParam(value="test", required=false) String test) {
    		//value => view에서 받아올 파라미터 이름 value는 디폴트 속성이기 때문에 생략 가능!!
    		//defaultValu => 들어오는 값이 없을 때 설정한 값으로 채워 넣는다. 값이 있으면 값으로 나옴
    	
    		//view에 없는 requestParam value ="test"를 넣어보자
    		//400error 내가 요청하지 않은 파라미터가 들어가 있다.
    		//Required request parameter 'test' for method parameter type String is not present
    		//하지만 test파라미터는 지금당장은 필요하지 않지만 나중에(페이징처리) 필요해!!!
    		//value="test" 옆에 required=fales를 넣어 줌으로 써 꼭 필요하지 않은 속성으로 인식 시켜 준다.
    	
    		System.out.println("id2:"+id);
    		System.out.println("pwd2:"+pwd);
    		System.out.println("test : "+test);
    	

// //RequestParam은 넘어온 값이 int라면 굳이 파싱 할 필요 없는 장점이 있다.!!
//
return null;
// }

// 페이징 처음에는 커런트 페이지가 없지만 페이지를 누를시 커런트페이지가 생김!!

// 3. @RequestParam 생략

// @RequestMapping(value="login.me", method=RequestMethod.POST)
// public String login(String id, String pwd) {
//
// //내가 view에서 넘기는 파라미터 name과 컨트롤러에서 받는 파라미터명이 같으면 requestParam 생략가능
// //생략해도 매핑이됨!! 파라미터 명만 신경써주면 굉장히 편한데.......
// //사실 선생님은 3번방법 비추!!!!!!!!
// //습관이 들면 회사가서도 어노테이션을 생략하게 될건데 회바회이므로 알아서 하기
// //어노테이션을 써야 가독성도 있고, 어떻게 받아오는지 알수 있다.
//
// System.out.println("id3:"+id);
// System.out.println("pwd3:"+pwd);
//
// return null;
// }

// 4.@ModelAttribute 이용

// @RequestMapping(value="login.me", method=RequestMethod.POST)
// public String login(@ModelAttribute Member m) {
//
// System.out.println("id4:"+m.getId());
// System.out.println("pwd4:"+m.getPwd());
//
// return null;
// }
//5.@modelAttribtute생략
// @RequestMapping(value="login.me", method=RequestMethod.POST)
// public String login(Member m) {
//
//// System.out.println("id5:"+m.getId());
//// System.out.println("pwd5:"+m.getPwd());
//
// //결합도가 높다! 확인하기
//
// //1. 매 요청마다 새로운 객체가 만들어짐
// //2. 클래스 명을 변경할 때 마다 직접적인 영향을 받음
//
//
//
// Member loginUser =mService.login(m);
// //매번 서비스 객체 생성하지 말고 필드에 private로 서비스 객체를 넣어버리자
//
// return null;
// }

@Autowired (의존성 주입-프레임워크야 너가 객체 만들어!)

  • 우리는 컨트롤단에서 new를 이용하여 서비스 객체를 만들어 이동하였다. 이제는 이걸 프레임워크에게 주입시켜야 한다!!
  • 필드 쪽에 private MemberService mService; 생성 후 @Autowired 설정하기

interface

  • MemberService(부모) MemberServiceImpl(자식) 관계를 두어 결합 관계를 낮춘다!!

  • 원래는 class를 넘어갈때 마다 controller->(interface)->service->(interface)->dao로 넘어가야 한다
  • 수업은 service에만 interface로 만들고 dao는 interface 건너 뛴다.

DB연결

  • 큰 resources에 있는 root-context.xml 클릭하여 DataSource 등록!!

<!-- Root Context: defines shared resources visible to all other web components -->
	<!-- DataSource 등록 -->
	<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource" destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
		<property name="username" value="MOCO"/>
		<property name="password" value="MOCO"/>
	</bean>
	
	<!-- SqlSessionTemplate 빈 등 -->
		<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="configLocation" value="classpath:mybatis-config.xml"></property>
			<property name="dataSource" ref="dataSource"/>
		</bean>
		
		<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
			<constructor-arg ref="sqlSession"/>
		</bean>
		<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<property name="dataSource" ref="dataSource"/>
		</bean>
		
  • 혹시 빨간줄이 뜬다면? lib가 없기 때문에 pom.xml에 라이브러리 추가하기!!

  • 마이바티스 라이브러리 설치했니?

  • 그러면 스프링과 마이바티스 연결할수 있는 커넥션도 따로 받아야 함!!

  • mybatis와 mybatis spring 둘다 받아야 함!!

  • db연결과 관련된 pom.xml

    이클립스에서 마이바티스 등록을 제공한다.

    • preference에서 xml Catalog클릭

    • user specified entres 클릭 후 add 클릭

      카탈로그 등록



location
http://mybatis.org/dtd/mybatis-3-config.dtd

key
-//mybatis.org//DTD Config 3.0//EN

mapper 등록

카탈로그 처럼 반복 해서 추가해준다.

location
http://mybatis.org/dtd/mybatis-3-mapper.dtd

key
-//mybatis.org//DTD Mapper 3.0//EN

mybatis-config.xml 만들기

  • 큰 resource에 mybatis-config.xml 이름을 적고 넥스트



    Mapper 만들기

  • 큰 resource부분에 folder만들기 mapper

  • 폴더 안에 member-mapper.xml

  • 넥스트 클릭 후

  • DTD 클릭 후 넥스트

  • mapper클릭 후 에러 나는지 확인 하고 피니쉬

    XML 등록


    context-param 꼭 넣어야 됨!!

0개의 댓글