Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

한바다

스프링부트 흐름 과 이해 그리고 중복확인에러 본문

스프링부트

스프링부트 흐름 과 이해 그리고 중복확인에러

한바다진화 2024. 7. 9. 21:39

☑️ 스트링부트 구조

demo project- 

  -src

    -main

      -java

       - com

         -example

          -MySpringBootApplication.java

            -controller

              :MemberController.java

             -model

              :Member.java

              -mapper

               :MemberMapper.java

              -service

               :MemberService

   -resource

    -application.properties

     -static

      -templates

       :index.html

       :success.html

      -mapper

       :MemberMapper.xml(mybatis 작성)

-pom.xml

 

✓ mapper폴더가 static안에 있으면 실행이 안된다

매퍼와 static분리 되도록 템플릿 아래에 위치하도록 한다

 

✓매퍼폴더랑 xml 파일 동시에 만드는 방법

: new>other>xml>file name: mappers/goodsItemMapper.xml

 

[어노테이션 정리]

@SpringBootApplication

: Spring Boot 애플리케이션을 시작하는 데 필요한 기본 설정을 포함하는 어노테이션

@Controller

:Spring MVC에서 컨트롤러 클래스를 정의하는 어노테이션,

어노테이션이 붙은 클래스는 웹 요청을 처리하고, 웹 뷰를 반환

@RequestMapping

:웹 요청과 메소드(또는 클래스)를 매핑하기 위해 사용,

클래스 수준과 메소드 수준에서 모두 사용될 수 있다. 주로 URL 패턴을 지정

@Slf4j

:로깅을 위한 Lombok 어노테이션,log 변수를 자동으로 생성하여 로그를 남길 수 있다.

@GetMapping

:HTTP GET 요청을 특정 메소드와 매핑하기 위해 사용,주로 데이터를 조회할 때 사용

@PostMapping

:HTTP POST 요청을 특정 메소드와 매핑하기 위해 사용,주로 데이터를 생성하거나 갱신할 때 사용

@RequestParam

:HTTP 요청 파라미터를 메소드 매개변수에 바인딩하기 위해 사용,주로 쿼리 파라미터나 폼 데이터를 받을 때 사용

@ModelAttribute

:모델 데이터를 뷰에 전달하기 위해 사용,또한, 요청 파라미터를 객체에 바인딩할 때도 사용

@ToString

:Lombok 어노테이션으로, 해당 클래스의 toString() 메소드를 자동으로 생성

@Getter

:Lombok 어노테이션으로, 해당 클래스의 모든 필드에 대해 getter 메소드를 자동으로 생성

@Setter

:Lombok 어노테이션으로, 해당 클래스의 모든 필드에 대해 setter 메소드를 자동으로 생성

@NoArgsConstructor

:Lombok 어노테이션으로, 매개변수가 없는 기본 생성자를 자동으로 생성

@AllArgsConstructor

:Lombok 어노테이션으로, 모든 필드를 매개변수로 받는 생성자를 자동으로 생성

 

✔️[회원가입 아이디 중복확인 코드 에러]

[중복확인할 input칸]

<label for="userId"></label>
                <div class="form-inline">
                    <input type="text" th:field="*{member_id}" id="userId" 
           placeholder="아이디를 입력하세요(영어대소문자+숫자6~12)" required />
                    <button type="button" id="dupMsg">중복확인 버튼</button>
                </div>
                <span id="msg1"></span>
                <p id="dupMsg"></p>

[제이쿼리 코드]

 <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
 $(document).ready(function() {
        $('#dupMsg').click(function() {
            var member_id = $("#userId").val();
        
            $.ajax({
                url: "/idCheck", // 백엔드 컨트롤러 URL
                type: "GET",
                data: { "member_id": member_id },
                success: function(data) {
                    if (data.isCount) {
                        alert("사용할 수 있는 아이디입니다.");
                    } else {
                        alert("이미 사용중인 아이디 입니다.");
                    }
                },
                error: function(xhr, status, error) {
                    console.log("에러 발생:", error);
                    alert("예기치 못한 문제가 발생했습니다. 다시 시도해주세요.");
                }
            });
        });
    });

[xml]

<select id="getId" resultType="java.lang.Integer">
 SELECT COUNT(*) FROM member
 WHERE member_id = #{member_id}

[메퍼.java ]

Integer getId(@Param("member_id") String member_id);

[서비스.java]

  public boolean getId(String member_id) {
	  Integer count = memberMapper.getId(member_id);
	 
	      return count != null && count == 0;
	    }

[컨트롤러.java]

@GetMapping("/idCheck")
@ResponseBody
//public boolean getId(Model model, @RequestBody String member_id) {
public Map<String, Object> getId(@RequestParam String member_id) {
		
Map<String, Object> response = new HashMap<String, Object>();
		
boolean isCount = memberService.getId(member_id);
		
	response.put("isCount", isCount);
	return response;

 

▶ 위 작성한 코드에서 기능이 미구형 되었던 것은 첫번째 버튼 아이디 값과  <p id="dupMsg"></p> 동일하게 지정하여

다른 변수명으로 변경하였고, 무엇보다 테이블 값이 없었던 오류 였다

▶즉 sql에 작성한 테이블은 members인데 xml에 작성한 테이블명은 member로 작성하여 실행되지 않았다.