앞선 포스팅에서 json형식의 공공데이터를 받아와 Dto로 변환하는 과정을 보았다. 이제 이 Dto를 db(Mariadb)에 저장할 것이다.
+참고: https://www.youtube.com/watch?v=PrI15vZbJr4&list=PLPtc9qD1979DG675XufGs0-gBeb2mrona&index=5
build.gradle에 아래와 같이 입력해 라이브러리를 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.4'
mariadb와 springboot 프로젝트를 연동하기 위해서는 springboot의 입장에서 mariadb에 접속할 계정이나 관리자의 정보가 필요하다. 이를 application.properties에서 입력해 설정해주어야 한다.
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/mydb
spring.datasource.username=사용자이름
spring.datasource.password=계정비밀번호
#update the schema with the given values.
spring.jpa.hibernate.ddl-auto=update
#To beautify or pretty print the SQL
spring.jpa.properties.hibernate.format_sql=true
#show sql
spring.jpa.properties.hibernate.show-sql=true
#show parameter binding
logging.level.org.hibernate.type.descriptor.sql=DEBUG
logging.level.org.hibernate.SQL=DEBUG
+참고: https://smpark1020.tistory.com/140?category=857916
실제 운영환경에서 활용하기엔 불안하기에 상용에 배포할 경우에는 쿼리를 직접 날리는 것이 맞다.
+참고: https://spring.io/guides/gs/accessing-data-jpa/
이제 객체를 저장할 repository를 구현해야 한다. 그런데 JpaRepository를 이용한다면 놀랍게도 interface만 작성해도 데이터를 DB에 저장하는 것이 가능하다.
public interface SubstationInfoRepository extends JpaRepository<SubstationInfo,Long> {
}
위와 같이 메소드를 선언하지 않고 인터페이스를 정의만 해도 save,findById와 같은 기본적인 DB에의 접근이 가능하다.
저번 포스팅에서 작성한 HomeController 의 try문에서 Jsonobject의 배열 infoArr을 받은 후 아래의 코드를 작성하면 DB에 데이터의 저장이 가능하다.
for(int i=0;i<infoArr.size();i++){
JSONObject tmp = (JSONObject)infoArr.get(i);
SubstationInfo infoObj=new SubstationInfo(i+(long)1,
(String)tmp.get("USE_DT"),(String)tmp.get("LINE_NUM"),
(String)tmp.get("SUB_STA_NM"),(double)tmp.get("RIDE_PASGR_NUM"),
(double)tmp.get("ALIGHT_PASGR_NUM"),
(String)tmp.get("WORK_DT"));
infoRepository.save(infoObj);
}
http://localhost:8080/api 에서 공공데이터api가 제공하는 기간안의 날짜를 입력후 Click를 선택하면 아래처럼 DB에 데이터가 들어간 것을 확인할 수 있다.