Spring[CRUD] 라이브러리 세팅

2022. 9. 30. 11:19코딩/FRAMEWORK

라이브러리 추가

\

라이브러리 검색해서 사용하는 사이트

 

commons-jdbc

Spring-jdbc

위 두개의 경우 resultSet,Exception 같은 반복작업을 대체함

lombok : 게터,세터,생성자등 자동생성

ojdbc6 : DB(오라클)과연결

 

사용할 라이브러리를 선택한뒤

메이븐에 적혀있는 코드 복사

 

pom.xml에

dependencies안쪽에 삽입

Maven Dependencies 폴더에 그 내가 넣은 코드의 관련 파일이 생성된다.

 

 

 

버전까지만 경로복사 이렇게 복사해서 탐색을 돌리지 않으면 일일히 찾아 들어가야하기때문에 귀찮아 진다.

 

복사한 경로를 탐색기에 검색을 해서 jar파일을 설치

lombok-내가설치한버전.jar을 켜서 설치하고 닫으면 된다.

 

vo의 class에 객체명을 생성하고

vo의 class의 클래스명 위에

 

@Data
@NoArgsConstructor
@AllArgsConstructor

를 사용하면

vo안의 class아래에 생성자,게터세터가 생성된다

내가 무언가를 더 추가하거나 기존것을 삭제하면 자동적으로 처리를 해주기때문에 편리하다

 

Spring JDBC 사용을 위한 라이브러리 추가 2개(Spring-jdbc,commons-dbcp)

ORACLE 과 연동을 하기위해 라이브러리 추가 ojdbc6

 

ojdbc6

 

ojdbc6 추가

lombok이 특이해서 따로 다운로드를 하는데

보통 바로 다운로드가 된다는듯하다.

 

 

 

Spring jdbc는 우리가 사용하는 버전이랑 맞출것이다

 

 

라이브러리 설치후 세팅

 

<!-- DB 접속정보를 저장하는 객체 생성 -->
	<!-- 어노테이션형식이 아닌 xml로 생성
		이유는 라이브러리로 받아왔기 때문에 어쩔수가 없다는듯 하다 -->
	<!-- dataSource 접속정보를 저장 class는 오타 날수있으니 BasicDataSource 정도만 치고 자동완성 -->
	<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<!-- driverClassName = 데이터 베이스 접속할때 어떤걸 쓸건데 라는것 
			오라클 쓸거라고 지정-->
		<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<beans:property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
		<beans:property name="username" value="spring"></beans:property>
		<beans:property name="password" value="1234"></beans:property>
	</beans:bean>
	
	<!-- JDBCTemplate 생성 -->
	<beans:bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 접속정보를 모르기 때문에 접속정보를 줄때 위의 형태로 주어야 하기때문에 dataSource를 만든것 -->
		<beans:property name="dataSource" ref="dataSource"/>
	</beans:bean>
	
	<context:component-scan base-package="kr.or.iei" />
	<!-- 어노테이션@ 을 사용하기 위해서는 스캔이 필요하다는듯 하다 -->
	<context:component-scan base-package="kr.or.member"/>
	<!-- 컨트롤러 부분에 @Controller를 Dao 부분에 @Repository를 서비스 부분에 @Service를 달아준다-->

어노테이션을 달아준다 했는데 이경우 class위에 달아주어야한다.

 

@Autowired 의 역활은 -- 스프링이 만든 객체중 선언된 변수와 
일치하는 타입을 찾아서 값을 대입해주는 역활 , 

주소까지 넣어줌, null point acception이 안뜸
만약 내가 실수로 dao나 service나 무언가를 안만들었다면 서버가 시작이 안됨

@Autowired를 붙이지 않아도 에러가 나면서 서버가 시작이 되지 않는다.

 

Controller

package kr.or.member.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

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.SessionAttribute;

import kr.or.member.model.service.MemberService;
import kr.or.member.model.vo.Member;

@Controller
public class MemberController {
	//@Autowired 의 역활은 -- 스프링이 만든 객체중 선언된 변수와 
	//일치하는 타입을 찾아서 값을 대입해주는 역활 , 
	@Autowired
	private MemberService service;
	public MemberController() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("컨트롤러 생성");
	}
	
	// @RequestMapping(value="/joinFrm.do") 이 요청을 
	// public String loginFrm()가 처리 한다는것
	@RequestMapping(value="/joinFrm.do")
	public String joinFrm() {
		//ViewResolver에서 return에 WEB-INF 랑 joinFrm.jsp의 jsp는 자동으로 처리해주기때문에 제외
		return "member/joinFrm";
	}
	
	@RequestMapping(value="/join.do")
	//name이랑 vo의 변수명이 같아야 찾아옴 다르면 찾아오지 못함
	//join(String memberId, String memberPw, String memberName, String phone, String email)
	//위같은 식으로 해도되지만 전체를 받아올것이면 멤버타입으로 가져와도된다
	public String join(Member m) {
		System.out.println(m);
		int result = service.insertMember(m);
		if(result>0) {
			return "member/joinSuccess";
		}else {
			return "member/joinFail";
		}
	}
	
	@RequestMapping(value="/login.do")
	public String login(Member m,HttpSession session) {
		Member member = service.selectOneMember(m);
		if(member != null) {
			session.setAttribute("m", member);
		}
		//메인페이지로 이동 -> return "redirect:주소"
		//->ViewResolver 가 앞뒤에 값을 붙이지 않고 주소 요청
		return "redirect:/";
	}
	@RequestMapping(value="/searchMember.do")
	public String searchMember(String searchId,Model model) {
		Member m = service.selectOneMember(searchId);
		if(m == null) {
			return "redirect:/";
		}else {
			//model : controller 와 화면사이에 1회용 데이터를 주고 받을 객체
			//request.setAttribute();
			model.addAttribute("m",m);
			return "member/searchMember";
		}	
	}
	@RequestMapping(value="/logout.do")
	public String logout(HttpSession session) {
		session.invalidate();
		return "redirect:/";
	}
	@RequestMapping(value="/searchAllMember.do")
	public String searchAllMember(Model model) {
		ArrayList<Member> list = service.selectAllMember();
		model.addAttribute("list",list);
		return "member/allMember";
		
	}
	@RequestMapping(value="/mypage.do")
	public String mypage() {
		return "member/mypage";
	}
	
	@RequestMapping(value="/update.do")
	//세션에 있는 값을 바로 꺼내옴 @SessionAttribute
	public String update(Member member,@SessionAttribute Member m) {
		int result = service.updateMember(member);
		if(result>0) {
			//오브젝트 타입이라 Member로 형변환
			m.setMemberPw(member.getMemberPw());
			m.setPhone(member.getPhone());
			m.setEmail(member.getEmail());
			return "redirect:/mypage.do";
		}else {
			return "redirect:/";
		}
	}
	
	@RequestMapping(value="/deleteMember.do")
	public String delete(int memberNo) {
		int result = service.deleteMember(memberNo);
		if(result>0) {
			//삭제후 세션파기를 해야하는데 로그아웃하면 세션파기가 되기때문에
			//로그아웃으로 보냄
			return "redirect:/logout.do";
		}else {
			return "redirect:/";
		}
		
	}
}

Service

package kr.or.member.model.service;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

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

import kr.or.member.model.dao.MemberDao;
import kr.or.member.model.vo.Member;

@Service
public class MemberService {
	// 주소까지 넣어줌, null point acception이 안뜸
	// 만약 내가 실수로 dao를 안만들었다면 서버가 시작이 안됨
	@Autowired
	private MemberDao dao;

	public MemberService() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("서비스 생성");
	}

	public int insertMember(Member m) {
		// TODO Auto-generated method stub
		int result = dao.insertMember(m);
		return result;
	}

	public Member selectOneMember(Member m) {
		Member member = dao.selectOneMember(m);
		return member;
	}

	public Member selectOneMember(String searchId) {
		return dao.selectOneMember(searchId);
	}

	public ArrayList<Member> selectAllMember() {
		ArrayList<Member> list = dao.selectAllMember();
		return list;
	}

	public int updateMember(Member m) {
		int result = dao.updateMember(m);
		return result;
	}

	public int deleteMember(int memberNo) {
		int result = dao.deleteMember(memberNo);
		return result;
	}

}

 

DAO

package kr.or.member.model.dao;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import kr.or.member.model.vo.Member;
import kr.or.member.model.vo.MemberRowMapper;

@Repository
public class MemberDao {
	@Autowired
	private JdbcTemplate jdbcTemplate;
	public MemberDao() {
		super();
		System.out.println("DAO 생성");
	}
	public int insertMember(Member m) {
		//1. PreparedStatement방식으로 쿼리문 작성
		String query = "insert into member_tbl values(member_seq.nextval,?,?,?,?,?)";
		//2. 있을수도있고 없을수도 있음
		// 위치홀더가 1개라도 있는 경우(없으면 생략)
		// 위치홀더에 들어가는 순서대로
		Object[] params = {m.getMemberId(),m.getMemberPw(),m.getMemberName(),m.getPhone(),m.getEmail()};
		//3. 쿼리문, 2번에서 만든 위치홀더에 들어갈 값을 이용해서 쿼리문실행
		//insert/update/delete인경우 update()메소드사용
		int result = jdbcTemplate.update(query,params);
		return result;
	}
	public Member selectOneMember(Member m) {
		String query = "select * from member_tbl where member_id=? and member_pw=?";
		Object[] params = {m.getMemberId(), m.getMemberPw()};
		List list = jdbcTemplate.query(query,params,new MemberRowMapper());
		//조회는 항상 list 타입으로 데이터를 반환
		if(list.isEmpty()) {
			return null;
		}else {
			Member member = (Member)list.get(0);
			return member;
		}
	}
	public Member selectOneMember(String searchId) {
		String query = "select * from member_tbl where member_id=?";
		Object[] params = {searchId};
		List list = jdbcTemplate.query(query,params,new MemberRowMapper());
		if(list.isEmpty()) {
			return null;
		}else {
			Member m = (Member)list.get(0);
			return m;
		}
	}
	public ArrayList<Member> selectAllMember() {
		String query = "select * from member_tbl";
		List list = jdbcTemplate.query(query, new MemberRowMapper());
		return (ArrayList<Member>)list;
	}
	
	public int updateMember(Member m) {
		String query = "update member_tbl set member_pw=? , phone=? , email=? where member_id=?";
		Object[] params = {m.getMemberPw(), m.getPhone(),m.getEmail(),m.getMemberId()};
		int result = jdbcTemplate.update(query,params);
		return result;
	}
	public int deleteMember(int memberNo) {
		String query = "delete from member_tbl where member_no=?";
		Object[] params = {memberNo};
		int result = jdbcTemplate.update(query,params);
		return result;
	}

}

 

 

INDEX

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Spring MVC CRUD</h1>
	<hr>
	<c:choose>
		<c:when test="${empty sessionScope.m }">
			<form action="/login.do" method="post">
				<fieldset>
					<legend>로그인</legend>
					아이디 : <input type="text" name="memberId"><br> 비밀번호 : <input
						type="password" name="memberPw"><br> <input
						type="submit" value="로그인">
				</fieldset>
			</form>
			<h3>
				<a href="/joinFrm.do">1. 회원가입</a>
			</h3>
		</c:when>
		<c:otherwise>
			<h2>[${sessionScope.m.memberName }]님 환영합니다</h2>
			<form action="/searchMember.do" method="get">
				조회할 회원 아이디 입력:
				<input type="text" name="searchId">
				<input type="submit" value="조회">
			</form>
			<h3><a href="/logout.do">로그아웃</a></h3>
			<h3><a href="/searchAllMember.do">전체회원조회</a></h3>
			<h3><a href="/mypage.do">마이페이지</a></h3>
			<h3><a href="/deleteMember.do?memberNo=${sessionScope.m.memberNo }">회원탈퇴</a></h3>
		</c:otherwise>
	</c:choose>

</body>
</html>

member 폴더

joinFrm

<%@ 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="/join.do" method="get">
		<fieldset>
		<legend>회원가입</legend>
		<!-- name이랑 vo에 만든거랑 명을 맞추어야함 -->
		아이디 : <input type="text" name="memberId"><br>
		비밀번호 : <input type="password" name="memberPw"><br>
		이름 : <input type="text" name="memberName"><br>
		전화번호 : <input type="text" name="phone"><br>
		이메일 : <input type="text" name="email"><br>
		<input type="submit" value="회원가입"><br>
		<a href="/">메인으로 돌아가기</a>
		</fieldset>
	</form>
</body>
</html>

allMember

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>전체회원정보</h1>
	<hr>
	<table border="1">
		<tr>
			<th>번호 </th> 
			<th>아이디 </th> 
			<th>비밀번호 </th> 
			<th>이름 </th>
			<th>전화번호 </th>
			<th>이메일 </th>
		</tr>
		<c:forEach items="${list }" var="m">
			<tr>
				<td>${m.memberNo }</td>
				<td>${m.memberId }</td>
				<td>${m.memberPw }</td>
				<td>${m.memberName }</td>
				<td>${m.phone }</td>
				<td>${m.email }</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

mypage

<%@ 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>
<h1>마이페이지</h1>
<hr>
<form action="/update.do" method="post">
		<fieldset>
			<!-- disabled : 수정도 전송도 안됨 -->
			<!-- readonly : 수정만 안될뿐 전송은 됨 -->
					번호: <input type="text" name="memberNo" value="${sessionScope.m.memberNo }" disabled><br>
					아이디: <input type="text" name="memberId" value="${sessionScope.m.memberId }" readonly><br>
					비밀번호: <input type="text" name="memberPw" value="${sessionScope.m.memberPw }"><br>
					이름: <input type="text" name="memberName" value="${sessionScope.m.memberName }" disabled><br>
					전화번호: <input type="text" name="phone" value="${sessionScope.m.phone }"><br>
					이메일: <input type="text" name="email" value="${sessionScope.m.email }"><br>
					<input type="submit" value="정보수정"><br>
		</fieldset>
	</form>
</body>
</html>

searchMember

<%@ 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>
	<h1>조회결과</h1>
	<ul>
		<li>${m.memberNo }</li>
		<li>${m.memberId }</li>
		<li>${m.memberPw }</li>
		<li>${m.memberName }</li>
		<li>${m.phone }</li>
		<li>${m.email }</li>
	</ul>
</body>
</html>

 

'코딩 > FRAMEWORK' 카테고리의 다른 글

03_Spring_Mybatis(ajax)  (0) 2022.10.11
04_Spring_AOP  (0) 2022.10.11
03_Spring_Mybatis_member_map(trim,collection,CDATA)  (0) 2022.10.09
Mybatis  (0) 2022.10.06
SPRING [CRUD]  (0) 2022.09.29