일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 값 타입 비교
- MySQL
- field column mapping
- JPQL
- @MappedSuperclasss
- 기본값 타입
- 세션 생성 정책
- concurrentsessionfilter
- 값 타입 컬렉션
- spring jpa
- AnonymousAuthenticationFilter
- 객제지향 쿼리 언어
- orphanRemovel
- 기본 키 매핑
- SessionManagementFilter
- 임베디드 타입
- ddl-auto
- 동시 세션 제어
- Database
- 세션 고정 보호
- Spring Security
- 즉시 로딩
- TABLE
- form login
- Remember-me
- 상속관계 매핑
- 양방향 매핑
- jpa
- 지연 로딩
- 다대다
- Today
- Total
목록전체 글 (38)
hoondev
데이터베이스는 대량의 데이터를 빠르고 효율적으로 저장, 관리 및 검색하는 데 사용된다. 이 블로그 게시물에서는 데이터베이스가 무엇인지, 어떻게 작동하는지, 그리고 데이터베이스가 왜 그렇게 중요한지에 대해 알아보자. 데이터베이스란? 데이터베이스는 효율적인 검색과 처리를 가능하게 하는 방식으로 저장되고 구성되는 구조화된 데이터 모음이다. 일종의 정보 저장소라고 말할 수 있다. 데이터베이스는 어떻게 작동할까? 데이터베이스는 행과 열로 구성된 테이블에 데이터를 저장한다. 각 행은 고유한 레코드를 나타내며, 각 열은 해당 레코드의 속성을 나타낸다. 예를 들어 고객 데이터베이스에서 각 행은 단일 고객을 나타내고 각 열은 이름, 주소 및 전화번호와 같은 해당 고객에 대한 특정 정보를 나타낼 수 있다. 데이터베이스는 ..
페이징 jpa는 페이징을 다음 두 api로 추상화 하였다. setFirstResult(int startPosition) : 조회 시작 위치 (0부터 시작) setMaxResults(int maxResult) : 조회할 데이터 수 //페이징 쿼리 String jpql = "select m from Member m order by m.name desc"; List resultList = em.createQuery(jpql, Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList(); Reference https://www.inflearn.com/course/ORM-JPA-Basic
프로젝션 SELECT 절에 조회할 대상을 지정하는 것이 프로젝션이다. 프로젝션 대상은 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입)이 있다. 엔티티 프로젝션 SELECT m FROM Member m SELECT m.team FROM Member m 임베디드 타입 프로젝션 SELECT m.address FROM Member m 스칼라 타입 프로젝션 SELECT m.username, m.age FROM Member m DISTINCT로 중복제거 여러 값 조회 Query 타입으로 조회 List resultList = em.createQuery("select distinct m.username, m.age from Member m") .getResultList(); Object o =..
JPQL JPQL은 객체지향 쿼리 언어다.따라서 테이블을 대상으로 쿼리 하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하 지 않는다. JPQL은 결국 SQL로 변환된다. 문법 select_문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절] sql과 매우 유사하다. select m from Member as m where m.age > 18 엔티티와 속성은 대소문자 구분O (Member, age) JPQL 키워드는 대소문자 구분X (SELECT, FROM, ..
JPA 지원하는 쿼리 방법 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL JPA를 사용하면 엔티티 객체를 중심으로 개발하게 된다. 문제는 검색 쿼리인데 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 해야한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다. 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공한다. SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, H..
값 타입 컬렉션 값 타입을 컬렉션에 담아서 사용할 수 있다. 컬렉션은 db에 매핑할때 컬렉션 용 테이블을 따로 생성해서 관리해야한다. Address @Embeddable @Getter @Setter public class Address { @Column(name="city") private String city; private String street; private String zipcode; ... } Member @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "username") private String username; @Embedded private Address homeAddress; @Ele..
값 타입의 비교 동일성(identity) 비교: 인스턴스의 참조 값을 비교, == 사용 Address a = new Address(“서울시”) Address b = new Address(“서울시”) System.out.println(a == b); // false 동등성(equivalence) 비교: 인스턴스의 값을 비교, equals() 사용 Address a = new Address(“서울시”) Address b = new Address(“서울시”) System.out.println(a.equals(b)); // true 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 한다. 값 타입의 equals() 메소드를 적절하게 재정의한다. (주로 모든 필드 사용)
값 타입 공유 참조 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험하다. 왜냐하면 회원 1, 회원 2가 같은 값타입을 공유하고 있을때 값타입의 값을 변경하게 되면 회원 1, 회원 2 모두 값 타입이 변경되게 된다. // 임베디드 타입 Address address = new Address("city", "street", "10000") Member member1 = new Member(); member1.setUsername("member1"); member1.setHomeAddress(address); em.persist(member1); Member member2 = new Member(); member2.setUsername("member2"); member2.setHomeAddress(..