본문 바로가기

분류 전체보기

(357)
[QueryDSL] 스프링 Data JPA와 QueryDSL 스프링 데이터 JPA - MemberRepository 생성 public interface MemberRepository extends JpaRepository { List findByUsername(String username);}Querydsl 전용 기능인 회원 search를 작성할 수 없다. → 사용자 정의 리포지토리 필요사용자 정의 리포지토리 사용법사용자 정의 인터페이스 작성사용자 정의 인터페이스 구현스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속사용자 정의 리포지토리 구성 1. 사용자 정의 인터페이스 작성public interface MemberRepositoryCustom extends MemberRepository{ List search(MemberSearchConditio..
[QueryDSL] 순수 JPA와 QueryDSL 순수 JPA 리포지토리와 QueryDSL순수 JPA 리포지토리@Repositorypublic class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member) { em.persist(member); } public Optional findById(Long id) { ..
[QueryDSL] 수정, 삭제 벌크 연산, SQL function 호출 수정, 삭제 벌크 연산 1. 쿼리 한번으로 대량 데이터 수정@Testpublic void bulkUpdate() { long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); Assertions.assertThat(count).isEqualTo(2);} 2. 기존 숫자에 1 더하기, 곱하기@Testpublic void bulkAdd() { long count = queryFactory .update(member) .set(member.ag..
[QueryDSL] 동적 쿼리 동적 쿼리동적 쿼리를 해결하는 두가지 방식BooleanBuilderWhere 다중 파라미터 사용1. BooleanBuilder 사용@Testpublic void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.assertThat(result.size()).isEqualTo(1);}private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new Boo..
[QueryDSL] 프로젝션과 결과 반환 1️⃣ 프로젝션과 결과 반환 - 기본프로젝션: select 대상 지정  1. 프로젝션 대상이 하나 List result = queryFactory .select(member.username) .from(member) .fetch();프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음.프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 2. 튜플 조회 - 프로젝션 대상이 둘 이상일 때 사용@Testpublic void tupleProjection() { // `com.querydsl.core.Tuple` List result = queryFactory .select(member.username, member.age) .from(m..
[QueryDSL] 기본 문법 기본 Q-Type 활용1️⃣ Q클래스 인스턴스를 사용하는 2가지 방법QMember qMember = new QMember("m"); // 1. 별칭 직접 지정 QMember qMember = QMember.member; // 2. 기본 인스턴스 사용같은 테이블을 조인해야 하는 경우가 아니면 기본 인스턴스를 사용하자✏️ 기본 인스턴스를 static import와 함께 사용import static study.querydsl.entity.QMember.*;@SpringBootTest@Transactionalpublic class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach..
[QueryDSL] Querydsl 설정과 검증 1️⃣ Gradle 설정 - 스프링 부트 3.x dependencies { //QueryDsl implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"} 2️⃣ Querydsl 환경설정 검증 1. 검증용 엔티티 생성@Entity@Getter@Setterpublic class Hello { @Id @GeneratedVa..
[Querydsl] QueryDSL 란? QueryDSL은 타입 안전(Type-Safe)한 동적 쿼리를 생성할 수 있도록 지원하는 Java 기반 ORM(Object-Relational Mapping) 프레임워크이다. JPA(Java Persistence API)를 사용할 때 JPQL(Java Persistence Query Language) 또는 Criteria API를 대체할 수 있도록 설계되었다. ✏️ 타입 안전한 동적 쿼리란?BooleanBuilder builder = new BooleanBuilder();if (age != null) { builder.and(m.age.gt(age)); // 나이가 age보다 큰 조건 추가}if (name != null) { builder.and(m.name.eq(name)); // 이름이 같..
WEB Server vs WAS 웹(Web)이란?웹(Web)은 인터넷을 기반으로 정보를 공유하고 검색할 수 있도록 하는 서비스이다.웹은 다음과 같은 3가지 주요 요소로 구성된다.URL(주소): 특정 웹 페이지나 리소스의 위치를 나타내는 주소HTTP(통신 규칙): 클라이언트와 서버가 데이터를 주고받을 때 사용하는 프로토콜HTML(내용): 웹 페이지의 구조와 내용을 정의하는 언어서버(Server)란?서버(Server)는 클라이언트(Client)에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템이다.서버의 역할은 클라이언트의 요청을 받아 해당 요청에 맞는 데이터를 응답하는 것이다.웹 서버(Web Server)란?웹 서버(Web Server)는 인터넷을 통해 클라이언트(주로 웹 브라우저)에게 정적인 웹 콘텐츠(HTML, CSS, 이미..
[MVC] Spring MVC와 Dispatcher Servlet 목차Spring MVCMVC란 무엇인가?MVC의 등장 배경DispatcherServlet역할동작과정Spring MVCSpring MVC(Model-View-Controller)는 Spring Framework의 핵심 모듈 중 하나로, 웹 애플리케이션 개발을 위한 디자인 패턴인 MVC 패턴을 구현한 것이다. 이 패턴은 애플리케이션의 로직을 세 가지 주요 구성 요소로 분리하여 관리한다. Spring MVC는 웹 애플리케이션을 구조화하고, 테스트와 유지보수를 용이하게 만들기 위해 설계되었다.Model: 애플리케이션의 핵심 데이터와 비즈니스 로직을 나타낸다. 보통 도메인 객체나 데이터베이스와 상호작용하는 객체들이다.View: 사용자에게 보여지는 화면을 담당한다. 일반적으로 JSP, Thymeleaf, FreeM..