1. Create a Maven Web Application

  2. Add Dependencies - pom.xml File

    Spring ORM (spring-orm)

    Hibernate Core (hibernate-core)

    MySQL Connector/J (mysql-connector-java)

  3. Create a Project Structure

    Untitled

  4. Configure DispatcherServlet using Java-based Spring configuration

    이전 예제들과 코드 동일

  5. Spring and Hibernate Integration using Java-based Spring configuration

    이 코드는 Spring Framework를 사용하여 Hibernate를 구성하는 Java 설정 클래스

    1. Configuration: 이 어노테이션은 클래스가 Spring의 설정 정보를 제공하는 빈 정의를 포함하고 있음을 나타냄. 즉, 이 클래스에서 Spring 컨테이너가 관리할 빈들을 정의하고 구성
    2. @PropertySource("classpath:database.properties"): 이 어노테이션은 database.properties 파일을 구성 소스로 사용하도록 지정. 이 파일에는 데이터베이스 연결 및 Hibernate 설정과 관련된 속성들이 포함되어 있다.
    3. @EnableTransactionManagement: 이 어노테이션은 Spring의 선언적 트랜잭션 관리를 활성화. 이를 통해 @Transactional 어노테이션을 사용하여 메소드 레벨에서 트랜잭션 경계를 선언할 수 있다.
    4. @Autowired private Environment environment;: Environment 타입의 environment 빈을 자동 주입. 이 객체는 프로퍼티 파일로부터 읽어들인 속성 값을 접근하는 데 사용
    5. sessionFactory() 메소드: **LocalSessionFactoryBean**을 생성하고 구성하는 빈을 정의. 이 빈은 Hibernate 세션 팩토리를 Spring 컨테이너에 등록하며, Hibernate 세션을 관리하는 데 사용. 데이터 소스 설정, 엔티티 패키지 스캔 위치, 그리고 Hibernate 속성 설정 등을 포함
    6. dataSource() 메소드: 데이터베이스 연결을 위한 DataSource 객체를 생성하고 구성하는 빈을 정의. **DriverManagerDataSource**는 간단한 데이터베이스 연결을 위한 구현체입니다. 데이터베이스 URL, 사용자 이름, 비밀번호 등은 **environment**를 통해 프로퍼티 파일로부터 가져온다.
    7. hibernateProperties() 메소드: Hibernate 구성을 위한 속성을 설정. 이 메소드는 Properties 객체를 생성하고, Hibernate의 다이얼렉트, SQL 출력 여부, SQL 포맷팅 여부, DDL 자동 실행 설정 등을 포함한다.
    8. getTransactionManager() 메소드: **HibernateTransactionManager**를 구성하는 빈을 정의. 이 트랜잭션 매니저는 Hibernate 세션 팩토리와 통합되어 데이터베이스 트랜잭션을 관리한다.
  6. Create database.properties File

    database.properties 파일에 사용될 수 있는 데이터베이스 연결 및 Hibernate 구성 속성

    hibernate.show_sql = true:

    hibernate.format_sql = true:

    hibernate.hbm2ddl.auto = update:

  7. Spring MVC Bean Configuration using Java-based Spring configuration

    이전 예제들과 코드 동일

  8. JPA Entity - Customer.java

**Customer**라는 이름의 엔티티 클래스를 정의

  1. @Entity: 이 클래스가 JPA (Java Persistence API) 엔티티임을 나타낸다. 엔티티는 데이터베이스의 테이블과 매핑되어 데이터베이스에 영속적으로 저장되는 데이터를 나타낸다.

  2. @Table(name = "customer"): 엔티티가 매핑될 데이터베이스 테이블의 이름을 지정한다. 이 경우, customer 테이블과 매핑된다.

  3. @Id: 필드가 엔티티의 기본 키(primary key)임을 나타낸다.

  4. @GeneratedValue(strategy = GenerationType.IDENTITY): 기본 키의 값을 데이터베이스가 자동으로 생성하도록 지정한다. IDENTITY 전략은 데이터베이스의 자동 증가(auto_increment) 기능을 사용하여 기본 키 값을 생성한다.

  5. @Column(name = "column_name"): 엔티티 필드가 매핑될 데이터베이스 컬럼의 이름을 지정한다. 예를 들어, firstName 필드는 데이터베이스의 first_name 컬럼과 매핑된다.

  6. Controller Layer

    이 컨트롤러는 고객 정보에 대한 CRUD(Create, Read, Update, Delete) 작업을 웹 브라우저를 통해 수행할 수 있는 인터페이스를 제공

  7. Service Layer - CustomerService.java

    이 코드는 **CustomerService**라는 인터페이스를 정의하고 있으며, 고객 정보를 관리하기 위한 기본적인 서비스 계층의 메소드들을 선언

  8. Service Layer - CustomerServiceImpl.java

    이 코드는 CustomerService 인터페이스의 구현체인 CustomerServiceImpl 클래스를 정의. 고객 정보 관리와 관련된 실제 비즈니스 로직을 수행하며, **CustomerDAO**에 정의된 데이터 액세스 메소드를 사용하여 데이터베이스 작업을 수행

  9. DAO Layer - CustomerDAO.java