sitelink1  
sitelink2  
sitelink3  
extra_vars6  
http://blog.empas.com/ahnyounghoe/13222052


아티클링크와 회원사이에 별점을 부여하는 관계는 M:N 입니다. 별점이란 추천 하나당 부여하는 포인트를 의미합니다.
당연히 한명의 회원은 하나의 링크당은 하나지만, 여러 개의 아티클링크에 별점을 부여할 수 있죠.
반대로 하나의 링크에 대해서도 여러 회원의 별점을 부여할 수 있죠.
객체로써는 상호 메시지 콜이 가능하게(Navigable)하면 컬렉션(Collection) 형태의 멤버로 참조하게 되어 문제가 없죠. 그러나, 관계형 DB의 경우는 단방향성을 지니기 때문에 이를 해소하는 테이블을 만들어야 합니다.
-- ART:USER m:m 해소
DROP TABLE T_ART_USER IF EXISTS CASCADE;
CREATE TABLE T_ART_USER (
 ARTICLELINK_REF INTEGER,
 USERINFO_REF VARCHAR(15),
 CONSTRAINT FK_ART FOREIGN KEY (ARTICLELINK_REF) REFERENCES T_ARTICLELINK(ID),
 CONSTRAINT FK_USER FOREIGN KEY (USERINFO_REF) REFERENCES T_USERINFO(ID)
)
 
대략 위와 같은 테이블이죠. T_ARTICLELINK 테이블의 ID 컬럼을 FK_ART라는 이름으로 참조(제약)하고 그 값을 ARTICLELINK_REF 컬럼에 저장하고, T_USERINFO 테이블의 ID 컬럼을 FK_USER라는 이름으로 참조하고, 그 값을 USERINFO_REF 컬럼에 저장하는 것이죠.

 
이와 같은 화면 요구가 있을 때 별점으로 부과된 항목을 얻는 방법은 몇 가지가 있습니다. 우선 iBatis가 컬렉션 형태의 속성값을 Select문 호출로 설정해주는 기능을 제공하는데 이를 이용한 사례를 보죠.
 
 <resultMap id="article" class="articleLink">
  <result property="id" column="ID" />
  <result property="language" column="LANG" />
  <result property="title" column="TITLE" />
  <result property="link" column="LINK" />
  <result property="regiDate" column="REGI_DATE" />
  <result property="description" column="DESC" />
  <result property="submitter.id" column="USERINFO_REF" />
  <result property="starmarker" select="selectStarmarker" column="id" />
 </resultMap>

 <!-- SELECT Statements -->
 <select id="selectDefaultList" resultMap="article">
  select ID, LANG, TITLE, LINK, REGI_DATE, DESC, USERINFO_REF
  from T_ARTICLELINK
  order by ID DESC
 </select>
 <select id="selectStarmarker" resultClass="userinfo">
  select USERINFO_REF from T_ART_USER
  where ARTICLELINK_REF = #article_id#
 </select>
 
ArticleLink 객체의 starmarker 란 속성이 List 형태라면 하나의 값을 설정할 수가 없습니다. 그래서, 추가적인 select 문 호출을 위해 select 속성 값으로 selectStarmarker를 설정합니다. 그리고, 조건문에 제공할 매개변수를 column 값으로 제공하는 것이죠.
 
이렇게 설정한 후 setStarmarker 메소드가 호출될 때 그 사이즈 정보를 보관하도록 객체를 수정해보죠.
 
public class ArticleLink {
 /**
  * 총 별점
  */
 private Integer stars;
 
 ...
 
 public void setStarmarker(List<UserInfo> starmarker) {
  this.starmarker = starmarker;
  setStars(starmarker.size());
 } 
 
}
 
이제 jsp 페이지를 수정하면 위 그림과 같은 출력이 가능합니다.
 
  <c:forEach items="${articleList}" var="articleLink">
   <tr><td rowspan="4">별점: ${articleLink.stars}</td>
    <td>
    <a href="${articleLink.link}" target="blank">
    ${articleLink.title}</a></td></tr>
   <tr><td><a href="viewUserCtrb.do?user=${articleLink.submitter.id}" target="blank">
    ${articleLink.submitter.id}</a>
    (<fmt:formatDate value="${articleLink.regiDate}" type="date" pattern="yyyy/MM/dd" />)</td></tr>
   <tr><td>${articleLink.description}</td></tr>
   <tr><td>의견 수/카테고리</td></tr>
   </c:forEach>
  </table>
 

번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 704
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 695
81 java.util.MissingResourceException: Can't find bundle for base name xxx, locale ko_KR 황제낙엽 2007.06.21 2667
80 Spring Boot PetClinic Sample Application 황제낙엽 2023.12.21 975
79 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 907
78 Spring WebFlow Introduction (웹개발을 직관적으로) 황제낙엽 2006.12.09 677
77 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 620
76 Spring Security OAuth 황제낙엽 2019.09.05 604
75 <spring:checkbox> tip! 황제낙엽 2007.10.01 535
74 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 427
73 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 415
72 Spring MVC 가 아닌 환경에서 Spring Pojo Bean 사용하기 (Pure Java App 또는 Servlet App) 황제낙엽 2009.10.22 411
71 Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 374
70 스프링 개발팁 황제낙엽 2007.08.17 355
69 Cugain의 샘플프로젝트 jpetstore 분석기 - (5) applicationContext.xml 분석 황제낙엽 2007.04.21 353
68 SimpleFormController 정리 황제낙엽 2007.09.19 350
67 Spring의 Exception 황제낙엽 2007.09.17 329
66 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 310
65 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 301
» Spring MVC 어플리케이션 개발 <11> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 297