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 |