User_tb에 더미 데이터 추가하기

Jan 30, 2024
User_tb에 더미 데이터 추가하기

1. 쿼리 작성하기

  • DB 폴더 생성하고 쿼리를 작성할 data.sql 파일 생성하기
  • 테이블을 만드는 쿼리를 적어 놓기
→ 실행될 때마다 테이블이 만들어지고 insert가 되어 동일한 데이터가 생성됨
→ 테스트할 때 joinform이 아니라 loginform에서 바로 할 수 있음
notion image
insert into user_tb(username, password, email, created_at) values('ssar', '1234', 'ssar@nate.com', now()); insert into user_tb(username, password, email, created_at) values('cos', '1234', 'cos@nate.com', now());
 

2. yml에서 더미데이터 추가를 위한 설정하기

  • 쉽게 제어가 가능
하면 user에 entity 만들 필요 없음
하지만 entity에서 테이블을 만드는 게 훨씬 편함
ex) 컬럼 명이 바뀌면 user에서도 고치고 sql에서도 고쳐야 함
server: servlet: encoding: charset: utf-8 # 문자 인코딩을 UTF-8로 설정 force: true session: # session 유지 시간 설정 timeout: 30m port: 8080 spring: mustache: servlet: expose-session-attributes: true # session에 속성 노출 설정 expose-request-attributes: true # session에 요청 속성 노출 설정 datasource: # H2 데이터베이스를 사용하는 설정 driver-class-name: org.h2.Driver url: jdbc:h2:mem:test;MODE=MySQL # 연결URL ; H2를 MySQL과 호환되도록 설정 username: sa # 사용자 이름 password: # 사용자 비밀번호 h2: console: enabled: true # 웹에서 콘솔에 접근할 수 있게 활성화 sql: init: data-locations: - classpath:db/data.sql #리소스 폴더(로케이션 파일이 여러개 일 수 있음)를 가리킴 jpa: hibernate: ddl-auto: create show-sql: true properties: hibernate: format_sql: true # 표기 방법 변경 defer-datasource-initialization: true # 데이터 소스 초기화를 지연
  • 테이블이 만들어지고 insert되도록 설정할 것
  • prod는 직접 다 만들어야 안전함
notion image
 

3. UserRepository에서 boolean findUserByUsername() 만들기

  • username에 해당하는 데이터베이스 테이블에서 사용자를 검색
package shop.mtcoding.blog.user; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @Repository // 내가 new 하지 않아도 메모리에 띄울 수 있음 public class UserRepository { private EntityManager em; // 컴포지션 public UserRepository(EntityManager em) { // 생성자 this.em = em; } // username에 해당하는 데이터베이스 테이블에서 사용자를 검색 public boolean findUserByUsername(String username) { // 생성자 Query query = em.createNativeQuery("select * from user_tb where username=?", User.class); query.setParameter(1, username); try { User user = (User) query.getSingleResult(); return true; // 있음 } catch (Exception e) { return false; // 없음 } } @Transactional // DB에 변경을 초래할 떄 사용 public void save(UserRequest.JoinDTO requestDTO) { // 컨트롤러는 정보를 전달하면서 때리고 위임함 System.out.println("UserRepository에 save메서드 호출됨"); Query query = em.createNativeQuery("insert into user_tb(username, password, email) values (?, ?, ?)"); query.setParameter(1, requestDTO.getUsername()); query.setParameter(2, requestDTO.getPassword()); query.setParameter(3, requestDTO.getEmail()); query.executeUpdate(); } // select문은 @Transactional 안해도 됨 public User findByUsernameAndPassword(UserRequest.LoginDTO requestDTO) { System.out.println("UserRepository에 findByUsernameAndPassword메서드 호출됨"); Query query = em.createNativeQuery("select * from user_tb where username=? and password=?", User.class); // 알아서 매핑해줌 query.setParameter(1, requestDTO.getUsername()); query.setParameter(2, requestDTO.getPassword()); try { // 내부적으로 터지면 터지는 위치를 찾아서 내가 잡으면 됨 User user = (User) query.getSingleResult(); return user; } catch (Exception e) { return null; } }
Share article

vosw1