2016년 8월 5일 금요일

(방학특강)JPA강좌,QueryDSL4.X조회, 수정, 삭제, update, delete 배치쿼리, JPADeleteClause, JPAUpdateClause - 스프링실무교육학원

(방학특강)JPA강좌,QueryDSL4.X조회수정삭제, update, delete 배치쿼리, JPADeleteClause, JPAUpdateClause - 스프링실무교육학원

n  데이터 조회 쿼리작성
JPAQuery 직접 생성하는 경우

import static model.QEmp.emp;

@PersistenceContext
EntityManager em;

JPAQuery<?> query = new JPAQuery<Void>(em);
Emp emp = query.select(emp).from(emp)
           .where(emp.empno.eq(7369))
           .fetchOne();  //한건만 추출

JPAQueryFactory를 이용한다면
(내부적으로 JPAQuery 인스턴스를 가지고 있다.)

[스프링 설정 파일에서 JPAQueryFactory를 빈으,로 등록]
@Bean
public JPAQueryFactory queryFactory() {
           //return new JPAQueryFactory(JPQLTemplates.DEFAULT, em);
           return new JPAQueryFactory(em);
}

[Repository 구현체에서]

import static model.QEmp.emp;

@Autowired
JPAQueryFactory queryFactory;

Emp emp = queryFactory.selectFrom(emp)
           .where(emp.empno.eq(7369))
           .fetch();


n  수정
[JPAQuery 또는 JPAQueryFactory 두방법 모두 가능]
Long affectedRow  = new JPAUpdateClause(em, emp)
           .where(emp.empno.eq(empno))
           .set(emp.ename, newEname)
           .execute();        

[JPAQueryFactory 방법]
// update 메소드 내부에서 JPAUpdateClause를 사용한다.
Long affectedRow = queryFactory.update(emp)
           .where(emp.empno.eq(empno))
           .set(emp.ename, newEname)
           .execute();


n  삭제
[JPAQuery 또는 JPAQueryFactory 두방법 모두 가능]

Long affectedRow =new JPADeleteClause(em, emp)
        .where(emp.job.eq(job))
.execute();                 

[JPAQueryFactory 방법]
// delete 메소드 내부에서 JPADeleteClause를 사용한다.
Long affectedRow = queryFactory.delete(emp)
    .where(emp.job.eq(job))
    .execute();

댓글 없음:

댓글 쓰기