본문 바로가기

Spring Boot

송금 출금 앱

https://github.com/Moonseonhyeon/SpringBoot-blog/tree/f

 

홍이 요청 put:/send

장이 요청 put:/withdraw

 

톰켓(데몬프로세스가 돌고있다.)

배포서술자

Dispatcher Servlet : 스캔해서 @Controller다 띄움.

  홍 controller생성 : GetMapping에서 /send - 송금 호출

  장 controller생성 : GetMapping에서 /withdraw -인출 호출

클래스 Service

SQLSession(DataSource(DBCP기술-수영장기술)+MyBatis(Persistanc db에 접근해서 rs결과를 객체로)

repository

  - db의 데이터를 객채화 해서 들고 있는 아이다. 예(json이면 자바 객체로)

 

 

 

 

DB

Service (메모리에 시작 시 미리 메모리에 떠있다.) : 트렌잭션을 관리한다. (Controller의 일을 위임)

  (송금) - 여러 번의 트랜젝션을 들고 있다. 1트랜젝션 update 2 트랜젝션 update

  (인출) - 

SQLSession(DataSource(DBCP기술-수영장기술)+MyBatis(Persistanc db에 접근해서 rs결과를 객체로))

repository

  - db의 데이터를 객채화 해서 들고 있는 아이다. 예) json이면 자바객체로

 

DataSource-DBCP,Mybatis(rs 결과를 오브젝트로, 컬렉션)

config로 SQLSession을 만드는것이다.

 

config로 SQLSession을 만드는것이다. Service - 트랜잭션을 관리함
송금()-1트랜잭션 2트랜잭션 - 2개를 묶어서 트랜잭션이라고 할 수 있음

 


위 그림을 이해하기 위해서 git을 이용해 branch를 만들어서 연습한다.


controller 패키지 생성-> AccountController.java 생성

더보기
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AccountController {

	@PutMapping("/send")
	public @ResponseBody String send() {
		return "<h1> 송금이 완료되었습니다.</h1>";
	}

	@PutMapping("/withdraw")
	public @ResponseBody String withdraw() {
		return "<h1>인출이 완료되었습니다.</h1>";
	}
}

MySQL에 이용할 데이터 추가

commit 때문에 고생하지 말자.


사용할 model 패키지, Account.java 생성

더보기
package com.example.demo.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Account {
	private int id;
	private String username;
	private String accountNumber;
	private int money;
}

 

MySQL에서 만든 테이블과 똑같이 model을 만든다.


repository 패키지에 AccountRepository를 만든다.

더보기
package com.example.demo.repository;

import java.util.List;

import com.example.demo.model.Account;

public interface AccountRepository {
	public void update(Account account);

	public List<Account> findAll();

	public Account findByAccountNumber(String accountNumber);
}

 

이 repository를 만들고 나서 mapper로 꼭 연결해야한다.


mapper에서 account.xml을 생성하고

AccountRepository를 연결한다.

 

여기서 사용할 쿼리문들은 MyBatis의 문서를 보고 만든다.

https://mybatis.org/mybatis-3/ko/sqlmap-xml.html


service를 만들기 위해서는 dto들이 필요하다.

SendRequestDto

WithDrawRequestDto


service 패키지에 AccountService.java를 생성

 

스프링이 들고 있는 트랜잭션
밑에 둘중에 하나가 실패하면 rollback, 둘다 성공하면 commit

 

노란색 외부 데이터

빨간색 Persistence


Controller에 만들었던 Service 추가

 


Postman으로 테스트

테이블에 들어 있는 값 findAll

 


송금

 

2만원을 송금하고나니까 홍길동이 2만원 줄고 장보고가 2만원 늘어난다.

 


인출

장보고의 돈이 만원 줄었다.

 


이미 메모리에 떠있는 것들과 아닌것들을 구분해야한다.

 

 

루트 컨텍스트 xml은 메모리에 한번만 = bean으로 되는애들만 

서블릿 컨텍스트에는 컨트롤러같이 계속 뜨는애들만

 

->어노테이션 이름만 잘지키면 알아서 해준다.

'Spring Boot' 카테고리의 다른 글

InterceptorHandler  (0) 2020.07.24
spring boot - blog - 회원가입  (0) 2020.07.20
sts3  (0) 2020.07.17
blog만들기  (0) 2020.07.17
DB연결하기, MyBatis 프레임워크  (0) 2020.07.13