pom.xml 수정
<properties>
<java-version>1.11</java-version>
<org.springframework-version>4.3.8.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 외부 라이브러리 추가 -->
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<!-- 외부 라이브러리 추가 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.11</source>
<target>1.11</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
root-context.xml
study의 root-context파일을 복사해 온다
<!-- 프로젝트 전반의 설정을 준비하는 곳(웹 제외) -->
<!-- hikariCP : 연결정보 저장객체 -->
<bean id="hikariConfig"
class="com.zaxxer.hikari.HikariConfig">
<!-- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> -->
<!-- <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/springdb"/> -->
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="jdbcUrl" value="jdbc:log4jdbc:mysql://localhost:3306/springdb"/>
<property name="username" value="root" />
<property name="password" value="1234"/>
</bean>
<!-- hikariCP : 연결정보 저장객체 -->
<!-- dataSource(CP): 디비연결 -->
<bean id="dataSource"
class="com.zaxxer.hikari.HikariDataSource"
destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- dataSource(CP) : 디비연결 -->
<!-- dataSource : 디비연결 -->
<!-- <bean id="dataSource" -->
<!-- class="org.springframework.jdbc.datasource.DriverManagerDataSource"> -->
<!-- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> -->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/springdb"/> -->
<!-- <property name="username" value="root"/> -->
<!-- <property name="password" value="1234"/> -->
<!-- </bean> -->
<!-- dataSource : 디비연결 -->
<!-- sqlSessionFactory : 디비연결, 데이터처리(SQL실행,Mybatis설정) -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"/>
</bean>
<!-- sqlSessionFactory : 디비연결, 데이터처리(SQL실행,Mybatis설정) -->
<!-- sqlSession : 자동 디비연결,데이터처리(SQL실행,Mybatis설정), 자동 자원해제처리 -->
<!-- 기본적인 트랜잭션 관리,쓰레드 처리 안정성 높임 -->
<bean id="sqlSession"
class="org.mybatis.spring.SqlSessionTemplate"
destroy-method="close">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- sqlSession : 자동 디비연결,데이터처리(SQL실행,Mybatis설정), 자동 자원해제처리 -->
<!-- com.itwillbs.persistence 패키지 등록 -->
<context:component-scan base-package="com.itwillbs.persistence" />
</beans>
테스트 해 보기
package com.itwillbs.controller;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"}
)
public class MyBatisTest {
private static final Logger logger = LoggerFactory.getLogger(MyBatisTest.class);
@Inject
private SqlSession sqlSession;
@Test
public void connectTest() {
logger.debug(sqlSession+"");
}
}
회원가입 ver
MemberController
package com.itwillbs.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
// 회원가입 (정보 입력)
@RequestMapping(value="/join", method=RequestMethod.GET)
public void memberJoinGET() {
}
// 회원가입 (정보 처리)
@RequestMapping(value="/join", method=RequestMethod.POST)
public void memberJoinPOST() {
}
}
@RequestMapping(value = "/members/*")
매핑 추가
http://localhost:8088/controller/members/join
로 이동해 보장
// http://localhost:8088/controller/members/join
이동이동
jsp 페이지로 연결된 걸 확인
join.jsp
<body>
<h1>/members/join.jsp</h1>
<fieldset>
<legend>스프링 MVC 회원가입</legend>
<form action="/members/join" method="post"> // 겟방식이면 안됩니더
아이디: <input type="text" name="userid"> <br>
비밀번호: <input type="password" name="userpw"> <br>
이름: <input type="text" name="username"> <br>
이메일: <input type="text" name="useremail"> <br>
<input type="submit" value="회원가입">
</form>
</fieldset>
</body>
어! 근데 !
<!-- action="members/join" 주소 생략 가능
action 속성 정보가 없으면 자기 자신의 주소를 호출 -->
<form method="post">
@Controller
//@RequestMapping(value = "/members/*") // 컨트롤러를 구분하는 주소 매핑 ~.me ~.bo
@RequestMapping(value = "/members/*")
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
// http://localhost:8088/controller/join
// http://localhost:8088/controller/members/join
// http://localhost:8088/members/join
// 회원가입 (정보입력)
@RequestMapping(value = "/join",method = RequestMethod.GET)
public void memberJoinGET() {
logger.debug(" /members/join 호출 -> memberJoinGET() 실행 ");
// 연결된 뷰페이지로 이동
logger.debug(" /views/members/join.jsp페이지로 이동 ");
}
// 회원가입 (정보처리)
@RequestMapping(value = "/join",method = RequestMethod.POST)
public String memberJoinPOST() {
logger.debug(" memberJoinPOST() 호출 ");
// 전달정보 저장
// DB에 정보를 저장
// 페이지 이동 (로그인페이지-/members/login)
return "redirect:/members/login";
}
}
MemberVO 생성
@Data
public class MemberVO {
private String userid;
private String userpw;
private String username;
private String useremail;
private Timestamp regdate;
private Timestamp updatedate;
}
MemberController
// 회원가입 (정보처리)
@RequestMapping(value = "/join",method = RequestMethod.POST)
public String memberJoinPOST(/* @ModelAttribute */ MemberVO vo) {
logger.debug(" memberJoinPOST() 호출 ");
//MemberVO vo = new MemberVO();
//vo.setUserid(request.getParamater("userid"));
// 한글처리(인코딩 설정) => 필터
// 전달정보 저장
logger.debug(" vo :"+vo);
// DB에 정보를 저장
// 페이지 이동 (로그인페이지-/members/login)
return "redirect:/members/login";
}
한글 인코딩 처리 해야 됨
web.xml
<filter>
<filter-name>setUTF8</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setUTF8</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
이제 한글을 쳐도
깨지지 않는다!
MemberService
서비스 계층(비즈니스로직 계층) : 사용자의 요구사항을 구현하는 단계
=> 컨트롤러 - DAO를 연결하는 계층(접착제)
=> 외부 호출이 영속계층(디비)에 종속적인 상황을 막아 줌
public interface MemberService {
// 구현 하고자하는 동작을 추상 메서드로 선언
public void memberJoin(MemberVO vo);
// 컨트롤러가 전달해 준 정보를 가지고 DAO를 처리
// DAO 객체 생성 - 회원가입 처리 메서드 호출
}
MemberServiceImpl
@Service : 스프링(root-context.xml)에서 해당 객체를 서비스로 인식
=> 서비스 객체(빈)으로 인식
@Service
public class MemberServiceImpl implements MemberService {
private static final Logger logger = LoggerFactory.getLogger(MemberServiceImpl.class);
@Override
public void memberJoin(MemberVO vo) {
// TODO Auto-generated method stub
}
}
MemberController
MemberDAO
public interface MemberDAO {
// 회원가입 동작 (S-memberJoin)
//public void memberJoin();
public void insertMember();
}
MemberDAOImpl
@Repository
public class MemberDAOImpl implements MemberDAO {
private static final Logger logger = LoggerFactory.getLogger(MemberDAOImpl.class);
@Override
public void insertMember() {
}
}
ServiceImpl
@Inject
private MemberDAO mdao;
에 주입
MemberDAOImpl
memberMapper.xml
<!-- memberMapper.xml -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
dtd 추가
<mapper namespace="com.itwillbs.mapper.MemberMapper">
<!-- 회원가입 -->
<insert id="insertMember">
insert into tbl_member(userid, userpw, username, useremail)
values(#{userid},#{userpw},#{username},#{useremail})
</insert>
</mapper>
매퍼 추가
DAOImpl에 추가
되는지 테스트~~
확인 완
'⛏️ > Spring' 카테고리의 다른 글
[Spring] main ver. / logout ver. (0) | 2023.12.12 |
---|---|
[Spring] member login ver. (0) | 2023.12.08 |
[Spring] Controller 테스트 (1) | 2023.12.07 |
[Spring] Controller로 페이지 연결하기(주소 매핑) (0) | 2023.12.04 |
[Spring] 회원정보 조회, 수정, 삭제, 리스트 조회 ver (0) | 2023.12.01 |