프로그래머호이잇

ORM 소스 예제 본문

아키텍처패턴

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());
        }
    }
}

 

소스코드 예제는 아래 깃허브 경로에 올려두었습니다.

깃허브 경로 : https://github.com/LeeShinWoo/ORM_SAMPLE.git

'아키텍처패턴' 카테고리의 다른 글

5장 동시성  (0) 2022.09.18
4장 웹 프레젠테이션  (0) 2021.12.19
2장 도메인논리 구성  (0) 2021.12.06
3장 관계형 데이터베이스  (0) 2021.11.29