CRUD(CREATE, READ, UPDATE, DELETE)
https://ko.wikipedia.org/wiki/CRUD
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다.
개발 환경
- intellij
- Spring boot
READ
단순히 DB에 있는 데이터를 읽어 오는 기능입니다.
개발할 패키지 구조, java 파일
- DAO
- Service
- Controller
- Entity
- Repository
com.example.root.controller.CreateController.java
import com.example.root.dao.UserEntity;
import com.example.root.error.StatusDefine;
import com.example.root.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ReadController {
@Autowired
private UserService userService;
@GetMapping("/read")
public String readPage(Model model) {
model.addAttribute("userData", userService.readAllUser());
return "CRUD/read";
}
}
read 메소드는 데이터를 읽어와서 HTML에 전달만 하기 때문에 get하나로 충분합니다.
read를 테스트 하기위해 작성한 간단한 테이블 구조입니다.
com.example.root.dao.UserEntity.java
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Entity
@Table(name = "users")
public class UserEntity {
@Id
@GeneratedValue
private Long id;
private String email;
private String password;
}
Spring JPA와 Lombok 라이브러리를 사용하였습니다.
@data
Lombok의 @Getter @Setter를 한번에 선언하기 위해 사용했습니다. 실질적으로 @ToString @EqualsAndHashCod... 등이 더 포함되어 있습니다.
@entitiy
springJPA가 데이터베이스와 테이블을 매핑할 때 @entity 를 찾게 되는데 이때 @Table(name = "{name}")을 사용해서 테이블 이름을 찾게 된다. @Table이 없을때는 class이름으로 찾는다.
@Id, @GeneratedValue
@Id 로 테이블에서 PK를 찾고 설정할 수 있으며 @GeneratedValue로 자동으로 값을 gener해줄 수 있습니다. 이 기능은 mysql에 autoincrement와 비슷한 기능을 합니다.
com.example.root.repo.UserRepo.java
import com.example.root.dao.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepo extends JpaRepository<UserEntity, Long> {
}
아직까지는 @Repository에 포함하고 있는 기능으로 충분하기 때문에 추가로 함수를 정의 하진 않습니다.
read항목에 대해서 전체유저를 검색할때는 jpa 라이브러리가 제공하는 readAll() 메소드로 충분하지만 추후 특정 유저를 검색할때 findBy{entity}를 사용해서 데이터를 검색할 수 있습니다. findBy의 경우 findByName, findByEmail처럼 entity이름을 넣어주면 jpa가 알아서 함수를 만들어 줍니다.
com.example.root.service.UserServiceInterface.java
import com.example.root.dao.UserEntity;
import java.util.List;
public interface UserServiceInterface {
int createUser(UserEntity user);
List<UserEntity> readAllUser();
int updateUser(UserEntity user);
int Delete(UserEntity user);
UserEntity myPage(String email);
}
앞으로 개발할 UserService class는 최소 4개의 method를 기본틀로 사용됩니다.
com.example.root.service.UserService.java
import com.example.root.dao.UserEntity;
import com.example.root.error.StatusDefine;
import com.example.root.repo.UserRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service
public class UserService implements UserServiceInterface {
@Autowired
private UserRepo userRepo;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public int createUser (UserEntity user) {
UserEntity newUser = new UserEntity();
newUser.setEmail(user.getEmail());
newUser.setId(user.getId());
newUser.setPassword(passwordEncoder.encode(user.getPassword()));
userRepo.save(newUser);
return StatusDefine.SUCCESS.getCode();
}
@Override
public List<UserEntity> readAllUser() {
try {
log.info("read success");
List<UserEntity> UserList = userRepo.findAll();
return UserList;
} catch (Exception e) {
log.error(e.getMessage());
return null;
}
}
@Override
public int updateUser(UserEntity user) {
return StatusDefine.SUCCESS.getCode();
}
@Override
public int Delete(UserEntity user) {
return StatusDefine.SUCCESS.getCode();
}
}
read 영역은 findAll();을 사용하면 테이블에 있는 모든 데이터를 읽어서 list에 담아줍니다.
resources.templates.CRUD.create.html
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>read</h2>
<div>
<table>
<thead>
<th>email</th>
</thead>
<tbody>
<tr th:each="userData : ${userData}" th:object="${userData}">
<td th:text="${userData.email}">email</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
간단한 테스르를 위해 작성한 HTML이라 view 적인 측면에선 보기 좋지 않습니다.
'IT 이야기 > CRUD' 카테고리의 다른 글
[Spring] Thymeleaf template적용 (0) | 2021.05.16 |
---|---|
[Springboot] JPA적용 (0) | 2021.05.02 |
[Spring] QueryDsl 적용 (0) | 2021.04.21 |
[Spring CRUD] update, (0) | 2021.04.04 |
[Spring CRUD] create, (0) | 2020.12.27 |
댓글