티스토리 뷰


너무 바쁘게 몰아쳐서, 제대로 스프링 이해할 시간도 없었다.


다까먹었지만 다시 생각을 해보자.

1. Client : Client 에서 ajax를 사용하여 Controller를 부른ㄷ다
2. 컨트롤러 : 컨트롤러를 구현하고, 컨트롤러에서 Service를 호출한다.
   Service는 인터페이스고, 실제 구현은 ServiceImpl에서 한다.
3. Service : Service에서 수행을 위한 메서드를(함수를)정의하고 , 
   DAO 객체를 선언 한다.
4. DAO :  실제 DB에 접근하여 데이터를 조작하는 역할만 수행한다.
5. DAO에서 받아온 데이터를 다시 Client 로 가지고 와서 Success부분을 수행한다.

저번 포스팅에서 컨트롤러까지 구현을 했으니, 

이번엔 service부분, Dao부분을 구현하여 쿼리에 들어갔다가 client로 돌아오는 과정을 해보겠다.


5.  Service / ServiceImpl 구현하기

위에서 말했듯, Service는 인터페이스이고, 실제구현은 ServiceImpl에서 이루어진다.

1
2
3
4
5
6
7
8
9
package jdUser.service;
 
import java.util.List;
import jdUser.vo.GetFileVO;
 
 
public interface GetFileService {
    public List<GetFileVO> selectGetFile() throws Exception;
}
cs
GetFileService.java(interface)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package jdUser.serviceImpl;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import jdUser.dao.GetFileDAO;
import jdUser.service.GetFileService;
import jdUser.vo.GetFileVO;
 
@Service("getFileService")
public class GetFileServicelmpl implements GetFileService {
    Logger log = Logger.getLogger(this.getClass());
 
    @Resource(name = "getFileDAO"// @Resource어노테이션
    private GetFileDAO getFileDAO;
 
    public List<GetFileVO> selectGetFile() throws Exception {
        return getFileDAO.selectGetFile();
    }
}
cs
GetFileServiceImpl.java

@Resource 어노테이션

Controller에서 Service 접근을 위한 선언을 한 것과 마찬가지로, 

Service에서는 데이터 접근을 위한 DAO(Data Access Object) 객체를 선언한것이다.

서비스의 selectGetFile 결과값으로 sampleDAO클래스의 getFileDAO 클래스의 selectGetFile 메서드를 호출하고, 

그 결과값을 바로 반환(return) 한 것이다.

* 서비스 영역에서 수행해야 할 비지니스 로직이 목록 조회밖에 없기 때문에 바로 return을 하는것이다.



6. DAO 구현하기

실제로 데이터베이스에 접근하는 DAO를 생성한다.

DAO도 서비스와 마찬가지로, DAO는 interface이고, DAOImpl에서 실제 구현이 이루어진다.

1
2
3
4
5
6
7
8
package jdUser.dao;
 
import java.util.List;
import jdUser.vo.GetFileVO;
 
public interface GetFileDAO {
    List<GetFileVO> selectGetFile();
}
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package jdUser.daoImpl;
import java.util.List;
import org.springframework.stereotype.Repository;
 
import jdUser.common.dao.AbstractDAO;
import jdUser.dao.GetFileDAO;
import jdUser.vo.GetFileVO;
 
@Repository("getFileDAO")
public class GetFileDAOlmpl extends AbstractDAO implements GetFileDAO {
 
    @SuppressWarnings("unchecked")
    @Override
    public List<GetFileVO> selectGetFile() {
        return (List<GetFileVO>) selectList("getFile.selectGetFile"null);
    }
}
 
cs

@Repository 라는 어노테이션을 통해, 이 클래스가 DAO임을 선언한다.

AbstractDAO 를 상속받았고, GetFileDAO를 포함관계로 가지고 있다.


DAO는 데이터베이스에 접근하여 데이터를 조작(가져오거나, 입력) 하는 역할을 수행한다.

MyBatis 프레임워크를 사용하기 때문에 JDBC연결 및 쿼리수행을 편하게 할 수 있다.

JDBC란? Java Database Connectivity API

자바 프로그램 내에서 관계형 데이터베이스에 저장된 데이터에 접근할 수 있도록 도와주는 자바 API이다. 

역할 : 데이터베이스에 연결/ 데이터베이스에 쿼리를 전송하거나, 데이터 업데이트/ 쿼리의 결과에 대한 처리

MyBatis는 프로그램의 소스코드에서 SQL을 분리하여 별도의 XML파일에 저장하고, 소스코드와 SQL을 연결하는 방식으로 작동한다.

여기서는 우리가 실행할 쿼리 이름과 해당 쿼리에 필요한 변수들을 매개변수로 MyBatis의 리스트 조회 메서드를 호출한다.

selectList는 MyBatis의 기본기능으로, 리스트를 조회할 때 사용한다. 

selectList의 메서드의 인자는 2가지이며, 첫번째는 쿼리이름 두번째는 쿼리가 실행되는데 필요한 변수들이다.


7. XML파일 다시 살펴보기

1편 포스팅에서 제일 처음으로 XML파일을 설정했다.(쿼리를 짜주어야 했기 때문이라고..)

위에서 말했던 데로 우리는 MyBatis를 사용하고, 이 프레임워크는 SQL을 분리하여 별도의 XML 파일에 저장하기 때문에 

src/main/resources폴더 밑에 mapper에 작성해야한다.

프로젝트에 여러개의 mapper가 있기 때문에 namespace 속성을 이용하여 mapper간 유일성을 보장해야한다.

중요한것은 모든 쿼리는 "NAMESPACE.SQL ID"의 구조로 구성된다는 것이다.

getFileDAO에서 쿼리아이디를 보면, getFile.selectGetFile의 이름을 가지고 있다. 여기서 selectGetFile앞에 붙은 getFile부분이

XML에서 설정한 namespace 부분이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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="getFile"> //namespace로 mapper의 이름을 지정한다.
   <resultMap id="resultGetFile" type="GetFileVO">
        <result property="idxUserConfig" column="IDX_USER_CONFIG" />
        <result property="configcode" column="CONFIG_CODE" />
        <result property="value" column="VALUE" />
   </resultMap>
      <select id="selectGetFile" resultMap="resultGetFile"> //이 쿼리의 id는 selectGetFile , resultMap은 결과값이 resultGetFile에 담겨 반환된다
        <![CDATA[
        SELECT idx_user_config
                     , config_code
                     , value
        FROM tb_user_config 
        WHERE config_code LIKE '%DL%'
        ]]>
    </select>
</mapper>
cs


8. JSP 구현하기

나는 이미 구현되어 잇는 파일에 div로 추가를 해주는 것이었기 때문에 JSP구현은 간단했다.

1
2
<div><a href="#" class="manual_down"><span>매뉴얼 다운로드</span></a></div>
<div><a href="#" class="client_down"><span>클라이언트 다운로드</span></a></div>
cs


이러케 구현하고 나면 ,

a 태그의 href 안에 내가 DB에 저장해 놓은 url 주소가 들어가고, 클릭시 다운로드가 되게 된다.






참고 : http://addio3305.tistory.com/72


댓글