Skip to content

Commit af88ca6

Browse files
author
frankyoh
committed
일대일 코드 작성중
1 parent 99a12b6 commit af88ca6

16 files changed

Lines changed: 359 additions & 34 deletions

File tree

springboot-jpa-one-to-one-unidirectional/pom.xml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<description>Demo project for Spring Boot</description>
1616

1717
<properties>
18+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1819
<java.version>1.8</java.version>
1920
</properties>
2021

@@ -27,7 +28,10 @@
2728
<groupId>org.springframework.boot</groupId>
2829
<artifactId>spring-boot-starter-web</artifactId>
2930
</dependency>
30-
31+
<dependency>
32+
<groupId>com.h2database</groupId>
33+
<artifactId>h2</artifactId>
34+
</dependency>
3135
<dependency>
3236
<groupId>org.projectlombok</groupId>
3337
<artifactId>lombok</artifactId>
@@ -37,12 +41,6 @@
3741
<groupId>org.springframework.boot</groupId>
3842
<artifactId>spring-boot-starter-test</artifactId>
3943
<scope>test</scope>
40-
<exclusions>
41-
<exclusion>
42-
<groupId>org.junit.vintage</groupId>
43-
<artifactId>junit-vintage-engine</artifactId>
44-
</exclusion>
45-
</exclusions>
4644
</dependency>
4745
</dependencies>
4846

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package kr.pe.advenoh;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
6+
7+
@EnableJpaAuditing
8+
@SpringBootApplication
9+
public class JpaUndirectionalOneToOneApplication {
10+
11+
public static void main(String[] args) {
12+
SpringApplication.run(JpaUndirectionalOneToOneApplication.class, args);
13+
}
14+
}

springboot-jpa-one-to-one-unidirectional/src/main/java/kr/pe/advenoh/SpringbootJpaOneToOneUnidirectionalApplication.java

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package kr.pe.advenoh.controller;
2+
3+
import kr.pe.advenoh.model.User;
4+
import kr.pe.advenoh.repository.UserRepository;
5+
import kr.pe.advenoh.service.UserService;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.PutMapping;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
import org.springframework.web.bind.annotation.RestController;
15+
16+
import javax.transaction.Transactional;
17+
18+
@Slf4j
19+
@RestController
20+
@RequestMapping("/api/user")
21+
public class UserController {
22+
23+
@Autowired
24+
private UserRepository postRepository;
25+
26+
@Autowired
27+
private UserService userService;
28+
29+
@GetMapping
30+
public Iterable<User> getList() {
31+
return postRepository.findAll();
32+
}
33+
34+
@PostMapping
35+
public User addUser(User user) {
36+
return userService.createUser(user);
37+
}
38+
39+
@Transactional
40+
@PutMapping("/{postId}")
41+
public User modifyUser(
42+
@PathVariable Long postId,
43+
User post) {
44+
return userService.modifyUser(postId, post);
45+
}
46+
47+
@Transactional
48+
@DeleteMapping("/{postId}")
49+
public String deleteUser(@PathVariable Long postId) {
50+
userService.deleteUser(postId);
51+
return "SUCCESS";
52+
}
53+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package kr.pe.advenoh.exception;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
import org.springframework.http.HttpStatus;
6+
import org.springframework.web.bind.annotation.ResponseStatus;
7+
8+
@Getter
9+
@Setter
10+
@ResponseStatus(HttpStatus.NOT_FOUND)
11+
public class ResourceNotFoundException extends RuntimeException {
12+
private String resourceName;
13+
private String fieldName;
14+
private Object fieldValue;
15+
16+
public ResourceNotFoundException(String resourceName, String fieldName, Object fieldValue) {
17+
super(String.format("%s not found with %s : '%s'", resourceName, fieldName, fieldValue));
18+
this.resourceName = resourceName;
19+
this.fieldName = fieldName;
20+
this.fieldValue = fieldValue;
21+
}
22+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package kr.pe.advenoh.model;
2+
3+
import kr.pe.advenoh.model.audit.DateAudit;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
import javax.persistence.Column;
10+
import javax.persistence.Entity;
11+
import javax.persistence.GeneratedValue;
12+
import javax.persistence.GenerationType;
13+
import javax.persistence.Id;
14+
import javax.persistence.Table;
15+
16+
@Getter
17+
@Setter
18+
@Entity
19+
@NoArgsConstructor
20+
@Table(name = "comment")
21+
public class CelluarPhone extends DateAudit {
22+
@Id
23+
@GeneratedValue(strategy = GenerationType.IDENTITY)
24+
@Column(name = "phone_id")
25+
private Long id;
26+
27+
private String phoneNumber;
28+
29+
private String model;
30+
31+
@Builder
32+
public CelluarPhone(String phoneNumber, String model) {
33+
this.phoneNumber = phoneNumber;
34+
this.model = model;
35+
}
36+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package kr.pe.advenoh.model;
2+
3+
import kr.pe.advenoh.model.audit.DateAudit;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
import javax.persistence.Column;
10+
import javax.persistence.Entity;
11+
import javax.persistence.GeneratedValue;
12+
import javax.persistence.GenerationType;
13+
import javax.persistence.Id;
14+
import javax.persistence.JoinColumn;
15+
import javax.persistence.OneToOne;
16+
import javax.persistence.Table;
17+
18+
@Getter
19+
@Setter
20+
@Entity
21+
@NoArgsConstructor
22+
@Table(name = "user")
23+
public class User extends DateAudit {
24+
@Id
25+
@GeneratedValue(strategy = GenerationType.IDENTITY)
26+
@Column(name = "user_id", unique = true, nullable = false)
27+
private Long id;
28+
29+
private String username;
30+
31+
private String email;
32+
33+
private String name;
34+
35+
private String password;
36+
37+
@OneToOne
38+
@JoinColumn(name = "id")
39+
private CelluarPhone celluarPhone;
40+
41+
@Builder
42+
public User(String username, String email, String name, String password) {
43+
this.username = username;
44+
this.email = email;
45+
this.name = name;
46+
this.password = password;
47+
}
48+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package kr.pe.advenoh.model.audit;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
import org.springframework.data.annotation.CreatedDate;
6+
import org.springframework.data.annotation.LastModifiedDate;
7+
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
8+
9+
import javax.persistence.Column;
10+
import javax.persistence.EntityListeners;
11+
import javax.persistence.MappedSuperclass;
12+
import javax.persistence.Temporal;
13+
import javax.persistence.TemporalType;
14+
import java.io.Serializable;
15+
import java.util.Date;
16+
17+
@Getter
18+
@Setter
19+
@MappedSuperclass
20+
@EntityListeners(AuditingEntityListener.class)
21+
public abstract class DateAudit implements Serializable {
22+
23+
@CreatedDate
24+
@Temporal(TemporalType.TIMESTAMP)
25+
@Column(name = "create_dt", nullable = false, updatable = false)
26+
private Date createDt;
27+
28+
@LastModifiedDate
29+
@Temporal(TemporalType.TIMESTAMP)
30+
@Column(name = "updated_dt", nullable = false)
31+
private Date updateDt;
32+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package kr.pe.advenoh.model.enums;
2+
3+
public enum PhoneType {
4+
HOME_PHONE,
5+
CELLULAR_PHONE
6+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package kr.pe.advenoh.repository;
2+
3+
import kr.pe.advenoh.model.CelluarPhone;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface PhoneRepository extends JpaRepository<CelluarPhone, Long> {
9+
}

0 commit comments

Comments
 (0)