프로젝트에 JPA로 Mysql DB를 연결해볼것이다.
1. build.gradle 파일에서 의존성을 추가한다.
dependencies {
...
// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// mysql
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.33'
...
}
의존성을 추가한 후에는 잊지않고 Gradle을 새로고침해주도록 하자.
2. yml 파일에서 DB 연결정보를 입력한다.
spring:
application:
name: stock
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver << JDBC Driver를 쓴다
url: jdbc:mysql://localhost:3306/stock << 연결할 DB를 입력한다.
username: root << Mysql ID
password: onlyroot << Mysql PW
3. DB 테이블과 싱크로율이 맞도록 Entity를 생성한다.
필드명과 타입에 주의한다.
@Entity // 이거 엔티티임
@Data // Getter & Setter를 자동으로 달아준다.
@Table(name = "u_user") // DB에서 사용하는 테이블 이름
public class MemberEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "u_idx") // DB에 명시되어있는 필드 이름
Long userIdx; // 프로젝트 내에서 사용할 이름
@Column(name = "c_idx")
Long customerIdx;
@Column(name = "u_active_yn")
String userActiveYn;
@Column(name = "u_memo")
String userMemo;
@Column(name = "insert_dt")
Long insertDt;
@Column(name = "insert_id")
String insertId;
@Column(name = "update_dt")
Long updateDt;
@Column(name = "update_id")
String updateId;
@Column(name = "delete_yn")
String deleteYn;
}
❗ 주의할점
DB 필드명이 u_idx인데 Entity에는 userIdx로 명시한것이 보일것이다.
JPA는 _로 나눠지는 첫글자가 한글자일때, Repository 내에서 정상동작이 불가능한 현상이 있다.
한글자로 시작하는경우, 한글자 이상이 되도록 적절하게 네이밍해주자.
4. Repository를 생성한다. (여기서는 리스트 조회)
@Repository
public interface MemberRepository extends JpaRepository<MemberEntity,Long> {
List<MemberEntity> findMemberEntitiesByCustomerIdx(Long cIdx);
}
JPA에서는 메소드 이름을 적절하게 지어주면 자동으로 쿼리를 만들어준다. (메소드 명명 규칙)
find : 조건에 맞는 리스트를 가져옴
MemberEntities : 가져올 데이터의 테이블 정보 맵핑(위에서 정의한 Entity)
ByCustomerIdx : 파라미터로 받은 cIdx 데이터를 기준으로 CustomerIdx(c_idx) 검색
@Repository
public interface MemberRepository extends JpaRepository<MemberEntity,Long> {
@Query("SELECT mem FROM MemberEntity mem WHERE mem.customerIdx = :cIdx AND mem.userActiveYn = 'Y'")
List<MemberEntity> findActiveMemberList(Long cIdx);
}
검색해야되는 조건이 복잡하고 이름이 길어지는게 싫다면 @Query로 직접 쿼리문을 작성할 수도 있다.
Entity에 작성된 필드명으로 작성해야하며, 실제 필드명으로 쓰는 실수를 하지 않도록 주의하자.
5. Controller / Service 단을 작성한다.
▼ 데이터를 불러올 MemberService
@Slf4j // 이것도 로그용도
@Service // 서비스에 달아준다.
@RequiredArgsConstructor // 생성자 주입용
public class MemberService {
private final MemberRepository memberRepository;
public Map<String, Object> selectMemberList(JwtTokenDto user) {
Map<String, Object> body = new HashMap<>();
log.debug("selectMemberList user :" + user.toString());
List<MemberEntity> memberEntity = memberRepository.getMemberEntitiesByCustomerIdx(user.getCIdx()); // 위에서 만든 JPA 메소드
body.put("list", memberEntity);
return body;
}
}
▼유저정보를 조회하는 MemberController
@Slf4j // 로그용도
@RequestMapping("/account/member")
@RestController // 컨트롤러에 달아줌
@RequiredArgsConstructor // 생성자 주입용
public class MemberController {
private final MemberService memberService;
/**
* 멤버 리스트 조회
*
* @return 멤버 리스트
* GET /account/member/list
*/
@GetMapping("/list")
public ResponseEntity<Map<String, Object>> selectMemberList(HttpServletRequest request, @RequestParam Map<String, Object> param) {
JwtTokenDto user = new JwtTokenDto(request);
log.info("selectMemberList 진입"); // Slf4j가 있으면 log를 쓸수 있다.
param.put("cIdx", 1);
return ResponseEntity.ok(Map.of(
"code", 200,
"message", "OK",
"body", memberService.selectMemberList(user)
));
}
}
6. 데이터를 확인한다.
'Back-End > JAVA' 카테고리의 다른 글
Spring 프로젝트 시작하기 - 보안 ) Jwt Token 쿠키 발급 (1) | 2024.11.14 |
---|---|
Spring 프로젝트 시작하기 - 예외처리편 (0) | 2024.11.13 |
Spring 프로젝트 시작하기 - 프로파일 설정편 (1) | 2024.11.12 |
Spring 프로젝트 시작하기 - 구조설계 및 테스트편 (1) | 2024.09.25 |
Spring 프로젝트 시작하기 - 생성편 (0) | 2024.09.24 |