본문 바로가기

Framework/SpringBoot

[Spring Boot] JPA Repository

1. 프로젝트 생성 및 설정

dependencies 추가

1) bulid.gradle

 

2) application.properties

server.port = 8081
# JSP
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

# oracle set
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=(db 생성 id)
spring.datasource.password=(db 생성 pw)
spring.datasource.hikari.maximum-pool-size=5

spring.jpa.database-platform=org.hibernate.dialect.OracleDialect
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

# none, create, create-drop, update, validate
spring.jpa.properties.hibernate.hbm2ddl.auto=create #처음 생성 1회 이후 none으로 변경

# show sql data binding
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.orm.jdbc.bind=trace

 

2. 코드 작성

1) Member

package com.study.springboot.jpa;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
@Entity(name = "JPAREPO")
public class Member {
	@Id
	@GeneratedValue
	private Long id;
	private String name;
	private String email;
}

 

2) MemberRepository 인터페이스

package com.study.springboot.jpa;

import java.util.List;
import java.util.Optional;

import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {

	Optional<Member> findByName(String keyword);

	Optional<Member> findByEmail(String keyword);

	List<Member> findByNameLike(String keyword);
}

 

3) MemberService

package com.study.springboot.jpa;

import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class MemberService {
	@Autowired
	private MemberRepository memberRepository;
	
	public void insert() {
		Member member;
		member = Member.builder().name("홍길동").email("test01@test.com").build();
		memberRepository.save(member);
		member = Member.builder().name("김철수").email("test02@test.com").build();
		memberRepository.save(member);
		member = Member.builder().name("이영희").email("test03@test.com").build();
		memberRepository.save(member);
		member = Member.builder().name("박길동").email("test04@test.com").build();
		memberRepository.save(member);
		member = Member.builder().name("최길동").email("test05@test.com").build();
		memberRepository.save(member);
	}
	
	public List<Member> selectAll() {
		return memberRepository.findAll();
	}
	
	public Optional<Member> selectId(Long search) {
		Optional<Member> member	= memberRepository.findById(search);
		return member;
	}
	
	public Optional<Member> selectName(String search) {
		Optional<Member> member = memberRepository.findByName(search);
		return member;
	}
	
	public Optional<Member> selectEmail(String search) {
		Optional<Member> member = memberRepository.findByEmail(search);
		return member;
	}
	
	public List<Member> selectNameLike(String search) {
		List<Member> member = memberRepository.findByNameLike(search);
		return member;
	}
}

 

4) MyController

package com.study.springboot.jpa;

import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class MyController {
	@Autowired
	private MemberService memberService;
	
	@RequestMapping("/")
	public String root() throws Exception {
		return "menu";
	}
	
	@RequestMapping("/insert")
	public String insert(Member member, Model model) {
		memberService.insert();
		return "insert";
	}
	
	@RequestMapping("/selectAll")
	public String selectAll(Model model) {
		List<Member> result = memberService.selectAll();
		model.addAttribute("members", result);
		return "selectAll";
	}
	
	@RequestMapping("/selectId")
	public String selectById(@RequestParam("id") Long search, Model model) {
		Optional<Member> result = memberService.selectId(search);
		model.addAttribute("member", result.get());
		return "select_id";
	}
	
	@RequestMapping("/selectName")
	public String selectByName(@RequestParam("name") String search, Model model) {
		Optional<Member> result = memberService.selectName(search);
		model.addAttribute("member", result.get());
		return "select_name";
	}
	
	@RequestMapping("/selectEmail")
	public String selectByEmail(@RequestParam("email") String search, Model model) {
		Optional<Member> result = memberService.selectEmail(search);
		model.addAttribute("member", result.get());
		return "select_email";
	}
	
	@RequestMapping("/selectByNameLike")
	public String selectByNameLike(@RequestParam("name") String search, Model model) {
		String name = search + "%";
		List<Member> result = memberService.selectNameLike(name);
		model.addAttribute("member", result);
		return "select_name_list";
	}
}

 

 

3. 화면 구성 및 실행 결과

1) menu.jsp

 

2) insert.jsp

 

insert 실행 후 설정 변경

create >> none

 

3) selectAll.jsp

 

 

4) select_id.jsp

 

 

5) select_name.jsp

 

 

6) select_email.jsp

 

 

7) select_name_list.jsp