본문 바로가기
Mybatis/실전 프로젝트 예제

회원 관리 시스템 (CRUD)

by DEVLIB 2025. 4. 17.
728x90

1. 프로젝트 구조

src/
├── main/java
│   └── com.example.member
│       ├── controller
│       ├── domain (User.java)
│       ├── mapper (UserMapper.java, UserMapper.xml)
│       └── service (UserService.java)
└── main/resources
    └── mappers
        └── UserMapper.xml

2. User 엔티티 (DTO)

public class User {
    private int id;
    private String name;
    private String email;
    private String password;
    private LocalDateTime createdAt;
}

3. UserMapper 인터페이스

@Mapper
public interface UserMapper {
    List<User> findAll();
    User findById(int id);
    void insert(User user);
    void update(User user);
    void delete(int id);
}

4. UserMapper.xml (SQL 정의)

<mapper namespace="com.example.member.mapper.UserMapper">

  <select id="findAll" resultType="User">
    SELECT * FROM users
  </select>

  <select id="findById" parameterType="int" resultType="User">
    SELECT * FROM users WHERE id = #{id}
  </select>

  <insert id="insert" parameterType="User">
    INSERT INTO users (name, email, password, created_at)
    VALUES (#{name}, #{email}, #{password}, NOW())
  </insert>

  <update id="update" parameterType="User">
    UPDATE users
    SET name = #{name}, email = #{email}, password = #{password}
    WHERE id = #{id}
  </update>

  <delete id="delete" parameterType="int">
    DELETE FROM users WHERE id = #{id}
  </delete>

</mapper>

5. UserService (트랜잭션 및 로직 처리)

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserMapper userMapper;

    public List<User> getAllUsers() {
        return userMapper.findAll();
    }

    public User getUser(int id) {
        return userMapper.findById(id);
    }

    @Transactional
    public void createUser(User user) {
        userMapper.insert(user);
    }

    @Transactional
    public void updateUser(User user) {
        userMapper.update(user);
    }

    @Transactional
    public void deleteUser(int id) {
        userMapper.delete(id);
    }
}

6. UserController (REST API)

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping
    public List<User> list() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User detail(@PathVariable int id) {
        return userService.getUser(id);
    }

    @PostMapping
    public void create(@RequestBody User user) {
        userService.createUser(user);
    }

    @PutMapping("/{id}")
    public void update(@PathVariable int id, @RequestBody User user) {
        user.setId(id);
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable int id) {
        userService.deleteUser(id);
    }
}

7. DB 테이블 구조 (MySQL 기준)

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL UNIQUE,
  password VARCHAR(100) NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

기능 요약

기능 URL   메서드 설명
전체 목록 조회 /api/users GET 전체 회원 리스트
상세 조회 /api/users/{id} GET 개별 회원 정보
등록 /api/users POST 신규 회원 등록
수정 /api/users/{id} PUT 회원 정보 수정
삭제 /api/users/{id} DELETE 회원 삭제

🧠 확장

  • 비밀번호 암호화 (BCryptPasswordEncoder)
  • 검색 조건 처리 (name, email 기준)
  • 페이징 처리 (LIMIT, OFFSET)
  • 중복 이메일 예외 처리
  • 가입 통계 및 필터 API
LIST

'Mybatis > 실전 프로젝트 예제' 카테고리의 다른 글

REST API와 MyBatis 연동  (0) 2025.04.17
게시판 구현 (페이징, 검색 포함)  (0) 2025.04.17