커리큘럼(12-30/변경)
01. Java
02. git
03. Database
04. Jsp [Server]
05. HTML,CSS
07. JS
06. 미니프로젝트-2W
08. SpringFramework , SrpingBoot (v)
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
스프링 부트
JPA(Java Persistence API)
JPQL
- 엔티티명은 곧 클래스명
- 엔티티와 속성은 대소문자 구분
- 키워드는 구분하지 않음
- 별칭은 필수(Alias)
- 파라미터전달 @Param(이름), :이름
- 객체를 넘길떄는 #{객체명} 구문을 사용
- sql과 유사하나 엔티티를 사용해서 구문 작성
- select, update, delete 구문을 제공하고, insert는 없음
@Query("select m from Memo m order by m.mno desc")
List<Memo> getList();
@Query("select m from Memo m where m.mno >= :num order by m.text desc")
List<Memo> getList2(@Param("num") Long num);
@Query("select m.mno, m.writer from Memo m where m.writer like %:search%")
List<Object[]> getList3(@Param("search") String param);
- 업데이트 구문은 @Modifying, @Transactional을 반드시 사용
//JPQL - update구문
// update구문 테이블명 set값 value 값
@Transactional
@Modifying
@Query("update Memo m set m.writer = :a where m.mno = :b")
int updateMemo(@Param("a") String writer, @Param("b") Long mno);
@Transactional
@Modifying
@Query("update Memo m set m.writer = :#{#a.writer}, m.text= :#{#a.text} where m.mno = :#{#a.mno }")
int updateMemo2(@Param("a") Memo memo);
// delete
@Transactional
@Modifying
@Query("delete from Memo m where m.mno= :a")
int deleteMemo(@Param("a") Long mno);
- JPL구문의 마지막에 pageable을 넣으면 페이지 처리
@Query("select m from Memo m where m.mno >= :a")
Page<Memo> getListPage(@Param("a") Long mno, Pageable pageable);
네이티브쿼리
// 네이티브쿼리 - jpql이 아닌 sql문을 직접 날리는 방법
@Query(value = "select * from memo where mno = ?",nativeQuery = true)
Memo getNative(Long a);
구현체 만들기
@Override
@Transactional //insert, delete에서 꼭 적어야함
public int updateTest(String writer, long mno) {
String sql = "update Memo m set m.writer = :a where m.mno = :b";
Query query = entityManager.createQuery(sql); //javax타입
query.setParameter("a", writer); //파라미터 저장
query.setParameter("b", mno); //파라미터 저장
int result = query.executeUpdate(); //insert, delete는 execueteUpdate()
return result;
}
@Override
public List<Memo> mtoJoin1(Long mno) {
// inner조인 - 연결되는 데이터가 없으면 안나옴
//String sql = "select m from Memo m inner join m.member x where m.mno >= :mno";
String sql = "select m from Memo m left join m.member x where m.mno >= :mno";
TypedQuery<Memo> query = entityManager.createQuery(sql,Memo.class);
query.setParameter("mno", mno);
return query.getResultList();
}