▶ 회원가입 흐름도
Join → JoinCon → DAO → SqlSessionManager → mybatis-config.xml → DAO →MemberMapper.xml → DAO → JoinCon
▶MybatisProject/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.smhrd</groupId>
<artifactId>MybatisProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!--ojdbc6.jar-->
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
<!--lombok 라이브러리 추가-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<!--mybatis 라이브러리 추가-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
</project>
▶Join.java
package com.smhrd.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.smhrd.model.DAO;
import com.smhrd.model.IotMember;
@WebServlet("/JoinCon")
public class JoinCon extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 한글 인코딩
request.setCharacterEncoding("UTF-8");
// 2. 데이터 전부 가져오기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nickname = request.getParameter("nickname");
int age = Integer.parseInt(request.getParameter("age"));
// 3. 하나로 묶기
IotMember vo = new IotMember(id, pw, nickname, age);
// 4. DB에 데이터 보내기
DAO dao = new DAO();
int row = dao.join(vo);
if(row > 0) {
response.sendRedirect("Main.jsp");
}else {
response.sendRedirect("Join.jsp");
}
}
}
▶Iotmember.java
package com.smhrd.model;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class IotMember {
private String id;
private String pw;
private String nickname;
private int age;
}
▶DAO.java
package com.smhrd.model;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.smhrd.database.SqlSessionManager;
public class DAO {
private SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();
private SqlSession sqlSession = null;
public int join(IotMember vo) {
int row = 0;
try {
// 1. db 연결
// openSession(boolean) --> 안쪽에 true를 넣으면 auto commit 가능
// openSession() --> insert, delete, update 할때마다 commit을 직접 해줘야 함!
sqlSession= sqlSessionFactory.openSession(true);
// 2. 실행
row = sqlSession.insert("com.smhrd.model.DAO.memberinsert", vo);
}catch (Exception e) {
e.printStackTrace();
}finally {
// 3. 자원반납
sqlSession.close();
}
return row;
}
}
▶Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- DB연결설정 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="hr"/>
<property name="password" value="hr"/>
<!-- url, username, password 프로젝트시 바꿔주기 -->
</dataSource>
</environment>
</environments>
<!-- Mapper 파일(SQL 쿼리문을 가지고 있는 파일) 설정하기 -->
<!-- 파일이 여러개 생성될 수 있다. -->
<mappers>
<mapper resource = "com/smhrd/database/MemberMapper.xml"/>
</mappers>
</configuration>
▶MemberMapper.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">
<!-- namespace : mapper 식별자(고유의 이름) -->
<!-- 절대 중복되면 안된다. 중복되는 순간 mapper를 찾지 못한다. -->
<mapper namespace="com.smhrd.model.DAO" >
<!-- Query문 작성해서 넣는 공간 -->
<insert id="memberinsert" parameterType="com.smhrd.model.IotMember">
insert into iotmember values(#{id},#{pw},#{age},#{nickname})
<!-- IotMember.java에 있는 필드명임 -->
</insert>
</mapper>
▶sqlSessionManager.java
package com.smhrd.database;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionManager {
static SqlSessionFactory sqlSession;
// 객체 생성시 실행되는 구간(객체를 부르기만 해도 동일하게 실행되는 구간이다.)
// 생성자 : 인스턴스를 생성하는 메소드
// 서로 다른 인스턴스(주소 값이 서로 다른 객체)도 동일한 내용을 공유한다.
// static(정적인 or 공유변수)
// 내용 전체 복붙해서 쓰는데 resource 내용만 바꿔주기! --> "com/smhrd/database/mybatis-config.xml";
static {
// 1) 연결할 설정 정보 가져오기--> .이아닌 /로 표시 주의!
String resource = "com/smhrd/database/mybatis-config.xml";
// 2) 문자열을 읽어서 진짜 파일로 되돌려준 도구를 하나 꺼내오기
Reader reader;
try {
// 3) config파일을 읽어서 class path 경로형태를 가진 Reader객체로 반환
// 문자열로 된 config파일을 진짜 해석할 수 있게 도와주는 역할
reader = Resources.getResourceAsReader(resource);
// 4) config파일안에 있는 데이터베이스 정보를 기반으로
// DB랑 연결통로를 가지고 있을수 있게 해주는 구간
sqlSession = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
// 5) DB랑 연결하고 있는 연결통로에 대한 정보를 갖고있는 객체 반환
// DB연결, 종료, 실행 세션관리
public static SqlSessionFactory getSqlSession() {
return sqlSession;
}
}
▶Main.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>
<h1>메인페이지</h1>
<a href = "Join.jsp">회원가입</a>
<br>
<a href = "Login.jsp">로그인</a>
<br>
<a href = "SelectAl.jsp">전체 회원 확인하기</a>
<br>
<a href = "Delete.jsp">회원탈퇴</a>
</body>
</html>
▶Join.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>
<style>
input{
display : block;
}
</style>
</head>
<body>
<form action="JoinCon" method="post">
ID : <input type = "text" name = "id">
PW : <input type = "password" name = "pw">
AGE : <input type = "text" name = "age">
NickName : <input type = "text" name = "nickname">
<input type = "submit" value = "회원가입">
</form>
</body>
</html>
'Maven Project' 카테고리의 다른 글
회원가입 실습 (0) | 2022.05.18 |
---|---|
전체회원 확인하기 (0) | 2022.05.17 |
로그인 (0) | 2022.05.17 |
회원 탈퇴 (0) | 2022.05.16 |
Maven Project (0) | 2022.05.13 |