spring_5일차_MVC_기본세팅/Select

youuu·2022년 10월 24일
0

SPRING

목록 보기
6/33

💼 och07_MVCBoard

🌱 우선은 Dao - DB랑 연결 하는데, 추후 ORM을 통해 연결하는 방법을 배울 예정.

🚩 인터페이스의 장점 :
표준화, 관계가 없는 클래스 구성, 모듈화하기 편하다.

  • Legacy라서 이런 문제가 발생한다.
  • 예제 들어가기 전 pom.xml에 추가할 것? 다운로드 할 것이 필요했다.
  • 👨‍🏫이 주신 pom.xml을 복붙 했는데 오류가 났다. (오라클이 없다?)
  • 해결방법 : C:\Users\admin\.m2를 삭제 -> 👨‍🏫 이 주신 m2를 붙여넣으면 된다.

오류 해결하기

  1. STS 닫기.
  2. m2파일 다운 (압축풀기전)
  3. C:\Users\admin\.m2 파일 삭제
  1. 압축풀기 -> C:\Users\admin\.m2 위치로 (하위폴더로생성x)
  2. C:\Users\admin\.m2\repository\com\oracle\ojdbc6\11.2.0.3 위치에 아래처럼 .jar가 들어가 있으면 완료.

  1. sts 열면 여전히 pom.xml 오류가 떠있다.
    이때 RELEASE 버전을 4.3.7 ->> 4.3.5 로 바꾸거나 스페이스 넣고 저장을 누르면 오류가 사라진다.

한글 처리 해결 : web.xml

 <!--  한글처리       -->
   <filter>
      <filter-name>encodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   
      <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

service = command 라고 부른다?



📂 com.oracle.mvc043

📋 BDto.java

package com.oracle.oMVCBoard.dto;

import java.security.Timestamp;

public class BDto {
	int bId;
	String bName;
	String bTitle;
	String bContent;
	Timestamp bDate;
	int bHit;
	int bGroup;
	int bStep;
	int bIndent;
	
	public BDto() {
		
	}
	
	public BDto(int bId, 			String bTitle, 	 String bName,  
				String bContent,	Timestamp bDate, int bHit, 
				int bGroup, 		int bStep, 		 int bIndent) {
		
		this.bId = bId;
		this.bName = bName;
		this.bTitle = bTitle;
		this.bContent = bContent;
		this.bDate = bDate;
		this.bHit = bHit;
		this.bGroup = bGroup;
		this.bStep = bStep;
		this.bIndent = bIndent;
	}

	public int getbId() {
		return bId;
	}

	public void setbId(int bId) {
		this.bId = bId;
	}

	public String getbName() {
		return bName;
	}

	public void setbName(String bName) {
		this.bName = bName;
	}

	public String getbTitle() {
		return bTitle;
	}

	public void setbTitle(String bTitle) {
		this.bTitle = bTitle;
	}

	public String getbContent() {
		return bContent;
	}

	public void setbContent(String bContent) {
		this.bContent = bContent;
	}

	public Timestamp getbDate() {
		return bDate;
	}

	public void setbDate(Timestamp bDate) {
		this.bDate = bDate;
	}

	public int getbHit() {
		return bHit;
	}

	public void setbHit(int bHit) {
		this.bHit = bHit;
	}

	public int getbGroup() {
		return bGroup;
	}

	public void setbGroup(int bGroup) {
		this.bGroup = bGroup;
	}

	public int getbStep() {
		return bStep;
	}

	public void setbStep(int bStep) {
		this.bStep = bStep;
	}

	public int getbIndent() {
		return bIndent;
	}

	public void setbIndent(int bIndent) {
		this.bIndent = bIndent;
	}
}

context 붙여넣기

Servers - context.xml 에 아래 넣기

<Resource
     name = "jdbc/OracleDB"
     auth = "Container"
     type = "javax.sql.DataSource"
     username = "scott"
     password = "tiger"
     driverClassName="oracle.jdbc.driver.OracleDriver" 
   factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
     url= "jdbc:oracle:thin:@127.0.0.1:1521:xe"
     maxActive="50"
     maxIdle="10"
  />



📋 BDao.java

package com.oracle.oMVCBoard.dao;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class BDao {
	DataSource dataSource;
	
	public BDao() {
		
		try {
			Context context = new InitialContext();
			dataSource = (DataSource) context.lookup("java:comp/env/jdbc/OracleDB");
		} catch (NamingException e) {
			System.out.println("생성자 dataSource --> " + e.getMessage());
			e.printStackTrace();
		}
	}
}



📋 BCommand.java

package com.oracle.oMVCBoard.command;

import org.springframework.ui.Model;

public interface BCommand {
	void execute(Model model);
}



📋 BController.java

package com.oracle.oMVCBoard;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;

import com.oracle.oMVCBoard.command.BCommand;

@Controller
public class BController {
	private static final Logger logger = LoggerFactory.getLogger(BController.class);
	
	BCommand command = null;
	
	
	
}



📋 BController.java

list 여기서 실행.

package com.oracle.oMVCBoard.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.oracle.oMVCBoard.command.BCommand;
import com.oracle.oMVCBoard.command.BListCommand;

@Controller
public class BController {
	private static final Logger logger = LoggerFactory.getLogger(BController.class);
	
	BCommand command = null;
	
	@RequestMapping("list")
	public String list(Model model) {
		logger.info("list start....");
		
		// 실제 MAPPING 할것 적기
		command = new BListCommand();
		command.execute(model);
		return "list";
	}
}

💻 결과화면 :


콘솔창에서도 각각의 bName과 사이즈 9개가 제대로 나왔다.



📋 list.jsp

화면단

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판</title>

<% String context = request.getContextPath(); %>
<link rel="stylesheet" href="<%=context%>/resources/css/board.css" type="text/css">

</head>
<body>
	<h1>게시판</h1>
	<table>
		<tr>
			<td>번호</td><td>이름</td><td>제목</td><td>날짜</td>	<td>히트</td>
		</tr>
	    <c:forEach items="${boardList }" var="mvc_board">
			<tr>
				<td>${mvc_board.bId}</td>
				<td>${mvc_board.bName}</td>
				<td>
					<c:forEach begin="1" end="${mvc_board.bIndent}">-</c:forEach>
					<a href="content_view?bId=${mvc_board.bId}">${mvc_board.bTitle}</a></td>
				<td>${mvc_board.bDate}</td>
				<td>${mvc_board.bHit}</td>
			</tr>
	    </c:forEach>
		<tr>
			<td colspan="5"> <a href="write_view">글작성</a> </td>
		</tr>
	</table>
</body>
</html>



⭐ DTO

📋 BDto.java

Dto : 모든 칼럼 getter, setter

package com.oracle.oMVCBoard.dto;

import java.sql.Timestamp;

public class BDto {
	int bId;
	String bName;
	String bTitle;
	String bContent;
	Timestamp bDate;
	int bHit;
	int bGroup;
	int bStep;
	int bIndent;
	
	public BDto() {
		
	}
	
	public BDto(int bId, 			String bTitle, 	 String bName,  
				String bContent,	Timestamp bDate, int bHit, 
				int bGroup, 		int bStep, 		 int bIndent) {
		
		this.bId = bId;
		this.bName = bName;
		this.bTitle = bTitle;
		this.bContent = bContent;
		this.bDate = bDate;
		this.bHit = bHit;
		this.bGroup = bGroup;
		this.bStep = bStep;
		this.bIndent = bIndent;
	}

	public int getbId() {
		return bId;
	}

	public void setbId(int bId) {
		this.bId = bId;
	}

	public String getbName() {
		return bName;
	}

	public void setbName(String bName) {
		this.bName = bName;
	}

	public String getbTitle() {
		return bTitle;
	}

	public void setbTitle(String bTitle) {
		this.bTitle = bTitle;
	}

	public String getbContent() {
		return bContent;
	}

	public void setbContent(String bContent) {
		this.bContent = bContent;
	}

	public Timestamp getbDate() {
		return bDate;
	}

	public void setbDate(Timestamp bDate) {
		this.bDate = bDate;
	}

	public int getbHit() {
		return bHit;
	}

	public void setbHit(int bHit) {
		this.bHit = bHit;
	}

	public int getbGroup() {
		return bGroup;
	}

	public void setbGroup(int bGroup) {
		this.bGroup = bGroup;
	}

	public int getbStep() {
		return bStep;
	}

	public void setbStep(int bStep) {
		this.bStep = bStep;
	}

	public int getbIndent() {
		return bIndent;
	}

	public void setbIndent(int bIndent) {
		this.bIndent = bIndent;
	}
}



📋 BListCommand.java

Service를 Dao와 연결해주는 것

package com.oracle.oMVCBoard.command;

import java.util.ArrayList;

import org.springframework.ui.Model;

import com.oracle.oMVCBoard.dao.BDao;
import com.oracle.oMVCBoard.dto.BDto;

public class BListCommand implements BCommand {

	@Override
	public void execute(Model model) {
		
		// Service 에서 Dao연결
		BDao dao = new BDao();
		ArrayList<BDto> boardDtoList = dao.boardList();
		System.out.println("BListCommand boardDtoList.size() -->" + boardDtoList.size());
		model.addAttribute("boardList", boardDtoList);
	}
}

👿 화난다... DB에서 commit을 안해서 안떴던 거였다.
🔺🔺🔺 다음부턴 항상 DB넣고 커밋을 때리자.



⭐ DAO

📋 BDao.java

🔺 전엔 setter로 배웠는데 이번엔 생성자로 사용.
setter를 이용할수도, 생성자를 이용할 수도 있다.

sql 작성, get으로 넣어준다.

🔺 이전(jsp)와 차이점 :
jsp 에선 먼저 Board board = new Board(); 처럼 생성하고 바로 값을 넣어줌.
spring에선 생성자를 만들고 각각 값을 get해준 후 list에 add한다.

🔺 try-catch를 두번 잡는다?? >> 왜일까...

🙄 다른방법도 찾아보기...

package com.oracle.oMVCBoard.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import com.oracle.oMVCBoard.dto.BDto;

public class BDao {
	DataSource dataSource;
	
	public BDao() {
		
		try {
			Context context = new InitialContext();
			dataSource = (DataSource) context.lookup("java:comp/env/jdbc/OracleDB");
		} catch (NamingException e) {
			System.out.println("생성자 dataSource --> " + e.getMessage());
			e.printStackTrace();
		}
	}

	public ArrayList<BDto> boardList() {
		ArrayList<BDto> bList = new ArrayList<BDto>();
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet rs = null;
		
		System.out.println("BDao boardList Start ... ");
		
		System.out.println("ArrayList<BDto> bList  ----------> " + bList);
		
		try {
			connection = dataSource.getConnection();
			String sql = "SELECT bId, bName, bTitle, bContent, bDate, bHit,           "
						+ " bGroup, bStep, bIndent      "
						+ "FROM   mvc_board order by bGroup desc, bStep asc";
			preparedStatement = connection.prepareStatement(sql);
			
			System.out.println("BDao sql -->" + sql);
			
			rs = preparedStatement.executeQuery();
			
			//  
			while (rs.next()) {
				int bId 		= rs.getInt("bId");
				String bName 	= rs.getString("bName");
				String bTitle 	= rs.getString("bTitle");
				String bContent = rs.getString("bContent");
				Timestamp bDate	= rs.getTimestamp("bDate");
				int bHit 		= rs.getInt("bHit");
				int bGroup 		= rs.getInt("bGroup");
				int bStep 		= rs.getInt("bStep");
				int bIndent 	= rs.getInt("bIndent");
				
				BDto dto = new BDto (bId, bName, bTitle, bContent, 
									 bDate, bHit, bGroup, bStep, bIndent);
				
				bList.add(dto);
				System.out.println("bName  ==> " + bName);
			}
			
		} catch (Exception e) {
			System.out.println("list dataSource -->" + e.getMessage());
			e.printStackTrace();
		} finally {
			try {
				if(connection != null) 		  connection.close();
				if(preparedStatement != null) preparedStatement.close();
				if(rs != null) 		  		  rs.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return bList;
	}
}
profile
공부중인 주니어 개발자

0개의 댓글