Java 관련: 153개의 글
[WARNING] File encoding has not been set, using platform encoding MS949, i.e. build is platform dependent! 해결방법 아래 내용추가 utf-8 utf-8 출처: https://happygrammer.tistory.com/19?category=869806 [happygrammer]
Maven vs Gradle 스프링 기반의 프로젝트를 시작하면서 Maven을 처음 접했다. Ant를 사용한적도 없었고 의존성 관리와 빌드 스크립트에 대한 지식도 없었기에 이런게 있나보다 하고 사용했었다. Maven 책을 한권 보고나서야 프로젝트 구성, 빌드툴이 무었인지 이해할 수 있었고, 편리한 의존성 관리에 감사하며 부족함을 느끼지 못했다. 하지만 프로젝트의 단위가 커지면서 빌드와 테스트에 소요되는 시간이 길어졌고, 여러 모듈에서 설정을 상속받기 시작하면서 Gradle이라는 녀석이 계속 눈에 뛰었다. Gradle이 Maven의 단점을 보완해주고 사용해본 사람들이 좋다고들 하니 Maven이랑 비교해서 얼마나 좋은지 알아보려 한다. Maven Apache의 이름 아래 2004년 출시 Ant를 사용하던 개발..
쿼리 메소드는 스프링 데이터 JPA의 핵심적인 기능중 하나로 메소드 이름으로 쿼리를 생성할 수 있다는 장점이 있다. 메소드 이름으로 쿼리를 생성을 위해 인터페이스에서 사용할 사용자 쿼리 메소드를 정의해 준다. EmailAddress와 LastName의 칼럼을 where 절의 조건으로 질의하는 사용자 쿼리 메소드는 인터페이스에 다음과 같이 선언해 줄 수 있다. public interface UserRepository extends Repository { List findByEmailAddressAndLastname(String emailAddress, String lastname); } 위와 같이 인터페이스에서 먼저 사용자 쿼리 메서드를 정의해준 다음 인터페이스를 구현하는 서비스에서 구체적인 비즈니스 ..
pom.xml에 3.6.3 버전의 Querydsl JPA Support모듈을 추가한다. com.mysema.querydsl querydsl-jpa 3.6.3 com.mysema.querydsl querydsl-apt 3.6.3 provided 이어서 plugin을 추가하는데 빌드시 queryDsl 기반 코드가 생성돼야 하므로 출력 디렉터리 정보를 넣어 두어야한다. com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.mysema.query.apt.jpa.JPAAnnotationProcessor 플러그인을 추가할때 부분에서 에러가 나타날 수 있는데 문제는 다음과 동일. 해결 방법을 참고해 해결해야 한다. 스택오버플..
스프링 데이터 JPA는 스프링프레임워크에서 JPA의 사용을 보다 쉽게 할 수 있도록 도와주는 프로젝트입니다. 스프링 데이터 JPA는 리포지토리 개발시 인터페이스를 상속 하는 것 만으로도 구현 클래스 없이도 데이터 접근을 가능하게 합니다. 보통 CRUD 메소드는 JpaRepository 인터페이스가 공통적으로 제공하는데 findByUserid()와 같은 메소드와 같이 인터페이스에 정의되어 있지 않은 메소드가 있다고 해 보겠습니다. UserRepository.findByUserid() 놀랍게도, 스프링 데이터 JPA는 위 메소드 이름을 분석해 적절한 JPQL 쿼리 문장으로 만들어 줍니다. select m from User u where userid =: userid 이어서 스프링 데이터 설정을 진행하겠습니다..
Pom.xml을 통해 관련 의존성을 추가하고 root-context.xml, servlet-context.xml 파일 설정을 통해 JPA와 스프링프레임워크를 연동합니다. 이어서 컨트롤러, 서비스, 도메인, 레파지토리 단위로 나눠 스프링프레임워크 애플리케이션을 개발합니다. pom.xml 의존성을 추가해 줍니다. 4.0.0 jpabook ch11-jpa-shop 1.0-SNAPSHOT jpa-shop war 1.6 UTF-8 UTF-8 4.1.6.RELEASE 4.3.10.Final 7.0.57 1.4.187 2.2 1.2 3.0.1 1.1.1 1.7.6 4.12 org.springframework spring-webmvc ${spring-framework.version} o..
JPQL JPQL(Java Persistence Query Language)은 JPA를 구현한 프레임워크에서 사용하는 언어입니다. JPA 구현 프레임워크에서는 JPQL을 SQL로 변환해 데이터베이스에 질의하게 됩니다. JPQL은 테이블을 대상으로 쿼리하지 않고 객체를 고려해 쿼리합니다. 이 때문에 JPQL은 데이터베이스 테이블에 직접적인 의존 관계를 맺고 있지 않습니다. JPQL은 SQL과 비슷한 구조로 구성 됐습니다. SELECT ... FROM ... [WHERE ...] [GROUP BY ... [HAVING ...]] [ORDER BY ...] 이때 JQPL DELTE나 UPDATE는 다음과 같은 두개의 쿼리로 나타낼 수 있습니다. DELETE FROM ... [WHERE ...] UPDATE ...
엔티티 매핑 엔티티 맵핑은 JPA에서 제공하는 다양한 맵핑 애노테이션을 이용합니다. 대표적인 애노테이션을 살펴보면 다음과 같습니다. 테이블 맵핑 애플리케이션이 시작 되면 테이블 매핑 애노테이션이 있는 모든 클래스를 대상으로 적합성을 검사합니다. @Entity @Table(name="MEMBER") public class Product{ ... } 테이블 맵핑은 누락 되지 않도록 합니다. 누락 되면 엔티티를 식별할 수 없어 세션 팩토리를 생성할 수 없다는 에러가 발생합니다. Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: jpabook] Unable to build Hibernate SessionFact..
엔티티 매니저 JPA의 기능 대부분을 EntityManager가 제공하고 있습니다. 엔티티 매니저를 통해 데이터베이스의 기본 동작인 CRUD(Create, Read, Update, Delete)를 제공합니다. 엔티티 매니저는 다음과 같은 형태로 선언해 사용합니다. // Use persistence.xml configuration EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1") EntityManager em = emf.createEntityManager(); // Retrieve an application managed entity manager // Work with the EM em.close(); ... emf..
JPA에 기반한 비즈니스로직 중심의 S/W 개발 JPA는 POJO기반의 ORM(Object-Relational Mapping) 프로그래밍을 제공하며, Hibernate와 유사한 ORM 솔루션이다. JPA는 Java Persistence API로 풀 어 쓸 수 있으며, Persistence는 영속성 혹은 지속성이라고 표현할 수 있는데, 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. 영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현할 수 있으며, 영속성을 갖지 안는 데이터는 단지 휘발성으로 메모리에만 존재하게 된다. JPA의 환경설정은 '/META-INF/persistence.xml'에 할 수 있다. JPA 필요성 ORM 맵핑에 대한 표준쿼리의 필요성 D..