반응형

라이브러리(lib) 추가 하기

  • JPA
  • MariaDB

 

New Project

 

 

Dependencies

  • Spring Data JPA
  • MariaDB Driver

 

 

pom.xml (demo1)

  • 해당 'dependency' 부분 복사

 

 

pom.xml (fastlms)

  • 복사한 'dependency'를 현재 작업 중인 프로젝트에 붙여넣기
  • 'Load Maven Changes' 아이콘 클릭

 

 

Maven

추가된 라이브러리 확인

  • JPA
  • MariaDB

 

 

APPLICATION FAILED TO START

DataSource Error 발생

 

- MariaDB 10.6.5

  • ip: 127.0.0.1
  • post: 43306
  • db instance: minicampus
  • id: minicampus_user
  • pwd: a1234

 

 

application.yml

spring.datasource.url

 

 

Database

Add - Database - MariaDB

 

 

Data Sources and Drivers

  • Host: localhost
  • Port: 43306
  • User: minicampus_user
  • Password: a1234
  • Database: minicampus
  • URL: jdbc:mariadb://localhost:43306/minicampus

 


MariaDB

application.yml

 

application.yml

 

application.yml

 

application.yml

 

application.yml

 

application.yml

spring:
  datasource:
    url: jdbc:mariadb://localhost:43306/minicampus
    driver-class-name: org.mariadb.jdbc.Driver
    username: minicampus_user
    password: a1234

 


JPA

application.yml

 

application.yml

 

application.yml

 

application.yml

 

application.yml

 

application.yml

jpa:
  generate-ddl: true
  hibernate:
    ddl-auto: update
  show-sql: true

 

 

정상적으로 실행됨


 

Member.java

 

 

Add Id attribute

  • Name: userId
  • Type: java.lang.String

 

 

Member.java

package com.zerobase.fastlms.membe.entity;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Data
@Entity
public class Member {

    @Id
    private String userId;

    private String userName;
    private String phone;
    private String password;
    private LocalDateTime regDt;
}

 

 

MemberRepository.java

 

package com.zerobase.fastlms.member.repository;

import com.zerobase.fastlms.membe.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberRepository extends JpaRepository<Member, String> {

}

 

 

Database

 

 

application.yml

jpa:
  generate-ddl: true
  hibernate:
    ddl-auto: update
  show-sql: true
  • 데이터베이스를 자동 업데이트 수행

 

 

member table

  • 아직 데이터는 없지만 테이블이 만들어진 모습

 

 

MemberController.java

 

 

register_complete.html

  • 회원가입이 완료되면 출력할 페이지 생성

 

 

localhost:8080/member/register

  • 회원 정보 입력 - '회원 가입 하기'

 

 

localhost:8080/member/register

  • 가입 완료 페이지

 

 

table member

  • 웹페이지에서 입력한 값이 테이블에 저장된 모습

 

 

  • MemberInput으로 값들을 받고
  • 각각의 값들을 해당하는 위치에 저장

 

  • MemberInput(userId=test@unknown.com, userName=홍길동, phone=010-1111-2222, password=1234, regDt=null)
  • Hibernate: select member0_.user_id as user_id1_0_0_, member0_.password as password2_0_0_, member0_.phone as phone3_0_0_, member0_.reg_dt as reg_dt4_0_0_, member0_.user_name as user_nam5_0_0_ from member member0_ where member0_.user_id=?
  • Hibernate: insert into member (password, phone, reg_dt, user_name, user_id) values (?, ?, ?, ?, ?)

 

 

MemberService.java

  • 동일한 이메일 값을 입력하면 이전값이 지워지는 현상을 막기는 서비스를 위한 인터페이스 생성
package com.zerobase.fastlms.member.service;

import com.zerobase.fastlms.member.model.MemberInput;

public interface MemberService {

    boolean register(MemberInput parameter);
}

 

 

MemberServiceImpl.java

  • implements로 인터스페이스를 구현

 

 

MemberServiceImpl.java

  • MemberController.java에서 받던 MemberInput을 받아서 memberRepository에 저장
package com.zerobase.fastlms.member.service;

import com.zerobase.fastlms.membe.entity.Member;
import com.zerobase.fastlms.member.model.MemberInput;
import com.zerobase.fastlms.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@RequiredArgsConstructor
@Service
public class MemberServiceImpl implements MemberService {

    private final MemberRepository memberRepository;

    @Override
    public boolean register(MemberInput parameter) {

        Member member = new Member();
        member.setUserId(parameter.getUserId());
        member.setUserName(parameter.getUserName());
        member.setPhone(parameter.getPhone());
        member.setPassword(parameter.getPassword());
        member.setRegDt(LocalDateTime.now());
        memberRepository.save(member);

        return false;
    }
}

 

 

MemberController.java

package com.zerobase.fastlms.member.controller;

import com.zerobase.fastlms.member.model.MemberInput;
import com.zerobase.fastlms.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.servlet.http.HttpServletRequest;

@RequiredArgsConstructor
@Controller
public class MemberController {

    private final MemberService memberService;
/*
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
*/
    @GetMapping("/member/register")
    public String register() {

        return "member/register";
    }

    @PostMapping("/member/register")
    public String registerSubmit(HttpServletRequest request,
                                 MemberInput parameter) {

        boolean result = memberService.register(parameter);

        return "member/register_complete";
    }
}

 

 

Database

  • 쿼리: select * from member;

 

 

Database

  • 쿼리: delete from member where 1 = 1;

 

 

  • 다시 정보 입력

 

 

  • 가입 완료 페이지

 

 

MemberServiceImpl.java

Optional<Member> optionalMember =
        memberRepository.findById(parameter.getUserId());
if (optionalMember.isPresent()) {
    //현재 userId에 해당하는 데이터 존재
    return false;
}

 

 

MemberController.java

@PostMapping("/member/register")
public String registerSubmit(Model model,
                             HttpServletRequest request,
                             MemberInput parameter) {

    boolean result = memberService.register(parameter);

    model.addAttribute("result", result);

    return "member/register_complete";
}

 

 

register_complete.html

<body>
    <div th:if="${result}">
        <h1>회원 가입 결과</h1>
        <p>회원 가입이 완료 되었습니다.</p>
    </div>

    <div th:if="${result eq false}">
        <h1>회원 가입 결과</h1>
        <p>회원 가입에 실패하였습니다.</p>
    </div>
</body>

 

 

  • 동일한 이메일(ID) 입력

 

 

  • 회원 가입 실패 메시지 노출

 

 

반응형

+ Recent posts