개발

[스프링] Spring(STS3)에서 DB연동하기 (3)-실제 DB데이터 가져오기

꾸릉스토리 2024. 5. 27. 15:36

 

 

우선 간단하게 jsp페이지를 작성해봅니다.

 

이제 index.jsp가 컨트롤러에의해 요청되면 h1태그안의 내용이 web브라우저 화면에 출력이 될 것입니다.

 

 

 

 

컨트롤러로 이동해서 코드를 작성합니다.

 

 

@Controller

-> 컨트롤러로 ioc에서 관리되기위해 어노테이션을 추가합니다.

 

@RequestMapping("login")

-> 해당 설정이 없다면 LoginController하위의 모든 경로를

"login/index" 또는 "login/allList"처럼 입력해야합니다.

해당 설정이 있기 때문에 하위 경로를 "index"로 설정할 수 있습니다.

 

@GetMapping("index")

-> requestMapping과 더해서 웹 페이지에서 /login/index 로 요청이 올 경우

바로 다음 메서드가 실행됩니다.

 

public String index() { return "login/index"; }

-> 요청이 들어올 경우 사용자에게 응답할 페이지를 의미합니다.

기본적으로 views폴더를 바라보며 return값에 따라  login폴더의 index파일을 반환합니다.

 

 

 

프로젝트를 서버로 실행하고 경로를 입력하면 해당 화면처럼 보여질 것 입니다.

 

서버가 정상적으로 실행이되면 위 이미지처럼 콘솔에

 

INFO : 서버가[nnnn] 밀리초 내에 시작되었습니다.

 

같은 메세지가 출력되니 확인하시면 될 것 같습니다.

 

 

 

index.jsp에 a태그를 하나 추가하여 allList페이지로 이동할 수 있도록 코드를 변경합니다.

 

 

 

해당 url값을 컨트롤러에서도 받아줘야하겠죠?

컨트롤러에도 allList를 값으로 받는 메서드 하나를 추가합니다.

 

 

 

또한 페이지 연동을 확인하기 위해 

allList.jsp에도 간단하게 내용을 작성합니다.

 

 

 

설정을 진행하면 index.jsp에서 만들어진 a tag를 클릭하면 login/allList로 이동하게 됩니다.

 

 

 

 

 

 

다음은 service를 연동하는 단계입니다.

 

우선적으로 LoginServiceImpl 클래스로 이동합니다.

 

@Service 어노테이션을 추가하여 IOC에서 관리될 수 있도록 합니다.

또한 LoginService 인터페이스를 상속받습니다.

 

다음은 컨트롤러로 이동합니다.

 

 

 

@Autowired LoginService ls; 로 해당 필드에 맞는 bean을 찾아 주입합니다.

 

또한 불러온 LoginService의 getList를 호출합니다.

 

현재 LoginService에는 getList가 없으니 만들어주도록 하겠습니다.

 

LoginService 인터페이스에서 먼저 코드를 작성합니다.

반환 타입은 LoginDTO타입의 ArrayList 를 반환합니다.

 

이후 LoginServiceImpl로 이동하면 클래스명이 빨간색으로 밑줄이 있을 것입니다.

마우스커서를 올리고 잠시 기다리면 이미지처럼 안내창이 표시됩니다.

 

Add unimplemented methods 를 클릭하시면 자동으로 인터페이스 기능이 오버라이드 됩니다.

 

autowired로 mapper bean을 불러오고 mapper의 getList를 호출합니다.

 

mapper에 getList 메서드가 없으니 설정해줍니다.

 

LoginMapper에 해당 메서드를 추가합니다.

 

 

 

더보기
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.practice.root.mybatis.login.LoginMapper">
	<resultMap type="com.practice.root.login.dto.LoginDTO" id="login">
		<result property="num" column="num"/>
		<result property="id" column="id"/>
		<result property="pwd" column="password"/>
	</resultMap>
	<select id="getList" resultMap="login">
		select * from member_login
	</select>
</mapper>

loginMapper.xml 파일로 이동하여 설정을 진행합니다.

 

resultmap은 db의 컬럼명과 dto의 객체명을 맞춰주기위해 사용되는 코드입니다.

 

property 부분이 dto에서 선언된 객체명이고 column이 db에서 사용되고 있는 컬럼명입니다.

 

resultmap은 select구문을 사용할때만 사용되며 <select> tag의 내부에서 호출되어 사용됩니다.

 

select 태그 내부의 id는 LoginMapper 인터페이스에서 사용한 메서드 명이며 해당 메서드가 호출되면 xml파일에서 

일치하는 이름의 쿼리문이 실행됩니다.

 

 

 

 

다음으로 불러온 값이 저장되는 DTO값을 설정합니다.

 

DB 컬럼수에 맞춰 객체를 생성하고 getter, setter설정을 진행합니다.

 

 

 

참고로 db테이블은 간략하게 num, id, password 값으로 설정이 되어있습니다.

 

테이블에 아무런 값도 없으니 데이터 두개 추가하겠습니다.

insert into member_login VALUES (1, 'aaa', 'aaa');

insert into member_login VALUES (2, 'bbb', 'bbb');

commit;

 

 

 

컨트롤러에는 list값을 간단하게 출력할 수 있는 코드를 추가해둡니다.

 

 

 

 

해당 내용을 추가한 후 프로젝트를 서버로 재시작 합니다.

 

 

 

추가된 db데이터의 id값들이 출력된 것을 확인할 수 있습니다.

 

이제 이 데이터를 jsp페이지로 넘겨주겠습니다.

 

 

 

컨트롤러의 allList부분에 Model model을 파라미터로 받은 후 

model.addAttribute로 데이터를 전달합니다.

 

 

 

 

우선 allList.jsp 페이지에서 정상적으로 받아오는지 확인합니다.

 

정상적으로 불러와지는군요

 

그럼 반복문을 통해 브라우저에 표시하도록 하겠습니다.

 

 

 

 

allList.jsp 의 파일 내용을 변경합니다.

더보기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>allList.jsp 페이지 입니다.</h1>
	<table border="1">
		<thead >
			<th>번호</th>
			<th>아이디</th>
			<th>패스워드</th>
		</thead>
		<tbody>
			<c:forEach var="num" items="${list }">
				<tr>
					<td>${num.getNum() }</td>
					<td>${num.getId() }</td>
					<td>${num.getPwd() }</td>
				</tr>
			</c:forEach>
		</tbody>
	</table>
</body>
</html>

 

forEach문을 사용하기위해 상단 3번째줄처럼 jstl 라이브러리를 불러와서 사용했습니다.

 

forEach문을 보면 for문 내부에서 사용할 변수명은 num이고

해당 num은 list의 배열값을 하나씩 받아서 반복되는 구성입니다.

 

 

다시 웹에서 요청하면 해당 페이지가 보여집니다.

 

 

 

 

 

여기까지 DB연동하여 데이터 가져오는 과정이었습니다.

반응형