본문 바로가기
IT 이야기/CRUD

[Spring CRUD] read,

by Dblog 2021. 3. 24.
728x90

CRUD(CREATE, READ, UPDATE, DELETE)

https://ko.wikipedia.org/wiki/CRUD

 

CRUD - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터

ko.wikipedia.org

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 적인 측면에선 보기 좋지 않습니다.

 

728x90

'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

댓글