아키텍처패턴
ORM 소스 예제
호이잇!
2021. 12. 6. 23:44
빌드 Tool : Gradle
db : h2database
Spring Boot, Lombok 이용하여 ORM 을 코딩해 보았습니다.
build.gradle 의존성
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-web-services'
implementation 'com.h2database:h2'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
H2DB 설정을 위한 properties
application.properties
# Datasource 설정
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:~/test
spring.datasource.username=admin
spring.datasource.password=password
# H2 설정
spring.h2.console.path=/h2console
spring.h2.console.enabled=true
# hibernate 설정
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create
User.java
@Table(name = "USER")
@Entity
@Getter
@Setter
@RequiredArgsConstructor
@ToString
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID", nullable = false)
private Long id;
@Column(nullable = false, length = 50)
private String userNm;
@Column(name = "EMP_NO", nullable = false)
private String empNo;
}
UserRopository.java
public interface UserRepository extends JpaRepository<User, Long>{
List<User> findByUserNm(String userNm);
}
Test Class 는 TestMothodOrder를 이용하여 Insert 구문 실행 후 Select 구문이 실행 되도록 조정하였습니다.
UserRepositoryTest.java
@SpringBootTest //모든 빈을 IoC컨테이너에 기동
@TestPropertySource(locations="classpath:application-test.properties")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class UserRepositoryTest {
@Autowired
UserRepository userRepository;
@Test
@DisplayName("User saved Test")
@Order(1)
public void createUserTest(){
User user = new User();
user.setUserNm("우사랑");
user.setEmpNo("1054024");
userRepository.save(user);
user = new User();
user.setUserNm("현최강");
user.setEmpNo("1394064");
userRepository.save(user);
user = new User();
user.setUserNm("김진은");
user.setEmpNo("1790064");
userRepository.save(user);
}
@Test
@DisplayName("User name search Test")
@Order(2)
public void findByUserNmTest(){
long id1 = 1l;
Optional<User> userA = userRepository.findById(id1);
userA.ifPresent(System.out::println);
List<User> userList = userRepository.findByUserNm("현최강");
for(User user : userList){
System.out.println(user.toString());
}
}
@Test
@DisplayName("User All search Test")
@Order(3)
public void findAllByUser(){
List<User> userList = userRepository.findAll();
for(User user : userList){
System.out.println(user.toString());
}
}
}
소스코드 예제는 아래 깃허브 경로에 올려두었습니다.