가자공부하러!

Spring Boot Hibernate 사용(JPA) 본문

공부/Spring Boot

Spring Boot Hibernate 사용(JPA)

오피스엑소더스 2019. 10. 28. 15:39

참고 : https://gompangs.tistory.com/entry/Springboot-JPAHibernate-%EA%B3%B5%EB%B6%80-%ED%8E%B8

 

1. 적용순서

  > 디펜던시 추가

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

 

  > DB 커넥터 설정, DataSource 설정
    - spring.jpa.database= mysql

 

  > Entity Class 생성

 

  >  CRUD Repository 생성

 

2. 소스코드

  > 설정파일 - application.yml

spring:
  #db config
  datasource: 
    hikari:
      jdbc-url: jdbc:mysql://112.169.197.59:23306/rhymes?characterEncoding=UTF-8&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
      pool-name: hikari-cp
      maximum-pool-size: 30
      minimum-idle: 2
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: 
      password: 
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    open-in-view: false
    properties:
      hibernate:
        show-sql: true
        format_sql: true
    generate-ddl: true
    
      
logging:
  level: 
    org:
     #JPA Hibernate 로깅
     hibernate:
      SQL: DEBUG
      type:
       descriptor:
         sql:
           BasicBinder: TRACE

  > Repository - WishlistHibernateRepository.java

package com.rhymes.app.member.dao;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

import com.rhymes.app.member.model.mypage.MemberProductDTO;

@Repository
public class WishlistHibernateRepository {

	@PersistenceContext
    EntityManager em;

	// select
    public MemberProductDTO findProduct(int seq){
          return em.find(MemberProductDTO.class, seq);
    }

}

  > Controller - MypageWishlistController.java

package com.rhymes.app.member.controller;

import java.security.Principal;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.rhymes.app.member.dao.WishlistHibernateRepository;
import com.rhymes.app.member.model.mypage.MemberStockDTO;
import com.rhymes.app.member.model.mypage.MemberWishlistDTO;
import com.rhymes.app.member.service.MypageWishlistService;

import lombok.extern.slf4j.Slf4j;

/**마이페이지 컨트롤러
 * orderlog : 주문내역
 * wishlist : 찜 목록
 * review : 상품후기
 * points : 적립금
 * couopn : 쿠폰
 * personal : 개인정보수정
 * @author minhj
 *
 */
@Slf4j
@Controller
@RequestMapping("/mypage/*")
public class MypageWishlistController {

	@Autowired	//hibernate repository
	private WishlistHibernateRepository hiberRepo;
	
	
	/**위시리스트 페이지에서 장바구니 담기를 클릭했을 때 모달에 들어갈 페이지를 리턴하는 메소드
	 * @return
	 * @throws Exception 
	 */
	@GetMapping(value = "/wishlist/cart/additem")
	public String showWishListAddCart(Model model, Principal pcp, int p_seq) throws Exception {
		log.info("show WishList AddCart()" + p_seq);
		
		//상품정보
		log.info( hiberRepo.findProduct(p_seq).toString() );
		
		return "member/mypage/sub/wishlist_cart";
	}
	

  > pom.xml

<!-- JPA 2019-10-28 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
</dependency>
<!-- maria db 관련 디펜던시 -->
<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

  > Entity - MemberProductDTO.java

package com.rhymes.app.member.model.mypage;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;

@Getter
@Setter
@ToString
@Entity
@Table(name = "rhyStoreProduct")//카멜표기법은 자동으로 스네이크 표기법으로 변환(ex rhy_store_product)
public class MemberProductDTO {

	@Id
	@GeneratedValue
	private int pSeq;

	private String cName;
	private String pName;
	private String pTitle;
	private String cpCode;
	
	private int pPrice;
	private int bfsPrice;
	
	private String pColor;
	private String c1Name;
	private String c2Name;
	private String c3Name;
	private String nation;
	
	private String mdate;
	private String detail;
	
}

 

 

3. 결과

 

 

4. 에러대응 : 커스텀 Repository를 설정했을 때에는 ...Application(메인메소드)에 @EnableJpaRepositories 어노테이션 추가

package com.rhymes;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@EnableCaching
@SpringBootApplication
@EnableJpaRepositories(repositoryImplementationPostfix = "Default")
public class RhymesApplication {

	public static void main(String[] args) {
		SpringApplication.run(RhymesApplication.class, args);
	}
}

 

Comments