본문 바로가기
스프링/mvc패턴

[spring]스프링 입문2. -MyBatis 프레임워크, 스프링 입문(개념부터 순서까지)

by CodeMango 2023. 2. 21.

🎈MyBatis

MyBatis 연동에 대한 개념은 아래 블로그를 참고했습니다.

블로그 : https://colinch4.github.io/2021-06-07/mybatis/

 

colin's 블로그

개발 강좌 블로그

colinch4.github.io

 

 

iBatis(구버전), MyBatis(신버전)이 있는데,

스프링에서도 MyBatis 프레임워크를 쓸 수 있습니다.

*프레임워크 : 누군가가 쓰라고 만들어놓은것

이렇게 MyBatis 를 활용함으로서 Dao가 간단해집니다.

 

MyBatis를 사용하기 위해서는 파일이 두개 필요합니다.

1. https://mvnrepository.com/ mybatis 검색 - 3.5.9버전 정도 들어가서 jar 다운

2. https://mvnrepository.com/ mysql connector java 검색(지금은 다운 불가) 해서 jar다운

lib에 복사 붙여넣기

 

 MyBatis의 맛보기 예제 

예제의 Explorer는 다음과 같다.

먼저 , MyBatis의 맛보기 예제를 만들겠습니다.

1. config.xml : mybatis를 셋업하기

2. mapper.xml :  

MyBatis는 Java와 SQL을 연결해주는 프레임워크이므로, SQL문을 XML 파일에 저장하여 Java 코드에서 쉽게 사용할 수 있도록 합니다. 따라서 이 파일을 통해  SQL 쿼리를 작성하고, Java 클래스와 연결합니다.

3. MainClass.java : MyBatis를 통해서 console로 출력하는 부분 (일종의 view)

4. MemberDto.java : Model에 해당하는 부분

헷갈릴 땐 아래 그림 참고

MyBatis 쿼리문

MyBatis 쿼리문은 mapper에서 사용됩니다. 

<select id="idcheck" parameterType="String"	resultType="mul.cam.a.dto.MemberDto"> 
		<!--  들어오는타입 parameterType="String"  -->
	select id
	from member
	where id=#{id}

"member" 테이블에서 "id" 컬럼 값이 입력받은 "#{id}" 값과 일치하는 레코드의 개수(count)를 검색(select)하는 쿼리

#{ }   : 동적으로 입력되는값 = 서버에서 입력되는 값

여기서, "#{id}"는 쿼리 실행 시 동적으로 입력되는 값입니다. 이 값은 "idcheck" 쿼리를 실행할 때,
쿼리문에 설정된 파라미터 타입(parameterType)인 String 타입으로 전달됩니다.

쿼리 실행 결과로 검색된 "id" 컬럼 값을 "mul.cam.a.dto.MemberDto" 타입으로 매핑하여 반환합니다. "mul.cam.a.dto.MemberDto"는 결과를 담기 위한 DTO(Data Transfer Object) 클래스 이름입니다. 반환되는 객체는 "id" 속성을 가지고 있습니다.

 

 

1. config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--  mybatis를 셋업하기 : DB설정 -->

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- 설정 -->	
<configuration>
	<environments default="developerment">
		<environment id="developerment">
			<transactionManager type="JDBC"/>
			
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
				<property name="username" value="root"/>
				<property name="password" value="1234"/>
			</dataSource>
		</environment>	
	</environments>
	
	<mappers>
		<mapper resource="mybatis/mapper.xml" />
	</mappers>
	
</configuration>

2. mapper.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--  실질적으로 불러다 쓰는 부분 -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	
<!-- Query -->
<mapper namespace="mybatis.mapper">

<!-- 
	mybatis에서는 insert, delete, select, update 를 태그로 쓴다.
	insert, delete, update는 들어가는 값만 있고 나오는 값은 숫자만 있다.
	반면 select는 숫자도 나오지만 object도 나올 수 있다.
	
	<select id = "외부에서 접근할 문자열"
		parameterType= "object"  // <- String, Object(dto같은..) 등 들어가는 값
		resultType = "object">
		
		쿼리문 들어가는 부분
		select id, name, email
		where id='#{값}'			// <- #{ 문자열(값) } ${ 숫자 }  	
		
	</select>

 -->
 
  <!-- 들어가는 값이 여러개면 객체로 묶어준다. dto.MemberDto -->
<insert id="addmember" parameterType="dto.MemberDto">
	insert into member(id, pwd, name, email, auth)
	values(#{id}, #{pwd}, #{name}, #{email}, 3)
</insert>

 <!-- 하나의 데이터 가져오기 
  parameterType="java.lang.String": 입력 파라미터로 String을 사용한다
  -> 해당 SQL 쿼리에서는 id 값을 문자열로 입력받음
  id라는 하나의 문자열 값을 받아서 가져오므로 parameterType 속성을 사용한다. -->
<select id="getMember" parameterType="java.lang.String" 
	resultType="dto.MemberDto">
	select id, pwd, name, email, auth
	from member
	where id=#{id}
</select>

<!--  다수의 데이터 가져오기 
모든 회원 정보를 가져오므로, parameterType 속성을 사용하지 않는다. -->
<select id="allMember" resultType="dto.MemberDto">
	select * from member	<!--  모든 멤버 다 가져오기 -->
</select>

<!-- 회원 정보 삭제 -->
<delete id="deleteMember" parameterType="java.lang.String">
	delete 
	from member 
	where id=#{id}
</delete>

<!-- 회원 정보 수정 -->
<update id="updateMember" parameterType="dto.MemberDto">
	update member 
	set name=#{name}, email=#{email}
	where id=#{id}
</update>

</mapper>

3. MainClass.java

package main;

import java.io.InputStream;
import java.lang.reflect.Member;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import dto.MemberDto;

public class MainClass {

	public static void main(String[] args) throws Exception {
		
		//설정파일 로드 - 1번만 함
		//io소속			//apache소속
		InputStream is = Resources.getResourceAsStream("mybatis/config.xml");
		
		// SqlSessionFactory 객체를 생성 - 1번만 함
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		
		//mapper에 접근해서 sql 세션 객체를 취득하기 - 계속할 수 있음
		//가장 많이 접근해서 쓰는것은 session (실세)
		SqlSession session = factory.openSession(); 
		
		//insert						//DB와 충돌되지 않는 값으로 집어넣기
		MemberDto dto = new MemberDto("def", "345", "이승철", "def@naver.com", 0);
				
		int count = session.insert("addmember", dto); // ("mapper에서 설정한 id", 들어가는값)
		if(count>0) {
			//성공했을땐 DB에 commit을 해줘야함. 
			//이클립스는 auto commit이라 자동으로 데이터가 들어가지만, 여기서는 따로 추가해줘야함.
			session.commit();
			System.out.println("추가성공");	
			//"추가성공"이 콘솔창에 뜨면, 이클립스 Result창에 database에 추가된다.
					
		}else { 
			session.rollback(); //실패했을땐 rollback으로 돌려줘야함.(commit의 반대)
										//한번 commit했을땐 다시 rollback 은 안됨!
			System.out.println("추가실패");
		}
				
		//commit과 rollback 개념 기억하기. 


		
		
		// select (1개의 데이터)
		// 실제 서버 실행시 오류남: dto가 중복되므로 위의 코드 주석문 처리 해야한다.
		String id = "abc";
		MemberDto dto = session.selectOne("getMember", id);
		System.out.println(dto.toString());
		
		
		//select (다수의 데이터)
		// 이렇게 써도됨->3교시 복습
		List<MemberDto> list = session.selectList("allMember");
		for (MemberDto m : list) {	//list안에 있는걸 m에 담음
			System.out.println(m.toString());
		}
		
		

 // delete 삭제하기
		// 실제 서버 실행시 오류남: id와 count가 중복되므로 위의 코드 주석문 처리 해야한다.
		String id = "def"; 
		int count = session.delete("deleteMember", id);
		if(count>0) { 
			session.commit(); 
			System.out.println("정상적으로 삭제되었습니다"); }
		else {
			session.rollback(); 
			System.out.println("정상적으로 삭제되지 않았습니다");

 }
		//update
		// 실제 서버 실행시 오류남: dto와 count가 중복되므로 위의 코드 주석문 처리 해야한다.
		MemberDto dto = new MemberDto("efg", null, "김지수", "eft@naver.com", 0);
		int count = session.update("updateMember", dto);
		if(count>0) {
			session.commit();
			System.out.println("정상적으로 수정되었습니다");
		}else {
			session.rollback();
			System.out.println("정상적으로 수정되었습니다");
	}

	}
}

4.MemberDto.java

package dto;

import java.io.Serializable;

public class MemberDto implements Serializable{
	
	private String id;
	private String pwd;
	private String name;
	private String email;
	private int auth;
	
	public MemberDto() {
	}

	public MemberDto(String id, String pwd, String name, String email, int auth) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.auth = auth;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public int getAuth() {
		return auth;
	}

	public void setAuth(int auth) {
		this.auth = auth;
	}

	@Override
	public String toString() {
		return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", auth=" + auth + "]";
	}
}

 

 

🎈스프링 형태

이제, 스프링의 형태를 설명하겠습니다.

 

스프링의 형태는 아래 그림과 같이 구성되어 있습니다.

MyBatis는 모델과 데이터베이스를 이어주는 기능을 한다는 것을 알 수 있습니다.

 

 

위 그림에 나와있지 않지만,

기존의 모델1, 모델2 mvc패턴과 다른 점은 스프링의 Controller에는 Service가 추가된다는 것입니다.

자세한 사항은 아래 블로그를 참조했습니다.

 

https://dalpaeng00.tistory.com/83

 

Spring boot - Controller, Service, DAO, Mapper

Controller, Service, DAO, Mapper Spring boot 에서 중요한 개념인 Controller, Service, DAO, Mapper에 대해서 설명해 보겠습니다. Spring boot 는 MVC구조를 따릅니다. 다음 그림은 MVC 구조를 나타냅니다. 이론적인 내용

dalpaeng00.tistory.com

 

🎈Controller, Service, DAO, DB

아래 그림을 보며 Controller, Service, DAO, DB와의 관계를 이해해야합니다.

Controller 

Controller는 웹 브라우저의 요청을 전담하여 처리합니다.

Controller가 Service를 호출 합니다. 

Service

Service는 비지니스 로직을 수행 합니다.

데이터베이스에 접근하는 DAO를 이용해서 결과값을 받아 옵니다.

DB에서 넘어온 데이터를 "필요하다면" 편집하는 부분입니다.DAO에서 두가지 이상의 작업을 할 때, service에서 묶어놓고 작업할 수 있습니다.

DAO

DAO는 데이터베이스에 접속하여 비즈니스 로직 실행에 필요한 쿼리를 호출합니다.

service에서 dao로 접속합니다.

DB

DB에서 알맞은 쿼리를 실행하고 결과값을 반환합니다. 

DTO 

Data Transfer Object의 약자로

각 계층이 데이터를 주고 받을 때 사용하는 객체를 말합니다. 

* 각 계층이란 뷰, 컨트롤러, 서비스, DAO, DB를 말합니다.

 

아래 이미지는 Model에 service와 dao가 속한 것을 보여줍니다.

🎈스프링 이동 순서

일반적으로 스프링은 아래와 같은 순서로 진행됩니다. 

  1. 사용자 요청(HTTP request)
  2. Controller 가 받아서
  3. Service로 넘기고
  4. Service는 DAO를 호출하고
  5. DAO는 DB에서 데이터를 조회해서 다시 Service로 리턴하고
  6. Service는 데이터를 이용해서 로직을 수행하고
  7. 결과를 다시 Controller로 넘기고
  8. Controller는 다시 사용자에게 응답합니다.

 

-> 실제 코드를 짤 때 아래와 같이 파일을 만듭니다.

예제 파일의 이동 순서

1. web.xml 에서 servlet-context , applicationContext.xml 파일을 읽어들입니다.

2. 두 파일을 읽은 web.xml이 controller로 이동합니다. (controller는 *.do로 되어있다)

4. controller에서 Model에 접근한다. (=서비스와 대화한다)

   Model은 2가지로 나뉩니다.

   1) service : dao에 접근  (서로 대화한다) -db를 통해 갖고온 데이터

   2) dao : MyBatis 에 접근(서로 대화한다) -  *실제 데이터가 나옵니다*

5. MyBatis는 DB로 가서 DB를 얻어옵니다.

6. MyBatis에서 가져온 데이터는 dao 를 거쳐 service로 리턴됩니다.

7. Service는 데이터를 이용해서 로직을 수행하고, 다시 controller로 넘깁니다.

8. Controller에서 View(jsp)로 이동합니다.

 

4,5단계 상세설명

controller에서 service를 생성

service에서 dao를 생성

dao에서 MyBatis를 생성

MyBatis를 통해서 DB가 나오게 됩니다.

 

아래 코드는 Dao에서 처음으로 실제 데이터가 나올 때 코드입니다.

	//Dao에서 처음으로 실제 데이터가 나온다.
	public List<MemberDto> allMember() {}

 

이런 순서로 진행이 된다음 아래 그림처럼 반복하게 됩니다.

스프링을 표현하는 이미지

 

🎈interface, annotation 

annotation은 이런식으로 붙여줍니다.

Service에는 interface와 class가 있습니다. 마찬가지로 Dao에도  interface와 class가 있습니다.


실제예제 

Q. home태그를 클릭하면 저장된 모든 데이터를 출력하는 프로그램 만들기


구현할 파일들

 web.xml                            : 시작하자마자  applicationContext.xml과 servlet-context.xml 을 읽어들임

 applicationContext.xml     :  단한번 세팅 -> web.xml에서 읽어들임

 servlet-context.xml           : 단한번 세팅  -> web.xml에서 읽어들임

 index.jsp                           : controller의 home.do로 감. 

 MemberController.java     : index에서 home.do로 옴 (*.do로 보내면 다 받는다.) -> service 생성

                                                                                                                              (MemberServiceImpl)

 MemberService.java         : service 인터페이스 파일
 MemberServiceImpl.java  : controller에서 service로 옴 -> DAO 생성

 MemberDao.java              : dao 인터페이스 파일

 MemberDaoImpl.java       : service에서 dao로 옴 -> MyBatis 생성 -> applicationContext.xml에서 sqlSession 생성

                                             -> *session 을 통해 mapper에 접근할 수 있게됨
 Member.xml                      : mapper파일 (applicationContext.xml DB설정파일 로딩에서 읽어들이고 있음)
 home.jsp                           : view 프론트엔드- controller에서 넘어온 데이터를 받음  + ajax로 짐을 넘기고 받음

 jdbc.properties                  : 데이터베이스 설정

* session의 역할 : mapper로 접근

 

 

 

모든 파일을 설명하기 어려워서 
1. index.jsp
2. MemberController.java
3. MemberDaoImpl.java
4. MemberServiceImpl.java

5. Member.xml
6. home.jsp 


순서로 첨부하겠습니다.

 

1. index.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>

<a href="home.do">home</a>

</body>
</html>


2. MemberController.java

package mul.cam.a.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import mul.cam.a.dto.MemberDto;
import mul.cam.a.service.MemberService;

//service에 접근(생성)하는 부분
// -> 컨트롤러 하나만 생성하면 서비스 생성 -> dao생성-> MyBatis 생성

@Controller
public class MemberController {

	@Autowired
//	🎀service 생성
	MemberService service;
	// @Autowired를 사용함으로써 상속받은 클래스를 자동으로 생성해준다. 
	// 따라서 new가 자동으로 넣어짐 : 원래는 MemberService service = new MemberService 형태
	// 인스턴스는 인터페이스지만 결국은 클래스 객체로 만들어주게됨 -> 우리가 사용하도록! 
	
/*	--------------------------------------------------------------------
	1.controller -> service	
     [온다] home.jsp에서 <a href="home.do">home</a>를 통해 controller의 home.do로 온다.
	 [간다] controller에서 service로 간다 (model을 통해서)
	 [간다] MemberServiceImpl.java에서 allMember를 꺼낼 것.
	--------------------------------------------------------------------*/	
	
	@RequestMapping(value= "home.do",method=RequestMethod.GET)
	public String home(Model model) { //데이터 갖고 떠나기 위해 model 추가
		
		//service의 allMember를 호출하는곳 
		List<MemberDto> list= service.allMember(); //리스트 가져오기
		//짐싸!
		model.addAttribute("list", list); //데이터 갖고 떠나기 위해 model 추가.
		//전에는 request.setAttribute로 보냈는데, 스프링에서는 model.addAttribute로 보낸다
		
		return "home"; // home.jsp로 가라.
/*	--------------------------------------------------------------------
2. service -> controller
[온다] service.allMember 호출을 통해 service에서 List<MemberDto>형태의 
	  return값을 가지고 호출한 controller로 왔다.
	  return값을 list에 담아서 짐을 싼다.
[간다] list를 가지고 home.jsp로 간다.
		--------------------------------------------------------------------*/			
	
	}
}


3. MemberServiceImpl.java

package mul.cam.a.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import mul.cam.a.dao.MemberDao;
import mul.cam.a.dto.MemberDto;
import mul.cam.a.service.MemberService;

//Dao에 접근(생성)하는 부분

@Service
public class MemberServiceImpl implements MemberService {  //MemberService를 상속받음 -> MemberService 연관성 생김
	
	@Autowired	//@Autowired를 넣어서 new 객체생성을 자동으로 해줌
	
//	🎀dao 생성
	MemberDao dao; //
	// @Autowired를 사용함으로써 상속받은 클래스를 자동으로 생성해준다. 
	// 따라서 new가 자동으로 넣어짐 : 원래는 MemberDao dao = new MemberDao 형태
	// 인스턴스는 인터페이스지만 결국은 클래스 객체로 만들어주게됨 -> 우리가 사용하도록! 
/*	--------------------------------------------------------------------
	1. controller -> service
	 [온다] controller에서 service로 왔다 
	 allMember를 꺼낸다
	 [간다] dao의 allMember로 간다
 	--------------------------------------------------------------------*/
	@Override
	public List<MemberDto> allMember() {
		
		return dao.allMember();
	} 
/*	--------------------------------------------------------------------
	2. dao -> service -> Controller
	[온다] MemberDaoImpl에서 리턴값을 가지고 다시 service로 왔다
			return dao.allMember();을 통해 dao 객체의 allMember 메소드를 호출하여 return값을 받아와서
			다시 List<MemberDto>형태로 return 해준다.
	[간다] 리턴값을 가지고 allmember를 호출한 Controller로 다시 간다.
	--------------------------------------------------------------------*/	
}

4.  MemberDaoImpl.java

package mul.cam.a.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import mul.cam.a.dao.MemberDao;
import mul.cam.a.dto.MemberDto;

//MyBatis에 접근(생성)하는 부분

@Repository // == 저장소
public class MemberDaoImpl implements MemberDao{ //MemberDao를 상속받음 -> MemberDao와 연관성 생김
	
	@Autowired // annotation : 상속받은 클래스를 자동으로 생성해줌.

//	🎀MyBatis 생성
	SqlSession session; 
	// applicationContext.xml에서 sqlSession취득하는 클래스 이미 만들어놨음
	// @Autowired를 사용함으로써 상속받은 클래스를 자동으로 생성해준다. 
	// 따라서 new가 자동으로 넣어짐 : 원래는 Sqlsession session = new Sqlsession 형태
	// 인스턴스는 인터페이스지만 결국은 클래스 객체로 만들어주게됨 -> 우리가 사용하도록! 
	
	@Override
/*	-------회전문 dao------------------------------------------------------
	 [온다] service에서 dao로 왔다 
	 session(MyBatis)을 통해서 데이터를 꺼내온다.
			= Member.xml에 기본 형태의 MyBatis 쿼리문이 있고, 쿼리문에서 데이터를 꺼내옴
	 [간다] 데이터를 꺼내와서 리턴하고 다시 MemberServiceImpl로 보낸다.
	 -------------------------------------------------------------------- */	
	
	//Dao에서 처음으로 실제 데이터가 나온다.
	//allMember 함수 생성 
	public List<MemberDto> allMember() {

		//Member.xml의 namespace가 Member이므로 "Member" 대입
		//Member.xml의 select 태그의 id값이 allMember이므로 "allMember" 대입
		return session.selectList("Member." + "allMember"); //Member.allMember
	}	
/*	<코드해석> 
	session : session 객체는 데이터베이스와 상호작용을 하며, selectList 메소드를 호출하여 SQL 쿼리를 실행함.
	selectList : SQL 쿼리의 실행 결과를 리스트 형태로 반환하는 MyBatis의 메소드
	"Member." + "allMember" : "Member"라는 SQL 매핑 파일에서 "allMember"라는 SQL 쿼리를 실행하고 결과를 List<MemberDto> 형태로 반환.
	List<MemberDto> 값이 allMember 메소드의 반환 값으로 지정되어, allMember 메소드가 호출될 때 이 값을 반환함. 
	
	즉, 모든 회원 정보를 가져와서  List<MemberDto> 형태로 반환한다.(리턴한다)
*/
}

5. Member.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--  ........................................................................
Mapper XML : 
이 페이지는 MyBatis의 Mapper XML 파일입니다.
이 프로젝트에선 Mapper.xml 을 Member.xml로 만들었습니다.
Mapper XML 파일은 SQL 쿼리를 작성하고, Java 클래스와 연결하는데 사용됩니다. 
MyBatis는 Java와 SQL을 연결해주는 프레임워크이므로, SQL문을 XML 파일에 저장하여 Java 코드에서 쉽게 사용할 수 있도록 합니다.

resultType 속성 : 
쿼리문이 반환하는 결과를 어떤 자바 객체로 매핑할 것인지를 나타냅니다. 
이 코드에서는 MemberDto 클래스로 매핑할 것을 지정하고 있습니다. 

따라서 이 Mapper XML 파일은 Member 네임스페이스에 속한 allMember라는 쿼리문을 정의하고 있으며,
MemberDto 객체로 결과를 반환합니다. 이 쿼리문은 member 테이블에서 모든 레코드를 선택하는 것입니다.

 ........................................................................ -->

<!--  mapper가 있는곳, mapper.xml을 Meber.xml라고 만든 것임!-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	
<!--  mapper 추가 -->
<mapper namespace="Member">

<!-- mul.cam.a.dto.MemberDto 로 리턴=내보내겠다 
아래 코드는 기본 형태의 MyBatis 형태 
DB와 대화하는 쿼리문 -->
<select id="allMember" resultType="mul.cam.a.dto.MemberDto">
	select id, pwd, name, email, auth
	from member
	
</select>

</mapper>


6. home.jsp 

<%@page import="mul.cam.a.dto.MemberDto"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    
    /*--------------------------------------------------------------------
     <controller -> home>
	 [온다] controller에서 view(home.jsp)로 왔다.
	 
		   controller에서 model.addAttribute("list", list); 을 통해 짐을 싸고
		   return "home"; 		를 통해 home으로 왔다.
 	--------------------------------------------------------------------*/
 	
    //MemberController.java에서 갖고온 짐 받기(풀기)
    List<MemberDto>List = (List<MemberDto>)request.getAttribute("list");
    
    %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1> home </h1>

<table border="1">
<tr>
	<th>번호</th><th>id</th><th>pw</th><th>name</th><th>email</th>
</tr>
<%
	for(int i = 0;i < List.size(); i++){
		MemberDto dto = List.get(i);
	%>
	<tr>
		<th><%=i + 1 %></th>
		<td><%=dto.getId() %></td>
		<td><%=dto.getPwd() %></td>
		<td><%=dto.getName() %></td>
		<td><%=dto.getEmail() %></td>
	</tr>
	<%
	}	
%>
</table>
</body>
</html>

댓글