Open snaag opened 1 year ago
불러올 때 코드를 통해 동적으로 데이터 넣어줄 수 있음
@Controller
public class MainController {
@GetMapping("list")
public String list(Model model) {
model.addAttribute("date", getDate());
return "list";
}
private String getDate() {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분");
LocalDateTime now = LocalDateTime.now();
return dtf.format(now);
}
@GetMapping("create")
public String create(Model model) {
return "create";
}
@GetMapping("update")
public String update(Model model) {
return "update";
}
}
public class Article {
private String name;
private String title;
private String context;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
비즈니스 로직보다 기계적임
public interface ArticleRepository {
// C
Long create(Article article);
// R _ all
Map<Long, Article> loadAll();
// R _ one
Optional<Article> loadOne(Long id);
// U
Long updateOne(Long id, Article article);
// D _ all
void deleteAll();
// D _ one
void deleteOne(Long id);
}
public class MemoryArticleRepository implements ArticleRepository {
private static Map<Long, Article> store = new HashMap<>();
private static Long sequence = 0L;
@Override
public Long create(Article article) {
updateSequence();
store.put(sequence, article);
return sequence;
}
public void updateSequence() {
sequence++;
}
@Override
public Map<Long, Article> loadAll() {
return store;
}
@Override
public Optional<Article> loadOne(Long id) {
// https://mangkyu.tistory.com/70
// Optional<Article> optional = Optional.ofNullable(store.get(id));
return Optional.ofNullable(store.get(id));
}
@Override
public Long updateOne(Long id, Article article) {
store.put(id, article);
return id;
}
@Override
public void deleteAll() {
store.clear();
}
@Override
public void deleteOne(Long id) {
store.remove(id);
}
}
class MemoryArticleRepositoryTest {
public MemoryArticleRepository memoryArticleRepository = new MemoryArticleRepository();
@AfterEach
void afterEach() {
memoryArticleRepository.deleteAll();
}
@Test
void create() {
// given 이러한 상황이 주어져서
Article articleCreate1 = new Article();
articleCreate1.setName("sang-a");
articleCreate1.setTitle("spring");
articleCreate1.setContext("demo 만들어보기");
Article articleCreate2 = new Article();
articleCreate2.setName("LEaps");
articleCreate2.setTitle("C#");
articleCreate2.setContext("unity 로 게임 만들어보기");
// when 이걸 실행했을때
Long id = memoryArticleRepository.create(articleCreate1);
Article articleGet = memoryArticleRepository.loadOne(id).get();
// then 이런 결과가 나와야함
assertThat(articleCreate2).isNotEqualTo(articleGet);
assertThat(articleCreate1).isEqualTo(articleGet);
}
@Test
void loadAll() {
// given 이러한 상황이 주어져서
Article articleCreate1 = new Article();
articleCreate1.setName("sang-a");
articleCreate1.setTitle("spring");
articleCreate1.setContext("demo 만들어보기");
Article articleCreate2 = new Article();
articleCreate2.setName("LEaps");
articleCreate2.setTitle("C#");
articleCreate2.setContext("unity 로 게임 만들어보기");
memoryArticleRepository.create(articleCreate1);
memoryArticleRepository.create(articleCreate2);
// when 이걸 실행했을때
Map<Long, Article> loadStore = memoryArticleRepository.loadAll();
Integer size = loadStore.size();
// then 이런 결과가 나와야함
assertThat(size).isEqualTo(2);
assertThat(size).isNotEqualTo(3);
}
@Test
void loadOne() {
// given 이러한 상황이 주어져서
Article articleCreate1 = new Article();
articleCreate1.setName("sang-a");
articleCreate1.setTitle("spring");
articleCreate1.setContext("demo 만들어보기");
Article articleCreate2 = new Article();
articleCreate2.setName("LEaps");
articleCreate2.setTitle("C#");
articleCreate2.setContext("unity 로 게임 만들어보기");
memoryArticleRepository.create(articleCreate1);
memoryArticleRepository.create(articleCreate2);
// when 이걸 실행했을때
Article articleGet1 = memoryArticleRepository.loadOne(1L).get();
Article articleGet2 = memoryArticleRepository.loadOne(2L).get();
// then 이런 결과가 나와야함
assertThat(articleCreate1).isEqualTo(articleGet1);
assertThat(articleCreate2).isEqualTo(articleGet2);
assertThat(articleCreate1).isNotEqualTo(articleGet2);
}
@Test
void updateOne() {
// given 이러한 상황이 주어져서
Article article = new Article();
article.setName("sang-a");
article.setTitle("spring");
article.setContext("demo 만들어보기");
Long id = memoryArticleRepository.create(article);
// when 이걸 실행했을때
Article articleUpdate = new Article();
articleUpdate.setName("sang-a (수정됨)");
articleUpdate.setTitle("spring (수정됨)");
articleUpdate.setContext("demo 만들어보기 (수정됨)");
Long updateId = memoryArticleRepository.updateOne(id, articleUpdate);
// then 이런 결과가 나와야함
assertThat(id).isEqualTo(updateId);
assertThat(memoryArticleRepository.loadOne(id).get().getName())
.isEqualTo("sang-a (수정됨)");
}
@Test
void deleteAll() {
// given 이러한 상황이 주어져서
Article articleCreate1 = new Article();
articleCreate1.setName("sang-a");
articleCreate1.setTitle("spring");
articleCreate1.setContext("demo 만들어보기");
Article articleCreate2 = new Article();
articleCreate2.setName("LEaps");
articleCreate2.setTitle("C#");
articleCreate2.setContext("unity 로 게임 만들어보기");
memoryArticleRepository.create(articleCreate1);
memoryArticleRepository.create(articleCreate2);
// when 이걸 실행했을때
memoryArticleRepository.deleteAll();
// then 이런 결과가 나와야함
Map<Long, Article> store = memoryArticleRepository.loadAll();
assertThat(store.size()).isEqualTo(0);
}
@Test
void deleteOne() {
// given 이러한 상황이 주어져서
Article articleCreate1 = new Article();
articleCreate1.setName("sang-a");
articleCreate1.setTitle("spring");
articleCreate1.setContext("demo 만들어보기");
Article articleCreate2 = new Article();
articleCreate2.setName("LEaps");
articleCreate2.setTitle("C#");
articleCreate2.setContext("unity 로 게임 만들어보기");
Long id1 = memoryArticleRepository.create(articleCreate1);
memoryArticleRepository.create(articleCreate2);
// when 이걸 실행했을때
memoryArticleRepository.deleteOne(id1);
// then 이런 결과가 나와야함
assertThat(memoryArticleRepository.loadAll().size())
.isEqualTo(1);
}
}