아래와 같이 회원 정보와 매출을 jdbctemplate로 return하려고한다.

여기서 코드는 아래와 같다.

다만 우리는 기존 select에서 별칭으로 count(custno)인 count를 같이 return을 해야 한다.

return시 사용할 RowMapper를 기존과 동일하게 사용할 수 없다.

그러므로 우리가 해야할 것은 다음과 같다.

1. count 별칭을 받을 변수를 VO에 추가

2. custno, custname, grade, count(별칭)을 반환할 RowMapper 클래스를 생성

 

그럼 우선 VO와 getter and setter를 진행하자

 

그다음 두번째 DAO에 custno, custname, grade, count(별칭)을 반환할 RowMapper 클래스를 생성한다.

그런데 여기서 의문? BoardRowMapper에 member.setCount를 추가하면 안되는지? 하고 의문점을 가질 수 있다.

그러나 그렇게 하면 일반 list를 출력할 때 맞지 않으므로 SQL 구문 오류가 발생한다.

그러므로 번거로우더라도 새로운 BoardRowMapper 클래스를 만들어서 추가를 해줘야한다.

위와 같이 추가하고 SQL문도 아래와 같이 작성한 후 memberSale 메소드도 만들어주면

private final String MEMBER_SALE = "select m1.custno, m1.custname, m1.grade, sum(m2.price) as count from member_tbl_02 m1"
			+ " join money_tbl_02 m2 on m1.custno=m2.custno group by m1.custno, m1.custname, m1.grade order by count desc";
            
	public List<MemberVO> memberSale(MemberVO vo){
		System.out.println("===> Spring JDBC접속 memberSale()");
		return jdbcTemplate.query(MEMBER_SALE, new BoardRowMapper1());
	}            

아래와 같이 정상 출력이 될 수 있게되어진다.

본인은 member_tbl_02(m1라고 부르겠다) money_tbl_02(m2라고 부르겠다) 두개의 테이블을 조인하여 Group by로 출력하고자한다.

우선 m2에서 동일한 custno으로 Group by 해보도록하겠다.

그런데 select * from money_tbl_02로 하면 아래와 같이 오류가 발생한다.

이유는 그룹으로 묶이기 때문에 전체 레코드를 출력할 수 없는 것이다.

그렇기 그룹으로 묶은 custno 부분을 출력하고 각 custno이 몇개 있는지 count로 출력하도록해야 한다.

아래와 같이 말이다.

 

그럼 이번에는 m1과 m2를 조인해보자

그럼 아래와 같이 조인된 데이터가 출력되는 것을 확인할 수 있다.

여기서 custno과 custno별로 price합계를 구하고자한다.

보다시피 sum(price)되어 아래와 같이 custno와 각 custno 별로 총 얼마의 price가 합해졌는지 확인할 수 있다.

그렇다면 위의 코드를 그대로 두고 select에 custname만 추가해보도록하자

아래와 같이 m1.custname을 select하였으나 group by를 하지않았다.

그런데 아래와 같은 문제가 발생하였다.

이유는 무엇일까?

이유는 custname이 group화되지않았기 때문이다.

즉 아래와 같은식으로되어있기 때문이다.

그러므로 group화하지않았기 때문에 위와 같은 오류가 발생하는 것이며 custname역시 group화를 진행해줘야 한다.

아래와 같이 custname도 group화를 하면 아래와 같이 정상 출력되는 것을 확인할 수 있다.

아래와 같이 사진에서 jstl로 choose를 사용하여 A일 경우 VIP가 표시되도록 설정하고자한다.

그런데 아래와 같이 choose when을 사용했으나

아래 사진과 같이 아무것도 표시 안되는 것을 확인할 수 있다.

이유는 아래 사진에서 확인할 수 있다.

jstl 문법의 경우 ""안에 띄어쓰기가 되어 있을 경우 값을 불러올 수없다.

그러므로 위와 같이 띄어쓰기된 부분을 없애주면

사진과 같이 정상 출력되는 것을 확인할 수 있다.

EL(Expression Language)란 데이터를 표현하기 위한 언어이다.

즉, 다양한 위치에 있는 데이터에 접근하기 위한 언어로 JSP의 기본 문법을 보완하는 역할을 한다(주로 HTML에서 JSP 문법을 없애고자할 때)

 

기본문법

기본문법은 주로 ${표현식 }으로 사용한다.

- 표현식에는 변수명, 속성명, 메소드 구조로 이루어져있다.

- 정수형, 실수형, 문자열형, 논리형, null이 올 수 있다.

 

아래와 같이 사용할 수 있으니 참고하도록하자

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="indexTop.jsp" %>
<section>
<div align="center">
<table border=1>
<tr><td>회원번호</td><td>회원성명</td><td>전화번호</td><td>주소</td><td>가입일자</td><td>고객등급</td><td>거주지역</td></tr>
<c:forEach items="${boardList }" var="board">
<tr>
	<td>${board.custno }</td>
	<td>${board.custname }</td>
	<td>${board.phone }</td>
	<td>${board.address }</td>
	<td>${board.joindate }</td>
	<td>${board.grade }</td>
	<td>${board.city }</td>
</tr>
</c:forEach>
</table>
</div>
</section>
<%@ include file="indexBottom.jsp" %>

 

추가로 상단의 board는 Controller에서 model.addAttribute하여 boardList라는 이름으로 보낸 것이다.

 

이 boardList는 jstl의 c:forEach를 사용하여 board 변수에 저장되어 호출되고 있는 것을 확인할 수 있다.

JSTL이란?

JSP 표준 태그 라이브러리(여러 프로그램이 공통으로 사용하는 코드를 모아놓은 코드의 집합)의 약어로 자신만의 태그를 추가할 수 있는 기능을 제공한다.

주로 JSTL의 Core에서 c를 사용하여 <c:if>, <c:forEach> 등을 사용한다.

 

JSTL을 사용하기 위해선 JSTL Library가 설치되어 있어야 한다.

본인의 경우 pom.xml에서 jstl Libarary를 추가했기 때문에 좌측에 Maven Dependencies에서 확인을 할 수 있다.

 

사용법은 JSP 파일 상단에 아래와 같이 taglib를 include 해준다.

<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>

JSTL 태그 종류 및 사용방법은 아래와 같다.

+ Recent posts