프로그래밍/전자정부프레임워크(eGov)

데이터베이스에서 특정값 조회 후 뷰에 뿌리기 - (1)

Jay Tech 2017. 2. 27. 14:40
반응형

페이지에서 특정 값을 데이터베이스에서 조회한 데이터들을 어떻게 뿌릴까?


예를들어 이런식으로 동적 테이블을 만들어야 하는데 어떻게 하지?







기본 하나씩 살펴 보자.




데이터 베이스에서 테이블에 값들이 있을 것이다. 



나라(Country) 테이블이 러시아 인것만 뽑고 싶다. 그러면 어떤 작업부터 해야 할까?


당연히 jsp 뷰가 있어야 할 것이다. (테이블)

부트스트랩을 이용한 표이다.



<div class="container-fluid">

<div class="row">

    <div class="col-md-6">

            <div class="col-md-12">

                <div class="card">

                    <div class="header">

                        <h4 class="title">특정 테이블 조회</h4>

                        <p class="category">나라이름</p>

                    </div>

                    <div class="content table-responsive table-full-width">

                        <table class="table table-hover table-striped">

                            <thead>

                                <th>ID</th>

                            <th>Name</th>

                            <th>Salary</th>

                            <th>Country</th>

                            <th>City</th>

                            </thead>

                            <tbody>

                            <c:forEach items="${tableList}" var="welcomeWebList" varStatus="status">

                            <tr>

                              <td><c:out value="${tableList.id}"/></td>

                              <td><c:out value="${tableList.userName2}"/></td>

                              <td><c:out value="${tableList.age}"/></td>

                              <td><c:out value="${tableList.country2}"/></td>

                              <td><c:out value="${tableList.etc}"/></td>

                              </tr>

                            </c:forEach>

                            </tbody>

                        </table>

                   </div>

               </div>

           </div>

       </div>

   </div>



<c:forEach> 는 jstl인데 이것은 컨트롤러에서 데이터를 넘겨준 것이다. 이따 설명할것임


흐름 중요)


컨트롤러 -> 서비스 -> 서비스임플 -> 매퍼 -> SQL


먼저 SQL 쪽을 보자. 마이바티스 설정을 해주어야 한다. 





위치는 여기다.  sql맵 하위 폴더를 찾아보면 mappers가 있다. 여기에  xml로 sql문을 작성해주면 된다. 이름은 아무거나해도 상관없다. 맵핑만 해주면 되기 때문이다. 맵핑은 어디서 하나?


그 파일안에 첫문단에 


<?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="egovframework.example.welcomeWeb.service.impl.WelcomeWebMapper">


이것을 넣어주자. 마이바티스 설정파일임을 명시해주고 namespace에 맵퍼 파일 경로를 설정해 준다. 폴더 구조를 또 보자.





웰컴 웹 매퍼라는 매퍼 파일이 있다. 이놈이랑 아까 마이바티스 xml파일의 namespace를 매칭 시켜주어야 한다. 경로 설정해주고 namespace 큰따옴표 안에 있는 경로를 CTRL + 마우스 우클릭 해보자. 그러면 설정한 맵퍼 java파일로 자동 이동되야 한다. 반응이 없다면 경로가 매칭이 되지 않은 것이므로 다시 확인해야 한다.


그럼 다시 SQL로 가보자.


여러가지 방법을 이용해 볼것인데 자신한테 맞는 방법을 쓰면 된다.


<!-- 맵으로 받기 -->

   <select id="selectListOne"  resultType="egovMap">

      SELECT ID,

          USER_NAME,

          AGE,

          COUNTRY,

          ETC

      FROM welcome_web

      WHERE 1=1

     <if test='country != null'>

      AND COUNTRY = #{country}

     </if>

   </select>

   

   <!-- VO로 받기-->

   <select id="selectListTwo"  parameterType="countryVO" resultType="egovMap">

      SELECT ID,

          USER_NAME,

          AGE,

          COUNTRY,

          ETC

      FROM welcome_web

      WHERE 1=1

     <if test='countryName != null'>

      AND COUNTRY = #{countryName}

     </if>

   </select>

   

   <!-- String으로 받기 -->

   <select id="selectListThree"  parameterType="String" resultType="egovMap">

      SELECT ID,

          USER_NAME,

          AGE,

          COUNTRY,

          ETC

      FROM welcome_web

      WHERE 1=1

     <if test='_parameter != null'>

      AND COUNTRY = #{_parameter}

     </if>

   </select>





첫 번째는 컨트롤러 쪽에서 맵으로 넘긴것이다. if문안의 country는 컨트롤러 쪽에서 넘긴 key값이다. 즉 map.put("country", [value]); 이런식으로 넣으면 된다.


두 번째는 VO로 받는 것인데 모델이라고 생각하면 편하다. 이것은 parameterType을 정의해주어야 한다. 이것은 이 sql이 값을 받을 때 무슨 형식으로 받을지 설정하는 것이다. 이것은 그냥 쓸 수 없고 sql-mapper-config.xml에 등록을 해주어야 한다.


일단 VO를 간단히 정의했다.


public class CountryVO {

private static final long serialVersionUID = 1L;

private String countryName;


public String getCountryName() {

return countryName;

}


public void setCountryName(String countryName) {

this.countryName = countryName;

}

}





sql-mapper-config의 위치이다.






이안에 


<configuration>

    <typeAliases>

<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>

<typeAlias alias="searchVO" type="egovframework.example.sample.service.SampleDefaultVO"/>

<typeAlias alias="sampleVO" type="egovframework.example.sample.service.SampleVO"/>

<typeAlias alias="countryVO" type="egovframework.example.welcomeWeb.service.CountryVO"/>

    </typeAliases>

</configuration>


이것을 추가한다. 당연히 뒤에는 경로고 앞에는 쓸 이름이다.


그리고 sql로 가서 parameterTpye을 alias에 정의한 이름으로 넣으면 쓸 수 있게 된다. 다시 두번째 방법으로 보면


  <if test='countryName != null'>

       AND COUNTRY = #{countryName}

  </if> 

이런식으로 되어있는데 이것은 VO의 필드이름과 매칭된다.



세 번째는 Stirng으로 받는 것인데 넘길때 스트링으로 넘겨서 sql쪽에서는 paramterType을 String으로 받은 것이다

_parameter는 mapper쪽에서 넘긴 값인데 이것은 예약어 이므로 저렇게 사용하면 된다.



지금까지 SQL설정을 보았는데 다음포스팅에서는 아까 흐름을 말한대로 거꾸로 올라가면서 값을 전달하는 내용을 볼 것이다.





궁금한점 있으면 댓글 남겨주세요~







반응형