JPA 사용해보기ㅎㅎ

Suyeon·2024년 7월 11일
post-thumbnail

JPA로 DB 연동을 해보겠습니당

1.DB 설치
먼저 연동할 DB를 local에 설치해줍니당
저는 mysql을 사용할건데 docker로 컨테이너를 띄어서 사용하도록 할게용ㅎㅎ(local에 mariadb가 이미 깔려있어서 충돌날까봐ㅠ)

먼저, docker를 설치해줍니다!
https://www.docker.com/products/docker-desktop/

설치가 끝난 후에 터미널에 docker -v 을 입력해주십시요

docker -v 
Docker version 26.1.4, build 5650f9b

잘 설치되었습니다

그 다음 mysql 이미지를 다운받아볼게요

docker pull mysql

이제 컨테이너를 띄어보겠습니다(생성/실행)

docker run --name <container_name> -e MYSQL_ROOT_PASSWORD=<password> -d -p <호스트 포트> <컨테이너 포트> mysql:latest

mysql에 접속해볼까용

suyeon > docker exec -it mysql-container2 bash
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 890
Server version: 8.4.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

잘 접속됩니다

2.DB 연동
프로젝트에 DB를 JPA로 연동해보겠습니다
[build.gradle]

	dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'mysql:mysql-connector-java:8.0.32'
    }

[application.yml]

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:<port>/<database>
    username: root
    password: {password}
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true

3.코드 작성
[JpaController]

@Log4j2
@RestController
@RequestMapping("/api/jpatest")
public class JpaController {

    @Autowired
    private JpaService jpaService;

	//insert 요청
    @PostMapping("/submit")
    public ResponseEntity<JpaEntity> jpaInsert(@RequestBody JpaRequest jpaRequest) {
        log.info("testRequest"+jpaRequest.getText());
        JpaEntity jpaTest = jpaService.saveJpaTest(jpaRequest.getText());
        return new ResponseEntity<>(jpaTest, HttpStatus.CREATED);
    }

	//list 조회
    @GetMapping("/list")
    public ResponseEntity<List<JpaEntity>> jpaSelect() {
        log.info("jpaSelect");
        List<JpaEntity> jpaTest = jpaService.getAllJpaTests();
        return ResponseEntity.ok().body(jpaTest);
    }

}

[JpaRequest]

@Data
public class JpaRequest {
    private String text;
}

[JpaEntity]

@Builder
@ToString
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Entity(name="text")
public class JpaEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String text;
}

[JpaTestRepository]

@Repository
public interface JpaTestRepository extends JpaRepository<JpaEntity,Long> {

}

[JpaService]

@Service
public class JpaService {
    @Autowired
    private JpaTestRepository jpaTestRepository;

    @Transactional
    public JpaEntity saveJpaTest(String text2) {
        JpaEntity testEntity = JpaEntity.builder()
                .text(text2) // text 필드에 text2 값 insert
                .build();
        return jpaTestRepository.save(testEntity);
    }

    @Transactional(readOnly = true)
    public List<JpaEntity> getAllJpaTests() {
        return jpaTestRepository.findAll();
    }

    @Transactional(readOnly = true)
    public Optional<JpaEntity> getJpaTestById(Long id) {
        return jpaTestRepository.findById(id);
    }
}

4.결과


요로코롬 텍스트를 입력 후 [제출] 버튼을 눌롸주면 데이터가 insert 되구욥

데이터가 잘 들어갔는지! [조회] 버튼 클릭해서 DB List를 조회해주면 확인할 수 있슴닷~!

profile
안녕하시렵니까😘

0개의 댓글