/repository/support안에 impl 파일들

public class ProjectRepositoryImpl extends QuerydslRepositorySupport implements
    CustomProjectRepository {

위와 같이 QuerydslRepositorySupport를 extends 한다. 안에 필요한 함수들을 구현해주면 된다.

 

 @Override
  public Page<Project> findAllByFilter(Pageable pageable, ProjectFilter filter) {
    BooleanBuilder builder = new BooleanBuilder();

    if (!StringUtils.isBlank(filter.getDate())) {
      builder.and(project.date.containsIgnoreCase(filter.getDate()));
    }
    if (!StringUtils.isBlank(filter.getTitle())) {
      builder.and(project.title.containsIgnoreCase(filter.getTitle()));
    }
    if(!StringUtils.isBlank(filter.getAddress())){
      builder.and(project.address.containsIgnoreCase(filter.getAddress()));
    }
    if(!StringUtils.isBlank(filter.getTechnology())){
      builder.and(project.technology.containsIgnoreCase(filter.getTechnology()));
    }
    if(!StringUtils.isBlank(filter.getAddress())){
      builder.and(project.purpose.containsIgnoreCase(filter.getPurpose()));
    }

    final JPQLQuery<Project> query = from(project).where(builder);

    List<Project> result = getQuerydsl().applyPagination(pageable, query).fetch();

    return new PageImpl<>(result,pageable,query.fetchCount());

  }

위와 같이 원하는 정보들을 모아서 paging 해준다.

 

물론 /repository/custom 과 /repository 설정은 기본적으로 해준 상태에서 진행해야한다!!!

 

그 후 controller에 pageable 활용

  @GetMapping("")
  public String list(Model model, Pageable pageable, ProjectFilter filter) {

    model.addAttribute("projectList", projectService.findAllByFilter(pageable, filter));
    model.addAttribute("filter", filter);
    return "project/list";
  }

 

❗ paging 원리에 대해선 나중에 다뤄봐야겠다.. ❗

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

[ERROR] 유의해야 할 점  (0) 2021.08.06
[Annotation] @PathVariable  (0) 2021.08.06
[배경] JPA vs JDBC, JPA vs Mybatis, JPA vs Spring Data JPA  (0) 2021.08.06
[설정] 자동망치 기능  (0) 2021.08.06
[설정] application.properties  (0) 2021.08.04

View에 데이터 전달

  • Model 객체 사용
  @GetMapping("")
  public String list(Model model, Pageable pageable, ProjectFilter filter) {

    model.addAttribute("projectList", projectService.findAllByFilter(pageable, filter));
    model.addAttribute("filter", filter);
    return "project/list";
  }

간단히 controller 생성

 

<tr th:each="p: ${projectList}">
          <td scope="row" style="width: 50px"><a th:text="${p.id}"
                                                 th:href="|@{/project/read}/${p.id}|"></a></td>
          <td><a th:text="${p.date}" th:href="|@{/project/read}/${p.id}|"></a></td>
          <td><a th:text="${p.title}" th:href="|@{/project/read}/${p.id}|"></a></td>

model로 받아온 projectList 활용

 

 

  • @ModelAttribute("key") 활용

controller의 함수 위에 @ModelAttribute("원하는 key")를 붙여서 사용

파라미터 안에 선언해줘도 가능

 

❗ 나는 주로 객체를 활용할 듯.. ❗

JDBC

  • JDBC는 DB에 접근하고, SQL을 날릴 수 있게 해주는 자바의 표준 API
  • DriverMAnager를 사용해 각 드라이버들을 로딩, 해제한다.

[출처] https://skyblue300a.tistory.com/7

JPA

  • JPA는 자바 진영 ORM의 API 표준 명세
  • 내부적으로 JDBC를 사용

[출처] https://skyblue300a.tistory.com/7

Spring JDBC(SQL Mapper → MyBatis)

  • JDBC에서 DriveManager가 하는 일들을 JdbcTemplate에게
  • 쿼리문을 사용한다.

[출처] https://skyblue300a.tistory.com/7

Spring Data JDBC

  • Spring data는 Spring에서 DB를 쉽게 다루기 위해 시작한 프로젝트
  • @Query 어노테이션 사용

[출처] https://skyblue300a.tistory.com/7

Hibernate

  • JPA를 구현한 프레임워크
  • Spring은 기본 JPA vendor로 Hibernate를 사용

[출처] https://skyblue300a.tistory.com/7

정리

 

 

❗ 나는 Hibernate를 사용해 구현할 예정..!!!! ❗

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

[Annotation] @PathVariable  (0) 2021.08.06
[Pageable] 페이징 처리 - 기본  (0) 2021.08.06
[설정] 자동망치 기능  (0) 2021.08.06
[설정] application.properties  (0) 2021.08.04
[CRUD] R구현  (0) 2021.08.02

자동망치 기능

  • view쪽을 수정하고 재실행하지 않고 망치를 눌러서 수정된 화면을 확인할 수 있다.(ctrl+shift+r)

intelliJ 위쪽 메뉴바

초록색 망치모양을 클릭한 후 화면에서 ctrl+shift+r을 눌러 새로고침한다.

 

자동망치 설정

  • 의존성 추가
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>

 

  • properties 설정
 <!--- application.yml--->
    devtools:
      livereload:
        enabled: false
      add-properties: false
      restart:
        enabled: false
        
<!--- application-local.yml--->
    devtools:
      livereload:
        enabled: true
      add-properties: true
      restart:
        enabled: false

 

  • Edit Configuration

초록 망치 옆 네모칸 클릭

Active profiles를 local로 설정해준다

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

[Pageable] 페이징 처리 - 기본  (0) 2021.08.06
[배경] JPA vs JDBC, JPA vs Mybatis, JPA vs Spring Data JPA  (0) 2021.08.06
[설정] application.properties  (0) 2021.08.04
[CRUD] R구현  (0) 2021.08.02
[CRUD] C구현  (0) 2021.08.02

효율성을 극대화하기 위해

 

DB 환경

효율성을 높이기 위해 인덱스를 이용해야 한다.

 

인덱스 예시

위와 같이 키 마다 묶여있는 칼럼들이 있는데 그것을 활용해야 쿼리를 수행할 때 빠르게 찾을 수 있다.

만약 저 인덱스 짝들이 맞지 않는다면 전체 테이블을 돌면서 찾게 되고 수행 속도가 느려진다.

데이터양이 적으면 크게 상관 없겠지만 데이터양은 무궁무진하기 때문에.. 효율성이 중요!!!!!!

 

❗ DB수업을 듣지 않고 쿼리를 짜려니 효율성이 떨어진다... 이번 2학기 DB 수업 들으면서 쿼리 짜는 연습이 필요해 보인다. ❗

 

비효율적인 쿼리
효율적인 쿼리

두 개의 쿼리문을 비교해보면 비효율적인 쿼리는 인덱스를 활용하지 않았고 효율적인 쿼리는 인덱스(groupby구문 쪽)를 모두 활용했기 때문에 차이점이 생긴다!

'Computer Science > DataBase' 카테고리의 다른 글

[NoSQL] mongoDB  (0) 2022.12.12
[설정] DB 환경설정하기  (0) 2021.08.06

❗ 환경 : mariaDB, HeidiSQL ❗

❗ 참고로 mariaDB 설치시 HeidiSQL은 자동으로 설치된다 ❗

 

local환경 생성

  • local 세션 세팅

세션 설정

세션의 이름과 암호는 최고 관리자(root)의 암호를 적고 열기 버튼을 누른다

암호는 꼭 기억해둘 것!!

  • 생성한 로컬에 오른쪽 마우스버튼 클릭 → 새로 생성 → 데이터베이스

DB설정

이름은 자신이 만들어둔 C:(로컬 디스크) 안 이름과 같게 설정! spring과 연결 할 땐 properties 이름도 같게 만들어줘야함!!

  • 사용자 추가

사람 모양 아이콘 클릭

추가 버튼을 누르고 사용자 이름과 암호를 spring에 맞게 입력한다.

다음으로 객체 추가 버튼을 눌러 전에 생성한 DB를 클릭하고 체크박스를 알맞게 체크해준다.

❗ 전체 권한 체크는 모든 생성된 DB 관련이니 건들지 말것! 객체 추가를 해준다 ❗

 

'Computer Science > DataBase' 카테고리의 다른 글

[NoSQL] mongoDB  (0) 2022.12.12
[Query] 쿼리의 효율성 - Index  (0) 2021.08.06

+ Recent posts