한바다
스프링부트 흐름 과 이해 그리고 중복확인에러 본문
☑️ 스트링부트 구조
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로 작성하여 실행되지 않았다.
'스프링부트' 카테고리의 다른 글
[스프링부트]build.gradle , Failed to configure a DataSource오류 (0) | 2024.08.26 |
---|---|
깃명령어와 React 시작! (0) | 2024.07.03 |
git hub 연결 오류 해결 (0) | 2024.07.01 |
타임리프 실행 오류 (0) | 2024.06.26 |