Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
generated

HELP.md
.gradle
/build/
Expand Down
14 changes: 12 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ plugins {
id 'java'
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'org.dailystudio'
Expand All @@ -20,8 +22,16 @@ repositories {
}

dependencies {
runtimeOnly('com.h2database:h2')
compile("org.springframework.boot:spring-boot-devtools")

runtimeOnly 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

implementation('io.springfox:springfox-swagger2:+')
implementation('io.springfox:springfox-swagger-ui:+')

compile "org.projectlombok:lombok:+"
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
@SpringBootApplication
public class SpringbootstudyApplication {

public static void main(String[] args) {
SpringApplication.run(SpringbootstudyApplication.class, args);
}
public static void main(String[] args) {
SpringApplication.run(SpringbootstudyApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.dailystudio.springbootstudy.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any()) // 현재 RequestMapping으로 할당된 모든 URL 리스트를 추출
.paths(PathSelectors.ant("/api/**")) // 그중 /api/** 인 URL들만 필터링
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.dailystudio.springbootstudy.controller;

import lombok.RequiredArgsConstructor;
import org.dailystudio.springbootstudy.domain.Parent;
import org.dailystudio.springbootstudy.dto.parent.ParentDto;
import org.dailystudio.springbootstudy.service.FamilyService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("api/family")
@RequiredArgsConstructor
public class FamilyController {

private final FamilyService familyService;

@PostMapping("/save/parent")
public ResponseEntity<Void> saveParent(){
familyService.saveParent();
return ResponseEntity.ok().build();
}

@PostMapping("/save/children")
public ResponseEntity<Void> saveChildren(){
familyService.saveChild();
return ResponseEntity.ok().build();
}

@GetMapping("/parent")
public ResponseEntity<ParentDto> getParent(){
Parent parent = familyService.getParent();
ParentDto parentDto = new ParentDto(parent);
return ResponseEntity.ok(parentDto);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.dailystudio.springbootstudy.controller;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dailystudio.springbootstudy.domain.User;
import org.dailystudio.springbootstudy.repository.UserRepository;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("api/user")
@RequiredArgsConstructor
@Slf4j
public class UserController {

private final UserRepository userRepository;


@PostMapping
@Transactional
public ResponseEntity<Void> testUser() {

//저장할 User를 만든다.
User user = new User();
user.setName("이름");
user.setEmail("example@gmail.com");
user.setPass("1234");
user.setPhone("010-0100-0101");

//user를 저장한다. (영속상태로 만들고 flush한다.)
userRepository.save(user);

//모든 user 정보를 가져온다.
List<User> users = userRepository.findAll();

//그중 하나의 user정보를 확인해본다.
User someOne = users.get(0);
log.info("SomeOne email - " + someOne.getEmail());
log.info("SomeOne name - " + someOne.getName());
log.info("SomeOne pass - " + someOne.getPass());
log.info("SomeOne phone - " + someOne.getPhone());

//정보를 바꿔보자.
someOne.setName("바뀐이름");
log.info("SomeOne name - " +someOne.getName());

//정보를 지워보자.
userRepository.delete(someOne);

return ResponseEntity.ok().build();
}
}
29 changes: 29 additions & 0 deletions src/main/java/org/dailystudio/springbootstudy/domain/Child.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.dailystudio.springbootstudy.domain;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "child")
@Getter
@Setter
public class Child {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "child_id")
private Long id;

@NotNull
private String name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Parent parent;

}
28 changes: 28 additions & 0 deletions src/main/java/org/dailystudio/springbootstudy/domain/Parent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.dailystudio.springbootstudy.domain;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "parent")
@Getter
@Setter
public class Parent {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "parent_id")
private Long id;

@NotNull
private String name;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
private List<Child> children = new ArrayList<>();

}
36 changes: 36 additions & 0 deletions src/main/java/org/dailystudio/springbootstudy/domain/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.dailystudio.springbootstudy.domain;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

import javax.persistence.*;
import javax.validation.constraints.NotNull;


@Entity
@Table(name = "user")
@NoArgsConstructor
@Getter
@Setter
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long id;

@NotNull
private String email;

@NotNull
private String name;

@NotNull
private String pass;

@NotNull
private String phone;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.dailystudio.springbootstudy.dto.child;

import lombok.Getter;
import org.dailystudio.springbootstudy.domain.Child;

@Getter
public class ChildResDto {
private String name;

public ChildResDto(Child child) {
this.name = child.getName();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.dailystudio.springbootstudy.dto.parent;

import lombok.Getter;
import org.dailystudio.springbootstudy.domain.Parent;
import org.dailystudio.springbootstudy.dto.child.ChildResDto;

import java.util.List;
import java.util.stream.Collectors;

@Getter
public class ParentDto {
private Long id;
private String name;

private List<ChildResDto> children;

public ParentDto(Parent parent) {
this.id = parent.getId();
this.name = parent.getName();
this.children = parent.getChildren().stream()
.map(child -> new ChildResDto(child))
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.dailystudio.springbootstudy.repository;

import org.dailystudio.springbootstudy.domain.Child;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ChildRepository extends JpaRepository<Child,Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.dailystudio.springbootstudy.repository;

import org.dailystudio.springbootstudy.domain.Parent;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ParentRepository extends JpaRepository<Parent, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.dailystudio.springbootstudy.repository;

import org.dailystudio.springbootstudy.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.dailystudio.springbootstudy.service;

import lombok.RequiredArgsConstructor;
import org.dailystudio.springbootstudy.domain.Child;
import org.dailystudio.springbootstudy.domain.Parent;
import org.dailystudio.springbootstudy.repository.ChildRepository;
import org.dailystudio.springbootstudy.repository.ParentRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@RequiredArgsConstructor
public class FamilyService {

private final ParentRepository parentRepository;
private final ChildRepository childRepository;

public void saveParent(){
Parent parent = new Parent();
parent.setName("부모님");
parentRepository.save(parent);
}

public void saveChild(){
Child child1 = new Child();
Child child2 = new Child();

child1.setName("자식");
child2.setName("자식");

Parent parent = parentRepository.findAll().get(0);

child1.setParent(parent);
child2.setParent(parent);

childRepository.save(child1);
childRepository.save(child2);
}

public Parent getParent(){
Parent parent = parentRepository.findAll().get(0);
System.out.println("parent id = "+parent.getId());
System.out.println("parent name = "+parent.getName());

System.out.println("parent has "+parent.getChildren().size()+" children.");
return parent;
}

}
5 changes: 5 additions & 0 deletions src/main/resources/application-local.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:~/ds;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=create
Loading