https://github.com/iluvdadong/Java-Spring-Project
MyBatis
1. 마이바티스 + 스프링을 쓰려면 pom.xml에 아래의 dependencies 추가
* 스프링과 마이바티스를 같이 쓸 수 있음
* 마이바티스는 동양권에서 많이 씀
<!-- mybatis, spring과 연동하기 위한 mybatis-spring을 추가한다. package명을 보면 spring이 제공하는 것이 아니라 mybatis쪽에서 spring을 지원하기 위해 제공하는 것을 알 수 있다.
spring쪽에서는 mybatis와 유사한 spring jdbc 프로젝트를 가지고 있다. -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
* 한단계 더 나가려면 하이버네이트 같은 것도 씀. => 스타트업 같은데서 잘 씀
2. ApplicationConfig에서 어플이케이션에 대한 설정을 한다.
@Configuration 내가 컨피규레이션이에요!
@import 마이바티스~~!
3. 마이바티스를 쓰겠다는 것은 DAO를 쓰겠다는 것
4. 트랜잭션 사용하려면 트랜잭션 매니저를 설정해놓아야 함
5. H2디비를 사용하려고 한다~~~ 쟤네도 jar(java class)이기 때문에 넣어 줌
5. MyBatisConfig에서 @Mapper정의~
6. BoadMapper.java
SQLSessionFactoryBean이 중요!
SqlSessionTemplate은 그냥 템플릿 임. => 근데 마이바티스3은 알아서 해줌. => 2까지는 템플릿 메소드를 내가 직접 호출해서 해야하는데 3에서는 그냥 인터페이스만 정의하면 알아서 가서 객체를 만들어서 사용해 줌
=> DAO에 구현체를 만든게 없음. 인터페이스만 만듬. => 구현체는 MyBatis가 만들어 줌
USersMApper의 메소드 이름이랑 UsersMapper.xml의 이름과 동일 해야함!!
UsersMapper.java의 이름과, UsersMapper.xml의 id, 네임스페이스 이름이 맞아야 한다 ex. getUsers
데이터베이스에서 user_id 하지만 DTO객체에는 userId 이기 때문에 값을 못채움!
그래서 XML파일에 resultmap이라는 것을 선언해서 쓰게 함
Alias 사용법
MyBatis 2에는 아래의 경우 오류가 날 수 있음... (버전이 낮은 경우)
resultmap에서 선언해준 것들이랑
아래의 select sql구문에 사용하는 컬럼들이랑 정확히 일치해야함 (수가)
* MyBatis를 사용하면 db와 분리됨..쉬움.. 아래처럼 코드 몇 줄안에 해결 가능~~!
JUnit
Jnunit이 스프링이랑 같이 붙어주면, 아래 코드만 추가해도 테스트를 main에서 분리해서 편리하게 테스트 가능
테스트 케이스의 장점은
assert메소드를 사용할 수 있다는 것!
=> assert메소드의 장점은 알아서 맞는지 테스트 해주는 것 print는 그냥 찍어본 것,.실제로는 사용X
DAO란?
이 것이 DAO! ex BoardMapper.java
레이어
DL 데이터 레이어 - DAO(~~Mapper) <-이곳에서 데이터베이스에 넣거나 삭제하거나 그런 것만 구현
----------------------------------------- ~.DAO (MVC 설정 X, 어플리케이션 설정만 함)
BL 비지니스 레이어 <-실제 로직은 여기서 구현 (Service가 데이터 레이어인 DAO와 소통)
----------------------------------------- ~.Service 라는 객체 만듬 얘가 DAO를 사용함
|
Interface (결합도를 떨어트리는 용) - !뒷쪽이 바껴도 앞단이 영향을 안받음!
|
PL 프리젠테이션 레이어 (Controller 둠)
-----------------------------------------
* BL DL 부분은 다른데서 사용할 수도 있기 때문에 applicationconfig에 따로 줬음
* 모든 레이어 단에서 SPRING 사용중
* PL 에서는 Spring MVC 사용 중 => SpringMVC Config자체에서 설정 함
* BL (Service 레이어 구현 중)
Spring
=> 우리가 만든 객체에 스프링에게 알려주는게 중요!
=> 이 객체를 스프링에게 알려주는 일을 함
annotation(편한 방법) or xml에 bean 등록 java config에 등록 => 야~~이거 등록해줘!! 스프링 사용해야하니깐!!
스프링의 트랜재션 처리
입금 출금 중 둘중 하나라도 안되면 롤백 시키는 기능
@Transactional 만 붙이면 됨
Controller
=> 아래처럼 annotation 해줘야 빈 생성 가능
아래를 입력하면 알아서 url이 ..users로 됨
@RequestMapping(path="/users")
유저 목록 보여주는 애 부터 만들어봅세
UserController.java
package examples.springmvc.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import examples.springmvc.dto.User;
import examples.springmvc.service.UserService;
@Controller
@RequestMapping(path="/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping //getmapping 꼭 시켜줘야함
public String getUsers() { //이 요청이 들어가면
List<User> users = userService.getUsers();
return "users/list"; //이 jsp를 보여줄거야
//Jsp화면이 들어갈 부분
}
}
포워딩이란
화면에 뿌려주는 부분
client가 요청하면
서버사이드에서
dispatcherservlet이 받음 ~ 얘까 => controller에
실제 뷰는 jsp한테 니가 응답해! 하고 보냄.
이것을 바로 포워딩이라고 함 (이걸 해주세요~라고 요청받았지만 다른 누군가에게 넘기는 것)
포워딩에 되는 동안 계속 유지되는게 request...
request는 한번 응답이 끝나면 사라짐!
그래서 쿠키랑세션을 이용해야함!
리다이렉트
https://selectwiggle.tistory.com/25
리퀘스트 스코프 => 요청이들어와서 끝날때까지
세션 스코프는 => 요청이 계속 들어와도 살아있다. 사용자 별로 있음
어플리케이션 스코프 => 어플리케이션의 하나 => 서버가 떳을때~~
https://victorydntmd.tistory.com/155
Spring은 POJO기반!
가급적이면 다른라이브러리에 종속되지 않게 목적을 가진 것
Http리퀘스트에 직접 접근이 아니라, 스프링의 모델에 접근하면, 스프링이 대신해줌!
점점 추세는 프론트단에서 다 하고
백엔드는 api, 데이터만 전송
=>
localhost:8080/users - 회원목록
localhost:8080/users/joinform - 회원가입화면
BoardService 구현
- board 리스트
BoardController
localhost:8080/boards - 게시물 목록이 보이도록 추가
+ 추가 복습
클아이언트 http 에서는 쿠키와 세션을 이용하여서 사용자의 정보를 기억한다.
- 쿠키: 클라이언트들이 유지해야 하는 정보를 유지해야하는 것 - 서버가 하나씩 쿠키를 구워서 증표를 클라이언트에 보냄
=> 쿠키는 언제든지 악의적으로 정보를 갈취할 수 있었다.
- 세션: 그래서 중요한 정보를 세션에 맡김 (세션도 내부적으로 쿠키를 씀. 세션을 발급할 떄 세션 id를 쿠키로 구워서 브라우저에 응답해줘). 그럼 브라우저가 세션 id를 가지고 있고, 각기 이것이 다르기 때문에, 요청이들어오면 서버는 이 id를 찾아서 응답해줌
* 요청할 때 request 객체에는 항상 쿠키에대한 정보도 같이 들어옴
* 상태: 브라우저 버전, 언어, 프로토콜 등 많은 정보들을 가져오는 것임
* 세션이 오면 항상 쿠키를 뒤짐. 쿠키가 있었으면 그걸 그대로 함. 없었으면 다시 생성해줌
리퀘스트 객체는 응답이 받을때까지만 유지되고 없어지기 때문에, 유지하고 싶은 정보가 있으면 세션에 저장한다.
JSP / JSTL 라이브러리
http://theeye.pe.kr/archives/1563
쿠키 없애는 방법
쿠키는 똑같은 쿠키를 만들어서 브라우저에 보내고 쿠키의 유지시간 0으로 주면 삭제된다.
새로운 쿠키로 변경되는 성질 이용! 쿠키 이름은 똑같은 것 1개만 가질 수 있기 때문.
세션은 서버가 가지고 있어서 java코드로 없앨 수 있음
세션의 유지시간은 default는 -2 값으로 브라우저가 열려있는 동안 유지됨, 그러나 시간을 따로주면 브라우저 꺼져도 계속 지속됨
'[WEB]' 카테고리의 다른 글
[TIL #1] Web Service / REST / XML / Open API (0) | 2020.04.10 |
---|---|
[spring] 스프링 기초부터 실습까지 (0) | 2020.01.16 |
[Spring] JUnit (0) | 2020.01.14 |
[Spring] 스프링 프레임워크란 / MyBatis (0) | 2020.01.14 |
[Spring] Apache Maven 설치 / 프로젝트 생성 (0) | 2020.01.13 |