wintertreey 님의 블로그
@MVC DB연동 1 본문
차례로 DB연동을 시도해보자. 우선 가장 전통적인 방법.
문제
직급입력시, 직원목록과 인원수가 출력되게 하시오.
값을 입력받을 수 있도록 칸 생성및 get방식으로 넘겨준다.
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/testdb" method="get">
직급입력 :
<input type="text" name="jikwon_jik">
<input type="submit" value="확인">
</form>
</body>
</html>
ListController.java
package pack.controller;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import pack.model.DataDao;
import pack.model.JikwonDto;
@Controller
public class ListController {
@Autowired
private DataDao dataDao;
@GetMapping("/testdb")// @리퀘스트파라미터
public String listProcess(@RequestParam(value="jik") String jikwon_jik,
Model model) {
ArrayList<JikwonDto> list = dataDao.selectData(jikwon_jik);
model.addAttribute("datas", list);
return "show";
}
}
직급을 파라미터로 넘겨받아야한다.
그러기위해 @RequestParameter을 사용했다.
DataDao.java
package pack.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class DataDao {
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
@Autowired
private DataSource dataSource;
public DataDao() {
// TODO Auto-generated constructor stub
}
public ArrayList<JikwonDto> selectData(String jikwon_jik) {
ArrayList<JikwonDto> list = new ArrayList<JikwonDto>();
//int count=0;
try {
conn = dataSource.getConnection();
pstmt = conn.prepareStatement("select * from jikwon where jikwon_jik = ?");
pstmt.setString(1, jikwon_jik);
rs = pstmt.executeQuery();
while (rs.next()) {
JikwonDto dto = new JikwonDto();
dto.setJikwon_no(rs.getString("jikwon_no"));
dto.setJikwon_name(rs.getString("jikwon_name"));
dto.setJikwon_gen(rs.getString("jikwon_gen"));
dto.setJikwon_pay(rs.getString("jikwon_pay"));
list.add(dto);
//count++;
}
//System.out.println("인원수 : "+ count);
} catch (Exception e) {
System.out.println("selectData err: " + e);
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return list;
}
}
해당 직급에 맞는 직원만 출력해야하기에 ?로 값을 넣어준다.
주석처리된 부분을 살펴보면 인원수를 카운트하려고 시도했다는 것을 알수 있다.
그러나 여기는 비즈니스로직부분이고, 결국은 출력하는 화면은 아니기에 의미가 없어서 흔적만 남겨두었다.
출력부분 show.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>직원 목록 (@MVC: DB1 전통적방법) </h3>
<table border="1">
<tr>
<th>사번</th>
<th>직원명</th>
<th>성별</th>
<th>연봉</th>
</tr>
<tr th:each="data:${datas}">
<td>[[${data.jikwon_no}]]</td>
<td>[[${data.jikwon_name}]]</td>
<td>[[${data.jikwon_gen}]]</td>
<td>[[${data.jikwon_pay}]]</td>
</tr>
</table>
<br>인원수 : [[${datas.size}]] 명
<br>인원수:
<span th:text="${datas.size}"></span> 명
</body>
</html>
타임리프를 이용해 출력하는 모양새가 다양하게 있다
마지막 부분 인원수부분을 보면, 같은값 다른방법으로 두번 출력해보았다.
두 방식의 차이점 정리
[[${datas.size}]] | <span th:text="${datas.size}"></span> | |
용도 | 텍스트 콘텐츠 출력 | HTML 요소의 텍스트 콘텐츠 설정 |
출력 방식 | 단순 출력 (텍스트로 렌더링) | 텍스트 설정 (HTML 요소의 콘텐츠) |
HTML 태그 | 텍스트로 출력 (태그는 렌더링되지 않음) | HTML 요소의 텍스트로 렌더링 |
HTML 엔티티 | 자동 인코딩 | 자동 인코딩 |
상황 예 | 텍스트 내용이나 단순 데이터 표시 | HTML 요소의 동적 콘텐츠 설정 |
관련 소스코드는 깃허브의 sprweb8db_legacy, 8_ex를 참고하자.
https://github.com/yoonah0327/spring_source.git
GitHub - yoonah0327/spring_source
Contribute to yoonah0327/spring_source development by creating an account on GitHub.
github.com
'백엔드 > Spring' 카테고리의 다른 글
Spring MVC. @RestController. @GetMapping @PostMapping @ReQuestMapping. (0) | 2024.07.16 |
---|---|
Application yml. Thymeleaf 란? status. jar 배포. (1) | 2024.07.16 |
thymeleaf layout. 머릿글 바닥글. th:block. (0) | 2024.07.16 |
DB 연동4/4_ JPA. DB dialect hibernate. debug. entity dto (2) | 2024.07.14 |
DB 연동3/4_mybatis. lombok annotation. (0) | 2024.07.14 |