BackEnd

    자바의 내부 클래스는 스프링 빈이 될 수 있을까?

    유튜브를 보다가 토비님이 제목과 같은 영상을 올리셔서 정리하고자 한다. 영상을 만드신 이유는 인프런 질문에 @Configuration과 proxyBeanMethods 강의를 실습하던 도중 Bean1, Bean2, Common, MyConfig 클래스들을 Static 클래스로 만들어야 정상적인 테스트가 가능 해당 클래스들을 정적 클래스가 아닌 내부 클래스로 작성하니 적절한 빈 타입을 찾을 수 없다는 에러에서 시작됐다. 개요 @SpringBootApplication public class SpringbootAcApplication { @Component static class StaticInnerClass { public StaticInnerClass() { System.out.println("StaticI..

    조인

    내부 조인: 교집합 - 공통된 요소가 없다면 row가 출력되지 않음 SELECT m FROM Member m [INNER] JOIN m.team t 외부 조인: 합집합 공통된 요소가 없어도 Member에 해당하는 row가 출력 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t 세타 조인: 조건을 만족하는 cartesion product가 출력된다 (중복허용) Member의 모든 행과 Team의 모든 행이 조인 select count(m) from Member m, Team t where m.username = t.name 조인 - ON 절 ON절을 활용한 조인(JPA 2.1부터 지원) 1. 조인 대상 필터링 2. 연관관계 없는 엔티티 외부 조인(하이버네이트 5.1부..

    페이징 API

    페이징 API JPA는 페이징을 다음 두 API로 추상화 setFirstResult(int startPosition): 조회 시작 위치 setMaxResults(int maxResult): 조회할 데이터 수 페이징 API 예시 //페이징 쿼리 String jpql = "select m from Member m order by m.name desc; List resultList = em.createQuery(jpql, Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList(); 페이징 API - MySQL 방언 SELECT M.ID AS ID, M.AGE AS AGE, M.TEAM_ID AS TEAM_ID, M.NAME AS NAME FRO..

    프로젝션(SELECT)

    프로젝션이란? 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로 중복 제거 엔티티 프로젝션으로 가져온 엔티티들은 영속성 컨텍스트에 관리되어 entity변경이 반영됨 ... Member member = new Member(); member.setUsername("member1"); member.s..

    토비의 스프링부트 - 이해와 원리 #0 강의소개 및 학습 방법

    스프링부트는 스프링을 사용하는 방법에 대한 고집스러운 의견을 가진 프레임워크이다. 스프링은 개발자의 대부분의 의견을 수용할 만큼 유연하다. 다만 빠르게 개발을 요구하고 진행하는 요즘 시장에서 스프링에 대한 충분한 고민과 이해가 부족한 개발자에겐 스프링은 오히려 적합하지 않기도 하다. 스프링 부트가 제공하는 도구를 사용하면 빠르게 스프링 기반 서버 어플리케이션을 제작할 수 있다. 다만 스프링부트가 어떻게 스프링을 사용하게 해주는지 이해하지 못하고 스프링으로 어플리케이션을 만드는 기본 이해가 없다면 한계점이 온다. 스프링 != 스프링부트 && 스프링부트 != 스프링의 대체제 스프링부트로 웹 어플리케이션을 제작해도 스프링 기반으로 제작하는 것이다. 학습 방법은 강의별로 예제를 따라해도 좋고 전체 강의를 둘러보..

    JPQL(Java Persistence Query Language)

    JPQL - 기본 문법과 기능 JPQL 소개 JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다. JPQL 문법 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자 구분O (Member, age) JPQL 키워드는 대소문자 구분X (SELECT, FROM, where) 엔티티 이름 사용, 테이블 이름이 아님(Member) 별칭은 필수(m) (as는 생략가능)