저번 게시글에서 sql 쿼리를 짜고 MVC에 대해 알아봤다. 오늘은 디비 연동해서 이 쿼리를 바탕으로 mvc로 웹 출력하는 걸 해보겠다.
.
.
.
이번 시간엔 조회만 해볼 것이다.
css파일은 따로 만들어서 link로 연결해줬다.
<link href="css/index.css" rel="stylesheet">
<title>MVC Ex</title>
</head>
<body>
<header>
<h1>매장별 커피 판매관리 ver 1.0</h1>
</header>
<nav>
<a href="">판매등록</a>
<a href="">판매현황조회</a>
<a href="index.jsp">홈으로</a>
</nav>
<section>
<h3>매장별 커피 판매관리 프로그램</h3>
<p>
매장별 커피 판매를 관리하기 위한 프로그램이다.
</p>
<ol>
<li>판매등록, 판매현황조회 테이블을 추가한다</li>
<li>페이지를 작성한다.</li>
<li>올바르게 구현되었는지 확인한다.</li>
</ol>
</section>
<footer>
<h2>Coffee Sales Management Program</h2>
</footer>
</body>
</html>
nav부분 링크는 Controller에서 정해준 이름으로 다시 넣어준다.
조회, 등록 jsp 파일은 위에 index 파일을 복사해서 section 부분만 변경해주면 된다.
.
우선, 가장 쉬운 DTO에 데이터를 넣을 것이다.
public class TotalSellDTO {
String saleno;
String pcode;
String saledate;
String scode;
String name;
String amount;
String total;
public String getSaleno() {
return saleno;
}
public void setSaleno(String saleno) {
this.saleno = saleno;
}
public String getPcode() {
return pcode;
}
public void setPcode(String pcode) {
this.pcode = pcode;
}
public String getSaledate() {
return saledate;
}
public void setSaledate(String saledate) {
this.saledate = saledate;
}
public String getScode() {
return scode;
}
public void setScode(String scode) {
this.scode = scode;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
@Override
public String toString() {
return "DTO [saleno=" + saleno + ", pcode=" + pcode + ", saledate="
+ saledate + ", scode=" + scode + ", name=" + name
+ ", amount=" + amount + ", total=" + total + "]";
}
public TotalSellDTO(String saleno, String pcode, String saledate, String scode,
String name, String amount, String total) {
super();
this.saleno = saleno;
this.pcode = pcode;
this.saledate = saledate;
this.scode = scode;
this.name = name;
this.amount = amount;
this.total = total;
}
public TotalSellDTO() {
super();
// TODO Auto-generated constructor stub
}
}
테이블 전체를 조회하는 것이여서 모두 넣어주고 setter, getter와 toString을 해주었다.
DTO는 데이터를 저장하고 꺼내오는 곳이여서 이게 끝이다. 👍
.
.
public class DAO {
String driver = "나의_database_driver";
String url = "나의_database_url";
String user = "나의_username";
String password = "나의_password";
Connection con;
public void dbcon(){
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
if( con != null) System.out.println("db ok");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
자신의 디비 정보를 적고 dbcon에 디비 연결을 수행하는 메서드를 만들어준다.
여기 밑에 조회와 등록 DAO를 만들 때 dbcon을 호출해서 사용하면 된다.
.
.
// 조회
public ArrayList<TotalSellDTO> selectList(){
dbcon();
ArrayList<TotalSellDTO> list = new ArrayList<>();
String sql=" select s.saleno , s.pcode , to_char(s.saledate , 'yyyy-mm-dd') , s.scode , p.name ,s.amount, p.cost* s.amount ";
sql+=" from tbl_salelist_01 s ";
sql+=" join tbl_product_01 p ";
sql +=" on s.pcode = p.pcode " ;
try {
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while( rs.next()){
TotalSellDTO item = new TotalSellDTO(rs.getString(1),
rs.getString(2),rs.getString(3),rs.getString(4),
rs.getString(5),rs.getString(6),rs.getString(7));
list.add(item);
}
pst.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
쿼리는 저번 게시물에서 짰던 쿼리를 String sql 부분에 넣었다.
이렇게 ArrayList에 넣고 while문으로 꺼내면 된다.
.
.
@WebServlet("/select")
public class TotalSellServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DAO dao = new DAO();
ArrayList<TotalSellDTO> list = dao.selectList();
request.setAttribute("list", list);
request.getRequestDispatcher("WEB-INF/views/TotalSell.jsp").forward(request, response);
}
/select는 처음에 만들었던 index.jsp 파일 '판매현황조회' url 부분에 넣을 이름이다.
extends로 'HttpServlet'의 기능을 상속받아 사용했다.
doGet 메서드로 request와 response 매개변수를 사용한다. (결과를 jsp페이지로 전달하는 역할)
DAO 데이터베이스 객체를 생성한다.
'dao.selectList()'를 호출하여 DTO에서 만든 객체 목록을 가져온다.
list라는 이름으로 객체 목록을 요청에 추가한다.
.
.
처음에 만든 index.jsp 파일에서 section 부분만 변경해주면 된다.
<section>
<h3>판매현황</h3>
<table>
<tr>
<td>비번호</td>
<td>상품코드</td>
<td>판매날짜</td>
<td>매장코드</td>
<td>상품명</td>
<td>판매수량</td>
<td>총판매액</td>
</tr>
<%
ArrayList<TotalSellDTO> list = (ArrayList<TotalSellDTO>)request.getAttribute("list");
for(TotalSellDTO t : list){
%>
<tr>
<td><%=t.getSaleno() %></td>
<td><%=t.getPcode() %></td>
<td><%=t.getSaledate() %></td>
<td><%=t.getScode() %></td>
<td><%=t.getName() %></td>
<td><%=t.getAmount() %></td>
<td><%=t.getTotal() %></td>
</tr>
<%} %>
</table>
</section>
데이터는 'request.getAttribute("list")'를 통해 전달된 "list"라는 이름의 속성에서 가져온다.
'<%=t.getSaleno() %>'로 DTO 객체의 데이터를 가져와 반복문을 사용해서 모든 데이터를 출력한다.
.
.
.
.
.
index.jsp 페이지
.
여기서 판매현황을 누르면 조회가 나옴
이렇게 쿼리가 촤르륵 잘 나온다~~ 😊😊😊
.
.
.
.
다음 시간엔 등록이다!!