본문 바로가기
Project/토이 프로젝트

[CRUD프로젝트] : create, 유저 등록하기

by 오주현 2022. 6. 30.
반응형

간단하게 CRUD 프로젝트를 만들었다.

 

이번에는 만들면서 다시 공부도 해보고 이제 막 Spring을 시작하는 후배한테 알려줄 겸해서 만들고 있다.

 

https://github.com/ohju96/crudTest

 

GitHub - ohju96/crudTest: crud Test

crud Test. Contribute to ohju96/crudTest development by creating an account on GitHub.

github.com

 

깃 허브에도 코드를 올려두었다.

 

<?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">

<!-- JAVA와 연결할 Mapper 파일 설정 -->
<mapper namespace="com.example.crudtest.mapper.UserMapper">

<!--    User 등록하기-->
    <insert id="insertUser" parameterType="com.example.crudtest.dto.UserDto">
        INSERT INTO USER(id, pw)
        VALUES (#{userId}, #{userPw})
    </insert>

<!--    ID 중복 체크-->
    <select id="checkUserId" parameterType="com.example.crudtest.dto.UserDto" resultType="int">
        SELECT COUNT(*)
        FROM USER
        WHERE id = #{userId}
    </select>

</mapper>

매퍼에서는 등록하는 코드와 중복 체크를 위한 코드를 .xml에 작성해 주었다.

 

@Mapper
public interface UserMapper {

    // 유저 등록하기 : create 로직에 사용
    int insertUser(UserDto userDto) throws Exception;

    // 유저 아이디 등록 여부 체크 : create 로직에 사용
    int checkUserId(UserDto userDto) throws Exception;

}

.xml과 매퍼 인터페이스를 연결해주었고

 

@Slf4j
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {

    private final UserMapper userMapper;

    @Override
    public RedirectDto insertUser(UserDto userDto) throws Exception {
        log.info("### insertUser start");
        log.info("### userDto 값이 잘 넘어 왔는지 확인 : {}", userDto);

        RedirectDto redirectDto = new RedirectDto();

        // 아이디 중복 체크 로직 : 1 이상 -> 아이디 존재, 0 -> 없음
        if (userMapper.checkUserId(userDto) == 1) {
            log.info("### 중복 체크에 걸림 : 중복된 아이디 : {}", userDto.getUserId());

            redirectDto.setMsg("이미 존재하는 아이디입니다. 다른 아이디를 입력해주세요.");
            redirectDto.setUrl("/crud/create");

            log.info("### insertUser end");
            return redirectDto;
        }

        // User 등록 : 정상 등록 -> 1, 그 외 -> 비정상
        if (userMapper.insertUser(userDto) == 1) {
            redirectDto.setMsg("정상 등록 되었습니다.");
            redirectDto.setUrl("/index");
        } else {
            redirectDto.setMsg("등록에 문제가 생겼습니다.");
            redirectDto.setUrl("/crud/create");
        }

        log.info("### insertUser end");
        return redirectDto;
    }
}

서비스에서 중복 여부와 정상 등록 여부를 판단해 redirectDTO를 통해 값을 Controller에 넘겨주었다.

 

@PostMapping("/create")
    public String insertUser(HttpServletRequest request, Model model) throws Exception {
        log.info("### insertUser start");

        UserDto userDto = new UserDto();
        userDto.setUserId(request.getParameter("userId"));
        userDto.setUserPw(request.getParameter("userPw"));
        log.info("### userDto : {}", userDto);

        RedirectDto redirectDto = userService.insertUser(userDto);
        log.info("### redirectDto : {}", redirectDto);

        model.addAttribute("msg", redirectDto.getMsg());
        model.addAttribute("url", redirectDto.getUrl());

        log.info("### insertUser end");
        return "/redirect";
    }

Controller에서는 view에서 입력한 정보를 받아 userDto에 넣어주고 이 정보를 서비스에 넘긴 뒤 redirectDto를 리턴 받아 상태에 따른 msg와 url을 redirect로 넘겨주어 alert로 상태를 알리고 상태에 맞는 url로 넘어가도록 설정해 주었다.

 

이 다음은 조회 로직을 작성 할 것이다.

반응형

댓글