ORM

· Spring
결과가 1행인 경우 사용할 수 있는 qureyForObject 메서드에 대해 알아봅시다. 결과가 1행인 경우 사용할 수 있는 qureyForObject() 메서드 다음은 query() 메서드를 사용한 코드입니다. public int count(){ List results = jdbcTemplate.query( "select count(*) from MEMBER", new RowMapper(){ @Override public Integer mapRow(Resultset rs, int rowNum) throws SQLException{ return rs.getInt(1); } }); return results.get(0); } count(*) 쿼리는 결과가 한 행뿐이니 쿼리 결과를 List로 받기보다는 In..
· JPA
양방향 매핑 Member 엔티티의 양방향 매핑은 단방향과 동일하다. @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //... } Team 엔티티는 컬렉션을 추가해야 한다. @Entity public class Team{ @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") List members = new Arr..
· JPA
연관관계의 필요성 '객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.' - 조영호 님의 '객체지향의 사실과 오해' 라는 책에서. [예제] 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. [객체, 테이블 모델링] 연관관계가 없는 객체 [객체를 테이블에 맞춰 모델링 하는 코드] 참조 대신에 외래 키를 그대로 사용한다. @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name ="USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; // 이하 생략.. } @Entity publi..
· JPA
기본 키 매핑 기본 키 매핑 어노테이션 @Id @GeneratedValue @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 기본 키 매핑방법에는 직접 할당 방법과 자동 생성 방법이 있다. 직접 할당 방법은 @Id만 사용하고, 자동 생성 방법은 @GeneratedValue를 사용한다. 옵션은 다음과 같다. 옵션 - IDENTITY 데이터베이스에 위임한다.(MYSQL) 옵션 - SEQUENCE 데이터베이스에 시퀀스 오브젝트를 사용한다.(ORACLE) 해당 옵션을 사용하려면 @SequenceGenerator 가 필요하다. 옵션 - TABLE 키 생성용 테이블을 사용하고, DB에서 사용한다. 해당 옵션을 사용하려면 @TableGenera..
· JPA
엔티티 매핑 1) 객체와 테이블 매핑 : @Entity, @Table 2) 필드와 컬럼 매핑 : @Column 3) 기본 키 매핑 : @Id 4) 연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하고, 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수다. [주의할 점] 1) 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) 2) final 클래스, enum, interface, inuuer 클래스를 사용해선 안된다. 3) 저장할 필드에 final 키워드를 사용해선 안된다. 속성 - name JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스 이름을..
· JPA
엔티티 수정하기 - 변경감지 EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); // 트랜잭션 start //영속 엔터티 조회 Member memberA = em.find(Member.class, "memberA"); //영속 엔터티 데이터 수정 memberA.setUsername("hi"); memberA.setAge(10); //JPA는 업데이트 함수가 따로 있을까? transaction.commit(); // 트랜잭션 commit 변경 감지 (Dirty Checking) 1. flush 함수 호출 2. 엔티티와 스냅샷 비교 JPA는 영속 ..
· JPA
데이터베이스 방언 JPA는 특정 베이스에 종속하지 않는다. 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다. 가변 문자 MySQL : VARCHAR Oracle : VARCHAR2 문자열 자르는 함수 SQL 표준 : SUBSTRING( ) Oracle : SUBSTR( ) 페이징 MySQL : LIMIT Oracle : ROWNUM 방언은 SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능이다. 각 데이터베이스 방언을 사용하기 위해 hibernate.dialect 속성에 지정한다. H2 : org.hibernate.dialect.H2Dialect Oracle 10g : org.hibernate.diaslect.Oracle10gDialect MySQL : org.hibernate..
runnnerDevHong
'ORM' 태그의 글 목록