목록콤퓨타 왕기초 (187)
파게로그
4@Column name: 필드와 매핑할 테이블의 컬럼 이름 insertable, updatable: 읽기 전용(예를 들어 insertable=false라고 하면 DB의 갱신이 이루어지지 않음) nullable: null 허용 여부 결정, DDL 생성 시 사용 unique: 유니크 제약 조건, DDL 생성 시 사용 columnDefinition, length, precision, scale: DDL 생성 시 사용 length: 데이터의 길이 설정, DDL 생성 시 사용 @Temporal 날짜 타입 매핑 @Temporal(TemporalType.DATE) private Date date; // 날짜 @Temporal(TemporalType.TIME) private Date time; // 시간 @Tempo..
자료형 등 메타 정보를 직접 확인하는 과정을 거쳐 DDL문까지 JPA가 생성할 수 있다. 애플리케이션 실행 시에, JPA가 데이터베이스 방언까지 고려하여 적절한 DDL을 자동으로 생성하는 것이다. 다만, 이렇게 생성한 DDL은 개발에서만 사용해야 한다. 그나마 validate와 none은 사용할 수 있다고 할지라도, 나머지는 절대 운영 장비에서 사용하면 안 된다. hibernate.hbm2ddl.auto (아마도 hbm은 hibernate mapping to ddl이 아닐까?) create 기존 테이블 삭제 후 다시 생성(DROP + CREATE) create-drop CREATE와 같지만, 종료 시점에 테이블을 DROP update 변경분만 반영 validate 엔티티와 테이블이 정상 매핑되어있는지만 ..
Spring 프레임워크 없이, 기본적인 Maven project에서 JPA를 사용해보자. pom.xml org.hibernate hibernate-entitymanager 5.4.32.Final mysql mysql-connector-java 8.0.25 Maven dependencies에 Hibernate를 추가하면, JPA 또한 자동으로 추가된다. 한편 resources 아래에 META-INF라는 디렉터리를 생성하고, persistence.xml에 다음과 같은 내용을 추가한다. 다만 Spring Boot를 사용하면 프레임워크 내부에서 동작하므로 작성할 필요는 없다. persistence.xml entity가 될 클래스를 만들고 다음과 같이 클래스를 작성한다. package helloJpa.entity..
SK Planet에서 제공하는 김영한 강사님의 강의를 참고했다. T아카데미(https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=149) YouTube(https://www.youtube.com/watch?v=WfrSN9Z7MiA&list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U) 간단하게 요약하자면, JPA를 통해서 객체지향 프로그래밍과 관계형 데이터베이스라는, 서로 다른 패러다임의 간극을 메꿀 수 있다. 객체지향적으로 프로그램을 설계할 수록 SQL 쿼리는 보다 복잡해지는데 이를 ORM을 통해서 해결할 수 있는 것이다. Member와 Team이라는 객체, 그리고 동일한 이름의 테이블이 있다고 생각해보자. ..
https://mybatis.org/mybatis-3/ko/dynamic-sql.html에서 foreach element에 대해서 살펴본다. 만약 Assignment 여러개의 번호를 배열로 받는, int deleteAll(int[] ids)라는 메서드가 있다면, 이 때는 MyBatis가 제공하는 element를 사용할 수 있다. DELETE FROM assignment WHERE id IN #{id} "컬렉션 파라미터로 Map이나 배열객체와 더불어 List, Set등과 같은 반복가능한 객체를 전달할 수 있다. 반복가능하거나 배열을 사용할때 index값은 현재 몇번째 반복인지를 나타내고 value항목은 반복과정에서 가져오는 요소를 나타낸다. Map을 사용할때 index는 key객체가 되고 항목은 value..
특별한 기능을 사용하는 것은 아니다. 예를 들어 Assignment 하나의 정보를 보고자 한다면, ASSIGNMENT 테이블의 내용과 CHAPTER 테이블의 내용이 JOIN되어야 한다. 이는 SQL을 통해 DB에서 직접 View를 생성하고, 이를 이용하는 메서드를 생성하는 정도로 정리할 수 있다. 그리고 Entity 패키지에는 Assignment를 상속받는 AssignmentView 클래스를 다음과 같이 생성할 수 있다. package com.ddoongi.springbootwebprj.entity; import java.sql.Date; public class AssignmentView extends Assignment { private String chapterName; public Assignmen..
annotation을 이용해 SQL을 매핑할 경우... 1. 규모가 커지게 되면 너무 복잡해진다. 2. 인터페이스인 AssignmentDao가, MyBatis라는, 구현을 위한 특정 기술과 너무 밀접해진다. 3. annotation 때문에 인터페이스 전반에 대한 가독성이 나빠진다. 인터페이스에는 메서드만 남겨놓고, resources에서 원하는 위치에 XML 파일을 만든다. 여기서는 resources/dao/mybatis/mapper/AssignmentDaoMapper.xml로 만들었다. 이 파일의 이름은 AssignmentDaoMapper.xml라고 지으면 알아보기가 쉽다. 이 XML 파일이 어떤 인터페이스를 구현하는지는 어떻게 표현할 수 있을까? mybatis.org/mybatis-3/ko/gettin..
Column Mapping DB에서의 실제 column name과 Java 어플리케이션에서의 필드 변수명이 다를 때 어떻게 할 수 있을까? 첫째로, DB의 column name을 바꿀 수 있다. column name과 필드 변수명이 일치하는 것이 권장되지만, DB를 수정하기 힘든 경우가 많다. 둘째로, 필드 변수명과 getter, setter의 메서드 이름, 그리고 View에서 속성명을 모두 변경할 수 있다. 하지만 이는 굉장히 비효율적인 방법이다. 이러한 경우를 위해서 MyBatis는 column mapping을 지원한다. package com.ddoongi.springbootwebprj.dao; import com.ddoongi.springbootwebprj.entity.Assignment; impo..