■ JPQL 이란?

 

JPQL에 대해 설명하기 전에 JPA는 기본적인 SQL을 처리해주기 때문에 SQL문을 직접 사용할 필요가 없었다. 하지만 JPA는 하나의 테이블을 대상으로 했을때만 가능한 이야기이며, 특정 데이터를 가져올 경우가 필요할 때는 불필요하게 모든 데이터를 가져오게 되는 낭비가 있다. 이러한 점을 해결하기 위해 JPQL (Java Persistence Query Language) 라는 쿼리 언어를 사용한다. SQL은 데이터베이스 테이블을 대상으로 쿼리가 작성 되지만, JPQL은 엔티티 객체를 대상으로 쿼리가 작성된다. 

ex) 

List members = em.createQuery("select m from Member m", Member.class).getResultList();

 

■ QueryDSL 이란?

 

JPQL의 빌더 역할을 하는 오픈소스이다. 

ex)

QMember qMember = QMember.member;

        Member member = queryFactory.select(qMember)
                .from(qMember)
                .orderBy(qMember.id.asc())
                .fetchFirst();

 

 

출처) https://cornswrold.tistory.com/332

'develop > JPA, Hibernate' 카테고리의 다른 글

엔티티 매니저 등록/수정/삭제/조회 정리  (0) 2019.11.24
엔티티 매니저 설정, 생성과정  (0) 2019.11.24
데이터베이스 방언  (0) 2019.10.19
Hibernate 란?  (0) 2019.09.30
JPA, ORM이란 무엇인가?  (0) 2019.09.30

우선적으로 자주쓰거나 중요한 어노테이션 위주로 정리할 예정이며, 추가적으로 사용하거나 알게되는 어노테이션이 있을 시 지속적으로 추가하여 기록할 예정입니다.

 

 

■ 어노테이션 이란?

 

일반적으로 스프링을 사용하다보면 @ 사인으로 시작하는 부분을 많이 볼 수 있는데, 이러한 것의 이름을 어노테이션 이라고 합니다. 어노테이션이 생기기 전에는 xml로 설정하여 관리 하였으나, 양이 너무 많아지면 관리 및 유지보수가 어려워 지는 단점이 있었습니다. 어노테이션이 생긴 이후부터는 사용과 관리가 매우 쉬워져 요즘은 대부분 어노테이션을 사용하여 개발을 합니다.

 

 

■ 어노테이션 의 종류

 

- @SpringBootApplication

Spring Boot 애플리케이션이 실행시 진입클래스를 가리키에 되는 어노테이션 입니다.

 

ex)

@SpringBootApplication
public class Application {
    public static void main(String arg[]){
        SpringApplication.run(Application.class, arg);
    }
}

 

- @RestController

view가 필요없는 API만을 지원하는 서비스에서 사용합니다. Spring에서 Controller 중 view로 응답하지 않는 Controller를 뜻합니다. 

 

ex)

@RestController
@RequestMapping("/v1/{mallId}/sales")
public class GiftishowRestApi {
  
   private final Logger logger = LoggerFactory.getLogger(getClass());

   @Autowired
   private GiftishowService giftishowService;

 

- @RequestMapping

Spring 컨트롤러의 URI 메소드를 정의하는데 쓰입니다. 요청받는 형식을 GET, POST, PATCH, PUT, DELETE 로 정의 할 수 있으며, 정의하지 않을경우 디폴트로 GET이 정의 됩니다.

 

ex)

@RestController
@RequestMapping("/v1/{mallId}/sales")
@Validated
public class AppInstallRestApi {

   @Autowired
   ApplicationService appService;

   @Autowired
   AppInstallService appInstallService;

   @Autowired
   MemberService memberService;

 

- @GetMapping, @PostMapping, @PatchMapping, @PutMapping, @DeleteMapping

각 매핑별로 Get을 예로 들면 위에서 설명한 @RequestMapping(Method=RequestMethod.GET) 와 같습니다.

각각의 형식별로 사용할 수 있습니다.

 

ex)

@GetMapping("/employees")
public List getAllEmployees() {
 return employeeRepository.findAll();
}

 

- @PathVariable

Http의 요청에 대해 매칭되는 request parameter값이 자동으로 매칭됩니다. 

 

ex)

@GetMapping("applications/{OsType}/application/{token}")
public ResponseEntity<?> getAppInstall(@PathVariable final String OsType
       , @PathVariable final String token, final ResponseMapper mapper) {
   AppInstall appInstall = appInstallService.getAppInstallByToken(mallId, token);
   if (appInstall == null) {
       mapper.mapFrom("result",false);
   }else{
       mapper.mapFrom("result",true);
       mapper.mapFrom("marketingAgreeYn", appInstall.getMktgReceiveAgreeYn());
          }
   return ResponseEntity.ok(mapper.getDto());
}

 

- @RequestBody

Http Post 요청에 대해서만 처리되며, Post 요청의 Request body에 있는 request message 의 값을 얻어와 매칭됩니다. 

 

ex)

@PostMapping("applications/application/{token}/agree")
public ResponseEntity<?> updateAppAgree(@RequestBody OpenApiDTO reqDto,
                                       @PathVariable final String mallId, @PathVariable final String token,
                                       final ResponseMapper mapper) {

   if (StringUtils.isBlank(reqDto.getValue("agreeYn", String.class))) {
       throw new BadRequestException("agreeYn must not be empty");
   }

   final AppInstall app = appInstallService.getAppInstallByToken(mallId,token);
   final AgreeYN ag = AgreeYN.valueOf(reqDto.get("agreeYn").toString());
   final Date today = new Date();

   if (app == null) {
       throw new NotFoundException("application not found");
   }

 

- @AutoWired

객체에 대한 의존성을 주입시키며, 해당 어노테이션을 사용할 시 스프링이 자동으로 값을 할당하게 됩니다. 일반적으로 Controller에서 DAO, Service를 주입시킬때 많이 사용합니다.

 

ex)

public class AppInstallRestApi {

   @Autowired
   ApplicationService appService;

   @Autowired
   AppInstallService appInstallService;

   @Autowired
   MemberService memberService;

   @Autowired
   MemberReceiveAgreeRepository repository;

 

- @Service

Service Implement에서 사용되며, 비즈니스 로직을 수행하는 클래스라는 것을 나타내는 용도이다.

 

@Service
@Transactional
public class MemberMyShopServiceImpl implements MemberMyShopService {

   private final Logger logger = LoggerFactory.getLogger(getClass());
  
   /* (non-Javadoc)
    * @see net.g1project.ecp.customer.service.MemberMyShopAService#createMyShopMember(java.lang.Long)
    */
   @Autowired
   private BWJPAQueryFactory factory;

   @Autowired
   private MemberMyshopHistRepository memberMyshopHistRepository;
...

 

 

 

'develop > Spring' 카테고리의 다른 글

Spring 이란? 간단 설명  (0) 2019.10.03

■ Spring 이란?

 

Spring Framework 란 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서, 동적인 웹사이트를 개발하기 위한 여러가지 서비스는 제공하고 있는 프레임워크 이다. 스프링을 사용하므로써 이미 잘 짜여진 구조 위에서 핵심 로직에만 집중할 수 있어서 높은 생산성과 높은 코드 품질의 좋은 소프트웨어를 개발 할 수 있다.

 

 

■ 애플리케이션 프레임워크 란?

 

애플리케이션 프레임워크는 특정 계층이나 기술, 업무 분야에 국한되지 않은 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크이다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크이다. 

 

 

 

 

출처) https://12bme.tistory.com/157

        https://cjh5414.github.io/why-spring/

 

'develop > Spring' 카테고리의 다른 글

Spring @ (어노테이션) 정리  (0) 2019.10.09

■ Hibernate 란?

 

ORM 프레임 워크중 하나이다. 과거와 다르게 자바 엔터프라이즈(J2EE) 애플리케이션 서버가 없어도 별도로 동작한다.

 

Hibernate concept

 

Hibernate 뿐만 아니라, 모든 ORM의 컨셉은 객체와 persistence계층 간(데이터베이스 테이블)에 맵핑을 하는 것이다.

객체  관계에는 연관(assosiation), 집합(aggregation), 의존(dependency) 관계가 존재하며, 데이터베이스에는 primary key  foreign key 관계로 표현된다. ORM은 이 관계의 맵핑을 바탕으로, 객체에 대한 조작만으로, 구체적인 persistence(데이터베이스, 파일시스템, 네트웍 등) 계층에 대해 알지 못해도 데이터들을 다룰수 있게하는 것이다.

, ORM의 일종인 Hibernate  자바객체를 통해 데이터베이스가 Oracle, MySql, MSSQL 등 에 상관없이 다룰수 있도록 하는 추상화를 목표로 한다 이 때, 자바객체는 domain model 이 되며, 이 도메인 모델에 대한 생성, setter, getter, 삭제를 통해 데이터베이스 테이블을 변경시 킬 수 있다.

 

 

 

출처) https://m.blog.naver.com/PostView.nhn?blogId=movman&logNo=100106214299&proxyReferer=https%3A%2F%2Fwww.google.com%2F

'develop > JPA, Hibernate' 카테고리의 다른 글

엔티티 매니저 등록/수정/삭제/조회 정리  (0) 2019.11.24
엔티티 매니저 설정, 생성과정  (0) 2019.11.24
데이터베이스 방언  (0) 2019.10.19
JPQL 이란? (querydsl)  (0) 2019.10.12
JPA, ORM이란 무엇인가?  (0) 2019.09.30

+ Recent posts