[포트폴리오 페이지]_5단계_db에 데이터 집어넣기

2022. 3. 10. 16:43[Spring]_/[Spring]_포트폴리오 페이지 만들기

728x90
반응형

이전까지 db 연결 및 생태계를 이해하였으니 직접 데이터를 view 단에서 넣어보도록 하겠습니다.

 

Mybatis 의 fullconnection 기능을 사용하니 DAO는 사용하지 않고

주고받을 객체는 VO로 만들겠습니다.

 

view 단에서 데이터를 전달할 함수는 Fetch 함수를 사용하겠습니다.

 

디렉토리 ]

 

1] VO 선언입니다.

package com.yoon.model;

public class MemberVO {
    private String memberId;

    @Override
    public String toString() {
        return "MemberVO{" +
                "memberId='" + memberId + '\'' +
                ", memberPw='" + memberPw + '\'' +
                '}';
    }

    private String memberPw;

    public String getMemberId() {
        return memberId;
    }

    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }

    public String getMemberPw() {
        return memberPw;
    }

    public void setMemberPw(String memberPw) {
        this.memberPw = memberPw;
    }
}

DTO 처럼 getter 와 Setter가 있습니다. 

 

2] Controller 부분

@Controller
public class menuController {

    @Autowired
    private MemberService memberservice;

    @RequestMapping(value="/test/testlogin.do", method= RequestMethod.POST)
    @ResponseBody
    public String loginAuth(@RequestBody Map<String,String> map) throws Exception{


        String ID = map.get("ID");
        String PW = map.get("PW");
        MemberVO member = new MemberVO();

        member.setMemberId(ID);          //회원 id
        member.setMemberPw(PW);          //회원 비밀번호

        System.out.println("jsonElement\n = " + map);

        memberservice.memberJoin(member);
        return "";
    }
    
    }

view 단에서 url 요청시 응답할 Controller 부분입니다.

 

RequestMapping을 통해 해당 url 이 요청시 실행될 것이며, 요청방식은 POST로 받습니다.

받아온 값을 -> fetch로 전달한 JSON 형식의 데이터

를 키값을 기준으로 map 에 저장합니다.

 

그리고 전달받은 값에 ID 라는 key에 저장된 String 값을 ID 에 저장하고

마찬가지로 전달받은 값의 PW 라는 key에 할당된 String 값을 PW에 저장합니다.

 

그리고 VO에서 선언한 객체를 생성자를 통해 하나 만들고

setter의 메소드를 불러와서 각각 지정해줍니다.

 

그리고 상단의 Memberservice memberservice 이 부분이 서비스에 연결되는 부분입니다.

 

3-1 ] Service Interface

package com.yoon.service;

import com.yoon.model.MemberVO;

import java.util.List;

public interface MemberService {
    public void memberJoin(MemberVO member) throws Exception;
    public List<MemberVO> memberFind(MemberVO member) throws Exception;
}

MemberService 는 interface 로 생성합니다. 

해당하는 메소드를 선언하고 이를 상속받을 MemberServiceImpl.java 파일을 만듭니다.

 

3-2 ] Service Implements

import com.yoon.mapper.MemberMapper;
import com.yoon.model.MemberVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
    public class MemberServiceImpl implements MemberService{

        @Autowired
        MemberMapper membermapper;

        @Override
        public void memberJoin(MemberVO member) throws Exception {

            membermapper.memberJoin(member);

        }
        @Override
        public List<MemberVO> memberFind(MemberVO member) throws Exception {

            return membermapper.memberFind(member);

        }
        
    }

 

interface에 지정한 메소드를 override 받고 MemberMapper membermapper; 부분으로 xml 의 쿼리를 불러옵니다.

 

이전에 설정한 RootContext.xml에서 

<mybatis-spring:scan base-package="com.yoon.mapper"/>

해당 pakage 안의 mapper xml을 찾아 매칭시켜 줍니다.

 

만약 mapping이 안된다면 여러가지 이유가 있습니다.

1. xml 파일 내부에 오타

2. id , namespace 불일치

3. 저의 경우입니다. 이걸로 한참 해맸는데요. resources 파일 아래에 해당 com.yoon.mapper을 만들때 한번에 생성하였습니다. 하지만 이럴 경우 spring에서 경로를 찾지 못하는 일이 일어날 수 있습니다.

directory 생성시 하나하나씩만들었더니 정상작동하였습니다.

 

4 ] MemberMapper.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yoon.mapper.MemberMapper">

    <insert id="memberJoin">
        insert into book_member values(#{memberId}, #{memberPw} )

    </insert>

    <insert id="memberFind">
        select * from book_member where MEMBERID = #{memberId} AND MEMBERPW = #{memberPw}
    </insert>

</mapper>

id, namespace 오타를 조심해야 합니다.

해당 insert 안에는 쿼리를 써줍니다.

쿼리는 db에 전달되어 실행되고 값을 반환하게 됩니다.

지금 사용한 쿼리는 단순 입력입니다.

 

5] view 단 만들기 => JSP

fetch 를 사용하였고

첫번째 인자로 url을 

두번째로 data를 보냅니다.

data는 json 객체로 전달이 되며, 

fetch의 경우 method,headers,body는 필수입니다.

idtext , pwtext는 각각의 textfield영역이고 그 입력된 value를 가져온다는 의미입니다.

 

실행결과 -WEB ]

 

실행결과 -DB ]

정상적으로 추가된 모습을 확인할 수 있습니다.

728x90
반응형