본문 바로가기
Develop/JSP

공공데이터 API - 서울 맛집 API로 DB저장 구현하기 (2)

by ys2ys2 2024. 10. 27.

아까 하던거 이어서!

불러온 값들 DB에 저장시키기

 

controller → service → serviceImpl → DAO → Mapper 렛츠고

 


 

inputApiController

 

@PostMapping("/Matzip/inputMatzipDB")
public String inputMatzipDB(@RequestParam("selectedContentIds") String selectedContentIds,
                            HttpSession session, RedirectAttributes redirectAttributes) {

    List<MatzipVO> restaurantList = (List<MatzipVO>) session.getAttribute("restaurantList");
    
    if (selectedContentIds == null || selectedContentIds.isEmpty()) {
        redirectAttributes.addFlashAttribute("message", "음식점 ID를 선택해 주세요.");
        return "redirect:/Matzip/MatzipApi";
    }
    
    if (restaurantList == null) {
        redirectAttributes.addFlashAttribute("message", "세션에서 데이터를 가져올 수 없습니다.");
        return "redirect:/Matzip/MatzipApi";
    }
    
    List<MatzipVO> selectedRestaurants = restaurantList.stream()
            .filter(restaurant -> selectedContentIds.contains(restaurant.getId()))
            .collect(Collectors.toList());
    
    String resultMessage = matzipService.insertMatzipData(selectedRestaurants);
    
    redirectAttributes.addFlashAttribute("message", resultMessage);

    return "redirect:/Matzip/inputMatzipDB";
}

 

restaurantList 이름으로 저장된 데이터(음식점 리스트들!) 가져와서 List<MatzipVO>로 넘긴다.

if문으로 각각 에러 처리

 

List<MatzipVO> selectedRestaurants = restaurantList.stream()으로 사용자가 선택한 ID만 포함해서 필터링 하고

새로운 selectedRestaurants 리스트에 담았다.

 

그러고 selectedRestaurants를 service에 전달하기

 

 


 

 

MatzipService

 

 

인터페이스니까 MatzipServiceImpl에 던져주기

String insertMatzipData(List<MatzipVO> selectedRestaurants);

 

 

 


 

 

MatzipServiceImpl

 

@Service
public class MatzipServiceImpl implements MatzipService {

    @Autowired
    private MatzipDAO matzipDAO;


    @Override
    public String insertMatzipData(List<MatzipVO> selectedRestaurants) {
        try {
            
            for (MatzipVO restaurant : selectedRestaurants) {
                matzipDAO.insertMatzip(restaurant);
            }
            return "음식점 정보가 성공적으로 저장되었습니다.";
        } catch (Exception e) {
            e.printStackTrace();
            return "음식점 정보 저장 중 오류가 발생했습니다: " + e.getMessage();
        }
    }

 

 

selectedRestaurants 리스트에 포함된 MatzipVO를 하나씩 처리하게 했다.

어떻게? DAO의 insertMatzip 불러와서 restaurant 객체 저장하게!

다오 너 나와!

 

 


MatzipDAO

 

 

 

@Repository
public class MatzipDAO {
    
    @Autowired
    private SqlSession sqlSession;
    private static final String MAPPER = "com.human.web.mapper.MatzipMapper";
    

	public void insertMatzip(MatzipVO restaurant) {
        sqlSession.insert(MAPPER + ".insertMatzip", restaurant);
		
	}

 

 

sqlSession.insert 커몬, MatzipMapper에 insertMatzip sql문 기다려! restaurant 줄게!

 

 


 

 

 

MatzipMapper

 

 

<mapper namespace="com.human.web.mapper.MatzipMapper">

    <insert id="insertMatzip" parameterType="com.human.web.vo.MatzipVO">
		INSERT INTO s_matzip (title, addr1, overview, mapx, mapy, tel)
		VALUES (#{title}, #{addr1}, #{overview}, #{mapx}, #{mapy}, #{tel})
	</insert>

 

 

쿼리문 등장

 

insertMatzip한테 왔습니다. s_matzip 테이블에 받아온 값들 챡챡 넣기

여기서 contentid는 auto_increment로 처리해서 따로 넣진 않았습니다.

(contentid로 디테일 페이지 구성하고 댓글 기능 추가)

 

 

 

결과는?

결과

 

 

firstimage는 서울관광재단_음식이미지정보로 찾아서 insert into로 처리~

 


 

 

뽈뽈뽈 서울 맛집 DB 저장 이용법

 

1. 서울관광재단_음식이미지정보.csv에서 가져올 음식점의 이름과 식당ID를 가져온다.

 

서울관광재단_음식이미지정보.csv

 

2. 값을 넣어준다. 11135 송림식당

 

값 넣기

 

 

3. 나온 결과를 확인 후 체크하고 저장한다.

조회 결과

 

4. DB에 저장완료가 뜨면 완료! 이제 firstimage에 csv에서 얻은 이미지URL을 넣어준다.

저장 완료
DB 추가 완료

 

 

DB에 저장된 값 불러오는 백엔드랑 페이지도 다 완성했는데 시간 날 때 정리할 예정..!

 

matzipDetail

 

 

 

 

끝!

 

빨리 끝나고 놀러가고 싶다.. 지쳐 지쳐