BACK-END 19

Hibernate

데이터베이스에 저장된 데이터와 프로그램의 객체를 매핑하는 기술. Mybatis와 기능 자체는 비슷하지만 Hibernate는 ORM(Object Relational Mapping) 프레임워크라는 차이점이 있다. ORM (Object Relational Mapping) 1. ORM 관계형 DB 테이블을 객체지향적으로 사용하기 위한 기술 중 하나로 객체(Object)와 관계(Relational)를 연결(Mapping)해주는 기술을 의미한다. ORM을 논할 때 함께 나오는 JPA(Java Persistence API)는 자바 ORM 기술에 대한 자바 API 표준 명세를 의미한다. - DB 테이블 자체를 하나의 객체로 이용한다. - 기존의 방식: 테이블이 변경될 경우 테이블을 수정한 후, 모든 소스에서 추가 수정..

BACK-END/JPA 2023.11.01

JPA의 구현체

JPA(Java Persistence API)의 구현체 1. Hibernate 자바 언어를 위한 ORM 프레임워크. JPA 인터페이스를 구현하며 내부적으로 JDBC API를 사용한다. 특징 - 관계형 데이터베이스와 객체의 패러다임 불일치 문제를 해결할 수 있다. - 영속성 컨텍스트(엔티티를 영구저장하는 환경) 제공 장점 1. 생산성 - SQL을 직접 사용하지 않고, 메소드 호출만으로 쿼리를 수행한다. SQL 반복 작업을 하지 않으므로 생산성이 높아진다. 2. 유지보수 - 테이블 컬럼이 변경되었을 때, 테이블과 관련된 DAO의 파라미터, 결과, SQL 등을 대신 수행한다. 3. 특정 벤더에 종속되지 않음 - JPA는 추상화된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속되지 않는다. - 설정 파일에..

BACK-END/JPA 2023.10.31

[BaseBall GO 리뷰] 후기 게시글 검색

게시글 목록 조회 페이지는 PageRequesetDTO에서 page, size 값만 처리해서 게시글 페이지를 출력시킨다. 이 때, PageRequestDTO 에서 type과 keyword를 추가하면 검색 조건에 따른 게시글을 조회하여 출력시킬 수 있다. 서버 측에서 검색 처리를 위해 DTO에 값을 추가한다. - Controller는 그대로, PageRequestDTO에만 type, keyword를 추가한다. // Controller @GetMapping(value = {"", "/"}) public String list(PageRequestDTO pageRequestDTO, Model model) { model.addAttribute("result", landersService.getList(pageRe..

BACK-END/Springboot 2023.01.30

[BaseBall GO 리뷰] 후기 게시글 등록

※ Thymeleaf 템플릿 엔진(Template Engine) 중 하나. (템플릿 엔진: HTML과 데이터를 결합한 결과물을 만들어주는 도구) JSP와 같이 서버에서 컨트롤러가 전달하는 데이터를 이용하여 클라이언트에게 응답할 브라우저 화면을 동적으로 구성한다. => Spring Boot에서 JSP를 사용하려면 호환 및 환경설정에 어려움을 겪을 수 있기 때문에, Dependency 추가만으로 간편하게 이용할 수 있는 Thymeleaf의 사용을 권장한다. 후기 게시글 등록 LandersStadium 클래스를 기준으로 StadiumDTO를 작성한다. - StadiumDTO 클래스 내부에 경기장 이미지도 포함되어야 하므로 StadiumImageDTO 클래스도 작성해야 한다. - 이 때, StaadiumImag..

BACK-END/Springboot 2023.01.30

[BaseBall GO 리뷰] 후기 게시글 목록 및 후기 게시글 조회

게시글 목록 조회 JPQL의 결과로 나오는 Object[]를 DTO로 변환하여 게시글 목록을 출력할 수 있다. - Objcet[]의 내용을 파라미터로 전달받아서 StadiumDTO를 구성한다. => LandersService의 entityToDTO() 메소드를 이용하여 처리할 수 있다. - entityToDTO의 파라미터로 Member를 처리할 수 있다. 하지만 여기에서는 entity에 Member 정보를 담아서 한 번에 처리하도록 했다. ※ 추후에 변경하는 것이 좋을 것 같다. > 불필요한 데이터의 중복 default StadiumDTO entityToDTO(LandersStadium entity) { StadiumDTO stadiumDTO = StadiumDTO.builder() .sno(entity..

BACK-END/Springboot 2023.01.30

추상 클래스와 인터페이스

추상 클래스 (Abstract class) 클래스들의 공통적인 특성을 추출해서 선언한 클래스. (실체 클래스: 객체를 직접 생성할 수 있는 클래스) 클래스 내에 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 클래스. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성을 가질 수 있다. 추상클래스는 new 연산자를 사용해서 인스턴스를 생성시킬 수 없다. Animal animal = new Animal(); (X) 추상 클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다. (extends 뒤에만 올 수 있는 클래스) class Ant extends An..

BACK-END/JAVA 2023.01.29

indexOf()

indexOf(): 특정 문자의 위치를 찾는다. indexOf(String str): 문자열에서 같은 문자의 위치를 찾는다. indexOf(int ch, int fromIndex): fromIndex의 값에서부터 유니코드표의 값을 이용하여 원하는 문자열을 찾는다. indexOf(String str, int fromIndex): fromIndex의 값에서부터 문자열에서 같은 문자의 위치를 찾는다. 이 때, 찾는 문자열이 없는 경우에는 -1을 리턴한다. str.indexOf(keyword) lastIndexOf(): 특정 문자의 위치를 뒤에서부터 찾는다. lastIndexOf(String str) lastIndexOf(int ch) lastIndexOf(int ch, int formIndex) lastInd..

BACK-END/JAVA 2022.12.23

게시글 삭제하기

화면 조회 페이지에서 진행을 시작한다. 1. read(html) 삭제 $("#btn-delete").on("click", function (e) { if (!confirm("삭제하시겠습니까?")) { return false; } var targetFile = $(".readImg").data("file");// targerFile: 실제 파일 이름 var targetLi = $(".readImg").closest("li");// targetLi : 파일 List }) 화면 단에서 [삭제]를 클릭했을 때 삭제를 위한 프로세스가 진행될 수 있도록 작성한다. 2. Controller @PostMapping("/delete") public String delete(Long sno, RedirectAttribut..

BACK-END/Springboot 2022.10.25

게시글 수정하기

게시글의 정보를 GET 방식으로 불러와 수정 화면에 출력한 후 작업을 진행한다. 1. 게시글 수정 페이지 진입 1) Controller @GetMapping({ "/modify"}) public String modify(long sno, @ModelAttribute("requestDTO") PageRequestDTO requestDTO, Model model, @AuthenticationPrincipal PrincipalDetail principalDetail, RedirectAttributes redirectAttributes) { Long principalMno = principalDetail.getMno(); StadiumDTO stadiumDTO = landersService.getModify(s..

BACK-END/Springboot 2022.10.25