스프링 프레임워크 회원 프로젝트 따라가하기 - 유투브 (코딩레시피님)

인텔리제이로 스프링 프레임워크 프로젝트 만들기 - 회원가입 완성하기(인텔리제이, 스프링, Mybatis, MySQL)

parkrams 2023. 4. 2. 15:59
728x90
root-context 세팅
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

        <!-- 데이터베이스 이름 및 계정 확인 -->
    <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/내디비 이름!;serverTimezone=Asia/Seoul" />
        <property name="username" value="유저 아이디!"/>
        <property name="password" value="유저 비밀번호!"/>
    </bean>

        <!-- 파일 모두 생성했는지 확인 -->
    <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:/mapper/*.xml" />
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

        <property name="defaultEncoding" value="UTF-8" />
        <property name="maxUploadSize" value="10000000" />

    </bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>
mybatis-config.xml 추가
  • 경로 -> /resources/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="com.homestudy.member.dto.MemberDTO" alias="member"/>
    </typeAliases>
</configuration>
resources 폴더에 mapper 폴더 생성 후 memberMapper.xml 추가
  • 경로 -> /resources/mapper/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">

<mapper namespace="Member">
<!--회원 가입 처리를 위한 쿼리문-->
<insert id="save" parameterType="member"> <!-- parameterType이 넘기는 데이터
   원래는 넘기는 데이터의 풀 경로를 써줘야 하지만 줄일 수 있다
   이규칙을 추가 시켜 주는 것이 mybatis.config.xml 의 typleAliases 부분 -->
    insert into member_table(memberEmail, memberPassword, memberName, memberAge, memberMobile)
    values (#{memberEmail}, #{memberPassword}, #{memberName}, #{memberAge}, #{memberMobile})
</insert>
</mapper>
  • 해석 values (#{memberEmail}, #{memberPassword}, #{memberName}, #{memberAge}, #{memberMobile})
  • mybatis 문법에서는 (parmeterType="member")DTO 객체로 넘겨 받았기 때문에 그 위치를 (#{DTO 필드 이름},
    #{DTO 필드 이름}, #{DTO 필드 이름}) (#{}) << 이 형태로 값을 넣어줘야 한다.
쿼리문 유저 생성 및 테이블 생성
create user homespringuser@localhost identified by '8615'; -- 유저 생성 및 비밀번호 설정 
grant all privileges on homestudy.* to homespringuser@localhost;  -- 권한주기

**회원 테이블**  
create table member\_table(  
id bigint primary key auto\_increment, -- 기본키 설정  
memberEmail varchar(20) unique,  
memberPassword varchar(20),  
memberName varchar(20),  
memberAge int,  
memberMobile varchar(30)  
);
MemberRepository
package com.homestudy.project01.repository;

import com.homestudy.project01.dto.MemberDTO;
import lombok.RequiredArgsConstructor;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

@Repository
@RequiredArgsConstructor    //의존성 주입
public class MemberRepository {
    private final SqlSessionTemplate sql;
    public int save(MemberDTO memberDTO) {   // insert 문
        System.out.println("memberDTO = " + memberDTO);

        //mapper namespace="Member"이랑 일치여부 확인
        // Member -> mapper namespace="Member"를 가리키고
        // Member.save에서 save는  mapper namespace="Member" 의 id = 'save'를 가르킨다
        return sql.insert("Member.save", memberDTO);  //넘기는 객체
    }
}
  • 해석 return sql.insert("Member.save", memberDTO); //넘기는 객체
  • Repository의 Member 는 memberMapper.xml의 namespace="Member"를 가르키고
    save라는 id를 가진 값을 호출하면서 memberDTO 값을 넘긴다
  • Id 값은 AUTO로 작성하게 해둬서 따로 입력되지 않음

참조하는 방법 확인

public int save(MemberDTO memberDTO) {   // insert 문
    System.out.println("memberDTO = " + memberDTO);

    //mapper namespace="Member"랑 일치여부 확인
    // Member -> mapper namespace="Member"를 가리키고
    // Member.save에서 save는  mapper namespace="Member" 의 id = 'save'를 가르킨다
    return sql.insert("Member.save", memberDTO);  //넘기는 객체

MemberRepository가 memberMapper.xml의  <mapper namespace="Member">을 참고 한다  

return 에서 "Member.save" 가 참조 하는 값이
memberMapper.xml 에서 <mapper namespace="Member> 의
    <insert id="save" 부분이 된다 

return에서 ,memberDTO 의 member는 
memberMapper.xml 에서 <mapper namespace="Member> 의
    <parameterType="member"을 참조하게 되는데
    여기서 "member"를 원래는 전체 주소를 적어야 하지만 짧게 지정해주는 곳이
      mybatis-config.xml의 
    <configuration>
        <typeAliases>
            <typeAlias type="com.homestudy.member.dto.MemberDTO" alias="member"/>
        </typeAliases>
    </configuration>
    alias="member" 에서 설정한다  별칭 지정


    <typeAlias type="com.homestudy.member.dto.MemberDTO" // 이 경로에 있는 MemberDTO클래스를
    alias="member"/> // member 로 쓰겠다
728x90