[Spring] - (3)데이터베이스 연동

2022. 10. 9. 12:58Dev.Program/Java & Spring

728x90

> 우리가 지금까지 배운 건 첫 번째 형태

  • 이런 부분들이 이름이 바뀌게 되면 수정할 게 너무 많아진다(전부 일일이 찾아서 바꿔야함)
  • 이런 중복을 줄이기 위해 2번째형태(한 번만 수정하게) / 3번째형태(0 번 수정 : xml파일 사용)가 있음

 

======== service 패키지에 MemService 인터페이스 만들기

package com.itwillbs.service;

// 부모 인터페이스 MemService
public interface MemService {
// 추상메서드(자식은 이 추상메서드를 상속받아서 씀)
public void insert();
}

 

< MemServiceImpl.java >

  • MemService 상속(구현)받기



======== DAO 에 MemDAO 인터페이스 만들기

package com.itwillbs.DAO;

public interface MemDAO {
// 부모인터페이스  추상메서드
public void insert();
}

 

< MemDAOImpl.java >

  • MemDAO 상속(구현)받기

 

< MemberController.java >

@RequestMapping(value = "/insert", method = RequestMethod.POST)
public String insertPost(MemberBean mb) {
logger.info("Welcome insertPost!");
System.out.println(mb.getId());
System.out.println(mb.getPass());
System.out.println(mb.getName());
System.out.println("회원가입 처리");
// 1. 객체 생성 => 3군데 수정 필요
// MemServiceImpl memServiceImpl = new MemServiceImpl();
// memServiceImpl.insert();
// 2. 부모=자식 형태로 객체생성

// ⇒ 이름이 변경되면 1군데 수정 필요(↓자식클래스만 바꾸면 됨)
MemService memService = new MemServiceImpl();
memService.insert();
return "redirect:login";
}

 

< MemberServiceImpl.java >

package com.itwillbs.service;

import com.itwillbs.DAO.MemDAO;
import com.itwillbs.DAO.MemDAOImpl;

// 처리 담당(Service)

@Override
public class MemServiceImpl implements MemService {
public void insert() {
System.out.println("MemServiceImpl - insert()");
// 1. 객체생성 => 3군데 수정 필요
// MemDAOImpl memDAOImpl = new MemDAOImpl();
// memDAOImpl.insert();
// 2. 부모=자식 객체생성 => 1군데 수정 필요
MemDAO memDAO = new MemDAOImpl();
memDAO.insert();
}
}
  • http://localhost:8080/myweb/insert 링크부터 시작!
  • 가입처리 해보기!
  • 회원가입 눌렀을 때 콘솔창
  • 업캐스팅과 다형성을 응용해서 2번째 방법을 만들어냄!

 

> 한 군데도 수정하고 싶지 않아서 3번째 방법을 고안해냄! = 스프링 형태

  • 원래는 부모=자식인데 여기선 그렇게 안하고 스프링파일 xml 에서 자식객체 생성!
  • 그럼 xml 만 바뀌면 싹 바뀔 수 있다!

부모=자식이 사용되는 곳 ⇐ 스프링파일 xml 에서 자식 객체생성 (필요한 곳에 주게끔)

스프링에서 객체 생성하는 방식 : 의존관계 주입(DI : Dependency Injection)

⇒ 객체 생성(new)은 다른 말로 의존관계라고 함!

set메서드 / 생성자

 

< MemberController.java >

MemService memService;

public void setMemService(MemService memService) {
this.memService = memService;
}
  • 멤버변수로 추가!

  • xml 을 전달해서 set메서드() 호출 후 부모에게 전달!
  • 이렇게 하면 new(객체생성) 보다 복잡해보이지만 수정할 때 용이하다!

 

< MemServiceImpl.java >

// 처리 담당(Service)
public class MemServiceImpl implements MemService {
// 멤버변수
// MemDAO memDAO = new MemDAOImpl();
MemDAO memDAO;

public void setMemDAO(MemDAO memDAO) {
this.memDAO = memDAO;
}

@Override
public void insert() {
System.out.println("MemServiceImpl - insert()");
// 1. 객체생성 => 3군데 수정 필요
// MemDAOImpl memDAOImpl = new MemDAOImpl();
// memDAOImpl.insert();
// 2. 부모=자식 객체생성 => 1군데 수정 필요
// MemDAO memDAO = new MemDAOImpl();
// memDAO.insert();
// 3. 부모=자식이 사용되는 곳 <= 스프링파일 xml 에서 자식 객체생성 (필요한 곳에 주게끔)
//    스프링에서 객체 생성하는 방식 : 의존관계 주입(DI : Dependency Injection)
memDAO.insert();
}
}
  • 똑같이 멤버변수로 만들고 / setter 만들고 / 호출

 

< servlet-context.xml >

  • 지금은 myweb 만 스캔하게 되어있는데 서비스랑 DAO 도 스캔하게끔 추가해주기
<context:component-scan base-package="com.itwillbs.myweb" />
<context:component-scan base-package="com.itwillbs.service" />
<context:component-scan base-package="com.itwillbs.DAO" />
  • 추가

 

< MemServiceImpl.java >

  • 서비스를 담당하는 거라고 어노테이션 적어주기
  • @Service

  • 객체생성 자동으로 하게끔 set메서드 위에 @Inject 표시해주기!

 

< MemDAOImpl.java >

  • DB 작업만 하는 거라고 어노테이션 적어주기
  • @Repository

 

< MemController.java >

  • 객체 생성을 자동으로 하게끔 표시해주기
  • @Inject

 

< root-context.xml >

<bean id="memController" class="com.itwillbs.myweb.MemController"></bean>
<bean id="memService" class="com.itwillbs.service.MemServiceImpl"></bean>
<bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"></bean>
  • 객체 생성 자동으로 할 수 있게 추가해주기

  • bean 안에 property 만들기 : name 자동완성 할 수 있음! (Ctrl + Space)
  • set 메서드 호출하는 게 property ⇒ set메서드가 있기 때문에 자동완성이 됨!
  • 값을 가져오는 게 ref
  • bean은 객체 생성
  • 이런식으로 xml 에서 값을 넘겨주는 거
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="memController" class="com.itwillbs.myweb.MemController">
<property name="memService">
<ref local="memService"/>
</property>
</bean>
<bean id="memService" class="com.itwillbs.service.MemServiceImpl">
<property name="memDAO">
<ref local="memDAO"/>
</property>
</bean>
<bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"></bean>

</beans>
  • 완성된 코드!

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="memController" class="com.itwillbs.myweb.MemController">
<!-- <property name="memService"> -->
<!-- <ref local="memService"/> -->
<!-- </property> -->
<property name="memService" ref="memService"/>
</bean>
<bean id="memService" class="com.itwillbs.service.MemServiceImpl">
<!-- <property name="memDAO"> -->
<!-- <ref local="memDAO"/> -->
<!-- </property> -->
<property name="memDAO" ref="memDAO"/>
</bean>
<bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"></bean>

</beans>
  • 한줄로 축약 가능! ⇒ 코드가 한결 간단해진다
  • 3단계 방법은 여기 페이지만 수정하면 되기 때문에 유지보수성도 좋아짐!

 

>

  • 멤버변수 은닉화!



> insert 작업 해보기(DB 연동해서!)

< MemverService.java >

  • insert 할 때 mb받아오도록

> 모든 .java 의 insert() 메서드 매개변수 안에 MemberBean mb 넣기!

> 각 처리 작업은 Service 단에서 진행

< MemServiceImpl.java >

// 가입날짜 처리
mb.setReg_date(new Timestamp(System.currentTimeMillis()));
memDAO.insert(mb);

 

> 데이터베이스 연동

  • JDBC 프로그램 설치
  • Spring JDBC 프로그램 설치

⇒ 스프링은 자동으로 다운받아지게끔 할 수 있다 (원래는 우리가 프로그램설치해서 폴더 안에 넣어줬다)

 

  • 여기에 자동으로 설치되어있음! 근데 DB는 아직 없다!
  • Maven Dependencies 자동으로 프로그램 설치 도와줌
  • 프로그램 설치 목록 파일 : pom.xml ⇒ 설치하고자 하는 프로그램 목록들

 

> https://mvnrepository.com/ 메이븐 프로그램 다운 받는 사이트

원하는 파일 다운 가능

< 첫번째 파일 다운 >

  • mysql 자바랑 연결하는 파일
  • 파일을 다운받는 게 아니라 이렇게 코드가 있음!

 

< pom.xml >

  • 코드만 적어 넣으면 이렇게 파일이 자동으로 생김(코드 지우면 파일도 사라짐)

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>


< 두번째 파일 다운 >

  • 이건 아무거나 다운!

  • 코드에 스프링 버전에 따르겠다고 표시해줌
  • 그럼 자동으로 파일 만들어짐!

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>



> DB 연동 : 우리가 썼던 Context.xml 내용을 root-context.xml 안에 적어줄 거

< root-context.xml >

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jspdb1"/>
<property name="username" value="jspid"/>
<property name="password" value="jsppass"/>
</bean>
  • 형광펜 부분은 DriverManager 적고 자동완성
  • ref 는 참조주소, value 는 값! 여기는 value 를 적어준다

 

< MemDAOImpl.java >

  • SimpleJdbcTemplate
package com.itwillbs.DAO;

import javax.sql.DataSource;
import javax.inject.Inject;

import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import com.itwillbs.domain.MemberBean;

// DB 작업 하는 공간(DAO)
@Repository
public class MemDAOImpl implements MemDAO {
// SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource);
private SimpleJdbcTemplate template;

@Inject
public void setDataSource(DataSource dataSource) {
template=new SimpleJdbcTemplate(dataSource);
}

@Override
public void insert(MemberBean mb) {
System.out.println("MemDAOImpl - insert()");
}
}

< root-context.xml >

<bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
  • 추가해주기!

 

< MemDAOImpl.java >

@Repository
public class MemDAOImpl implements MemDAO {

// SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource);
private SimpleJdbcTemplate template;

@Inject
public void setDataSource(DataSource dataSource) {
template=new SimpleJdbcTemplate(dataSource);
}

String insertsql = "INSERT INTO member(id, pass, name, reg_date) values(?,?,?,?)";
@Override
public void insert(MemberBean mb) {
System.out.println("MemDAOImpl - insert()");
template.update(insertsql, mb.getId(), mb.getPass(), mb.getName(), mb.getReg_date());
}

}
  • 추가해주기!

 

> http://localhost:8080/myweb/insert 실행해보기!

  • 회원가입 버튼 누르면
  • mysql(DB)에 들어감! ⇒ 연동 성공!


< MemController.java >

  • POST 방식일 때만 MemberBean 받음

 

##

  • 세션은 자바단에서 바로 쓸 수 없기 때문에 이렇게 객체생성해서 받아줘야함

 

>

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String loginPost(MemberBean mb, HttpSession session) {
System.out.println(mb.getId());
System.out.println(mb.getPass());
System.out.println("로그인처리");
// 리턴값 MemberBean mb2 = userCheck(mb);
MemberBean mb2 = memService.userCheck(mb);
// 아이디 비밀번호 일치하면 mb2 회원정보 모두 가져오기
if(mb2!=null) {
// 세션값 생성 "id", id
}
return "redirect:main";
}
  • 메서드 userCheck() 만들기

  • 메서드 자동완성 해주기(userCheck() 메서드 만들기)

< MemService.java >

// 부모 인터페이스 MemService
public interface MemService {
// 추상메서드(자식은 이 추상메서드를 상속받아서 씀)
public void insert(MemberBean mb);

public MemberBean userCheck(MemberBean mb);

}
  • 자동완성
  • 이렇게 추상메서드 만들고 이걸 상속받는 메서드 만들기

< MemServiceImpl.java >

@Override
public MemberBean userCheck(MemberBean mb) {
System.out.println("MemServiceImpl - userCheck()");

return memDAO.userCheck(mb);
}
  • 추가해주기
  • 메서드 자동완성 누르기

 

< memDAO.java >

public interface MemDAO {
// 부모인터페이스  추상메서드
public void insert(MemberBean mb);

public MemberBean userCheck(MemberBean mb);
}
  • 추상메서드 구현하고 이걸 상속받는 메서드 만들기

< MemDAOImpl.java >

// MemberBean mb = new MemberBean();

// mb.setId(rs.getString("id"));

우리는 원래 위와 같이 rs.getXX 이런식으로 들고와서 멤버빈 객체 생성 후 결과에 담고 가져가고 이랬는데, 스프링에서는 실행만하면 알아서 rs 에서 뽑아서 빈에 자동으로 담아줌!

> SELECT

  • 물음표가 없을 땐 이렇게 query 로 넣음
  • 그치만 우리는 물음표(id=?, pass=?)가 있기 때문에
  • queryForObject();

 

  • RowMapper

  • BeanPropertyRowMapper
// id, pass 일치하면 회원정보 모두 가져오기
String userChecksql = "SELECT * FROM member WHERE id=? AND pass=?";
@Override
public MemberBean userCheck(MemberBean mb) {
// MemberBean mb = new MemberBean();
// mb.setId(rs.getString("id"));
RowMapper<MemberBean> mapper = new BeanPropertyRowMapper<MemberBean>(MemberBean.class);
return template.queryForObject(userChecksql, mapper, mb.getId(), mb.getPass());
}
  • 추가해주기

 

< MemController.java >

// login  POST 방식
// 로그인 처리
// main.jsp
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String loginPost(MemberBean mb, HttpSession session) {
System.out.println(mb.getId());
System.out.println(mb.getPass());
System.out.println("로그인처리");
// 리턴값 MemberBean mb2 = userCheck(mb);
MemberBean mb2 = memService.userCheck(mb);
// 아이디 비밀번호 일치하면 mb2 회원정보 모두 가져오기
if(mb2!=null) {
// 세션값 생성 "id", id
session.setAttribute("id", mb.getId());
}
return "redirect:main";
}

 

< main,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>Insert title here</title>
</head>
<body>
<h1>/WEB-INF/views/main.jsp</h1>
<c:if test="${empty sessionScope.id}">
<c:redirect url="./login"/>
</c:if>
${sessionScope.id }님 로그인 하셨습니다.
<input type="button" value="로그아웃" onclick="location.href='./logout'"><br>
<a href="./info">회원정보조회</a><br>
<a href="./update">회원정보수정</a><br>
<a href="./delete">회원정보삭제</a><br>
<a href="./list">회원목록</a><br>

</body>
</html>
  • 세션 값이 없을 경우 로그인페이지로 이동 / 세션값 있을 경우 아이디 값 가져옴
  • 실행화면

 

> 로그아웃 처리하기

< MemController.java >

// logout 로그아웃
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {
// 로그아웃
session.invalidate();
return "redirect:main";
}
  • 로그아웃 추가해주기
  • 로그아웃 버튼 클릭 시
  • 메인 → 세션값 없으므로 로그인페이지로 이동!

 

> 회원정보조회 해보기

< MemController.java >

@RequestMapping(value = "/info", method = RequestMethod.GET)
public String info(HttpSession session, Model model) {
// 데이터 가져오기
String id = (String)session.getAttribute("id");
MemberBean mb = memService.getMember(id);

return "info";
}
  • getMember() 메서드 만들기!

 

< MemService.java >

public interface MemService {
// 추상메서드(자식은 이 추상메서드를 상속받아서 씀)
public void insert(MemberBean mb);

public MemberBean userCheck(MemberBean mb);

public MemberBean getMember(String id);

}
  • 추상메서드 생성

< MemServiceImpl.java >

@Override
public MemberBean getMember(String id) {
System.out.println("MemServiceImpl - getMember()");
return memDAO.getMember(id);
}
  • 추상메서드 받아서 정의해주기
  • 메서드 자동생성하기 memDAO.getMember()

 

< MemDAO.java >

public interface MemDAO {
// 부모인터페이스  추상메서드
public void insert(MemberBean mb);

public MemberBean userCheck(MemberBean mb);

public MemberBean getMember(String id);
}
  • 추상메서드 생성

< MemDAOImpl.java >

String getMembersql = "SELECT * FROM member WHERE id=?";
@Override
public MemberBean getMember(String id) {
RowMapper<MemberBean> mapper = new BeanPropertyRowMapper<MemberBean>(MemberBean.class);
return template.queryForObject(getMembersql, mapper, id);
}
  • 추상메서드 받아서 정의해주기

 

< MemController.java >

@RequestMapping(value = "/info", method = RequestMethod.GET)
public String info(HttpSession session, Model model) {
// 세션 가져오기
// 데이터 베이스 세션에 해당하는 회원정보 데이터 가져오기
// 리턴값 : MemberBean mb = memService.getMember(id);
String id = (String)session.getAttribute("id");
MemberBean mb = memService.getMember(id);

// mb 데이터를 담아서 info.jsp 로 이동
model.addAttribute("mb", mb);

return "info";
}
  • model 에 담아줘서 넘기기!

 

< info.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
아이디:${mb.id}<br>
비밀번호:${mb.pass}<br>
이름:${mb.name}<br>
가입날짜:${mb.reg_date}<br>
<a href="./main">메인화면</a>
</body>
</html>
  • model 에 담아온 데이터 값 뿌려주기
  • 실행화면!

 

> 업데이트 화면

< MemController.java >

// updateForm ==> info 랑 똑같음
@RequestMapping(value = "/update", method = RequestMethod.GET)
public String update(HttpSession session, Model model) {
// 수정할 데이터 가져오기
// 세션 가져오기
String id = (String)session.getAttribute("id");
MemberBean mb = memService.getMember(id);

// mb 데이터를 담아서 updateForm.jsp 로 이동
model.addAttribute("mb", mb);

return "updateForm";
}
  • info 랑 똑같음! 정보를 뿌려줘야하기 때문에

 

< updateForm.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="./update" method="post">
아이디: <input type="text" name="id" value="${mb.id }" readonly><br>
비밀번호: <input type="password" name="pass"><br>
수정할 이름: <input type="text" name="name" value="${mb.name }"><br>
<input type="submit" value="회원정보수정">
</form>
</body>
</html>
  • 실행화면

 

> 수정하기

< MemController.java >

@RequestMapping(value = "/update", method = RequestMethod.POST)
public String updatePost(MemberBean mb) {
System.out.println("수정처리");

System.out.println(mb.getId());
System.out.println(mb.getPass());
System.out.println(mb.getName());
// 리턴값 MemberBean mb2 = userCheck(mb);
MemberBean mb2 = memService.userCheck(mb);
// 아이디 비밀번호 일치하면 update 하기
if(mb2!=null) {
memService.updateMember(mb);
}
return "redirect:main";
}
  • 메서드 자동으로 만들기! mb2는 값이 있나 없나 확인한 것이고 메서드에 넣어주는 값은 mb2 가 아니라 우리가 입력한 값인 mb 를 넣어줘야함!

 

< MemService.java >

public void updateMember(MemberBean mb);
  • 추상메서드 만들기

< MemServiceImpl.java >

@Override
public void updateMember(MemberBean mb) {
System.out.println("MemServiceImpl - updateMember()");
memDAO.update(mb);
}
  • 추상메서드 구현하고 memDAO.update() 메서드 자동완성

 

< MemDAO.java >

public void update(MemberBean mb);
  • 추상메서드 만들기

< MemDAOImpl.java >

String updatesql = "UPDATE member SET name=? WHERE id=?";
@Override
public void update(MemberBean mb) {
template.update(updatesql, mb.getName(), mb.getId());
}
  • 메서드 구현! 해당 id 값에 대한 name 만 바꿔야함! (이거 안 적었다가 싹 바뀔뻔^_^)
  • 수정 후 회원정보조회!



> deleteForm 해보기

< deleteForm.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="./delete" method="post">
아이디: <input type="text" name="id" value="${SessionScope.id}" readonly><br>
비밀번호: <input type="password" name="pass"><br>
<input type="submit" value="회원정보삭제">
</form>
</body>
</html>
  • 실행화면

 

> 삭제처리

< MemController.java >

@RequestMapping(value = "/delete", method = RequestMethod.POST)
public String deletePost(MemberBean mb, HttpSession session) {
System.out.println(mb.getId());
System.out.println(mb.getPass());
// 리턴값 MemberBean mb2 = userCheck(mb);
MemberBean mb2 = memService.userCheck(mb);
// 아이디 비밀번호 일치하면 삭제하기
if(mb2!=null) {
memService.deleteMember(mb.getId());
session.invalidate();
}
System.out.println("삭제처리");
return "redirect:main";
}

 

< MemService.java >

public void deleteMember(String id);

< MemServiceImpl.java >

@Override
public void deleteMember(String id) {
System.out.println("MemServiceImpl - deleteMember()");
memDAO.delete(id);
}

 

< MemDAO.java >

public void delete(String id);

< MemDAOImpl.java >

String deletesql = "DELETE FROM member WHERE id=?";
@Override
public void delete(String id) {
System.out.println("MemDAOImpl - delete()");
template.update(deletesql, id);
}



> 아이디가 ‘admin’ 일 때만 회원목록 조회할 수 있게

< main.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>Insert title here</title>
</head>
<body>
<h1>/WEB-INF/views/main.jsp</h1>
<c:if test="${empty sessionScope.id}">
<c:redirect url="./login"/>
</c:if>
${sessionScope.id }님 로그인 하셨습니다.
<input type="button" value="로그아웃" onclick="location.href='./logout'"><br>
<a href="./info">회원정보조회</a><br>
<a href="./update">회원정보수정</a><br>
<a href="./delete">회원정보삭제</a><br>
<c:if test="${!(empty sessionScope.id) }">
<c:if test="${sessionScope.id eq 'admin'}">
<a href="./list">회원목록</a><br>
</c:if>
</c:if>

</body>
</html>
  • eq → 같을 때(equals)

 

> 리스트 불러오기

< MemController.java >

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(HttpSession session, Model model) {
List<MemberBean> mbList = memService.getMemberList();

// mb 데이터를 담아서 updateForm.jsp 로 이동
model.addAttribute("mbList", mbList);
return "list";
}
  • 메서드 자동완성으로 만들기

 

< MemService.java >

public List<MemberBean> getMemberList();
  • 추상메서드 추가됨

< MemServiceImpl.java >

@Override
public List<MemberBean> getMemberList() {
System.out.println("MemServiceImpl - getMemberList()");

return memDAO.getMemberList();
}
  • 메서드 자동완성으로 만들기

 

< MemDAO.java >

public List<MemberBean> getMemberList();
  • 추상메서드 추가됨

< MemDAOImpl.java >

String getListsql = "SELECT * FROM member";
@Override
public List<MemberBean> getMemberList() {
System.out.println("MemDAOImpl - getMemberList()");
RowMapper<MemberBean> mapper = new BeanPropertyRowMapper<MemberBean>(MemberBean.class);
return template.query(getListsql, mapper);
}
  • 여기선 쿼리문에 물음표(들어갈 값)가 없기 때문에 queryForObject 사용안함
  • query() 사용
  • 이렇게 넣어주면 따로 List 객체에 넣지 않아도 자동으로 가지고 다님(스프링 능력)
  • mapping 할때는 MemberBean 으로 매핑한다. List 형이어도 자동으로 List 로 들고가줌

 

  • 실행화면



====================================================================

 

728x90

'Dev.Program > Java & Spring' 카테고리의 다른 글

[Spring] - (5)  (0) 2022.10.10
[Spring] - (4)MyBatis / 설정 및 연동  (0) 2022.10.09
[Spring] - (2)  (0) 2022.10.09
[Spring] - (1)설치 및 설정하기  (0) 2022.10.09
InetAddress 클래스  (0) 2022.10.07