Spring 강의 day 12

주세환·2023년 5월 15일
0

Spring

목록 보기
12/18
post-thumbnail

Library

등록

Controller

public interface Library2Repository extends JpaRepository<Library2, BigInteger>{
    
}

Library2Repository.java를 생성하고

@Controller
@Slf4j
@RequiredArgsConstructor
@RequestMapping(value = "/library2")
public class Library2Controller {

    final Library2Repository l2Repository;
    
    @GetMapping(value = "/insert.do")
    public String insertGET() {
        try {
            return "/library2/insert";
        } catch (Exception e){
            e.printStackTrace();
            return "redirect:/home.do";
        }
    }

    @PostMapping(value="/insert.do")
    public String insertPOST(@ModelAttribute Library2 obj) {
        try {
            log.info("{}", obj.toString());
            l2Repository.save(obj);
            return "redirect:/library2/insert.do";
        } catch (Exception e){
            e.printStackTrace();
            return "redirect:/home.do";
        }
    }
}

Library2Controller.java를 생성한다.

<body>
    
    <form th:action="@{/library2/insert.do}" method="post">
        <input type="text" name="name" value="이름" />
        <input type="text" name="address" value="주소" />
        <input type="text" name="phone" value="전화번호" />
        <input type="submit" value="등록" />
    </form>
</body>

insert.html까지 생성하면

등록하는 창이 뜬다.

이렇게 입력하고 등록을 누르면

DB에 추가된다.


RestController

@Slf4j
@RestController
@RequestMapping(value = "/api/library2")
@RequiredArgsConstructor
public class RestLibrary2Controller {
    final Library2Repository l2Repository;

    // 127.0.0.1:9090/ROOT/api/library2/insert.json
    // @RequestBody Library2 obj    => 기본으로 보낼 때
    // @ModelAttribute Library2 obj => 위의 방식이 불가능할 때 이미지...
    @PostMapping(value="/insert.json")
    public Map<String, Object> insertPOST(@RequestBody Library2 obj) {
        Map<String, Object> retMap = new HashMap<>();
        try{
            log.info("{}", obj.toString());
            l2Repository.save(obj);
            retMap.put("status", 200); // 성공 시 200
        } catch (Exception e) {
            e.printStackTrace(); // 개발자용 debug
            retMap.put("status", -1); // 실패 시 -1
            retMap.put("error", e.getMessage());
        }
        return retMap;
    }

RestLibrary2Controller.java를 생성한다.


POSTMAN에서 실행시켜보자.

200이 출력됐으니 성공했다는 뜻이다.

DB에도 추가된 모습을 확인할 수 있다.


조회

public interface Library2Repository extends JpaRepository<Library2, BigInteger> {
    
    // select * from 테이블명 where 컬럼 = ?
    //                        findBy+컬럼

    // select * from 테이블명 order by no asc
    List<Library2> findAllByOrderByNameAsc();
}    

Library2Repository.java에 위 코드를 추가한다.


// 127.0.0.1:9090/ROOT/library2/selectlist.do
@GetMapping(value="/selectlist.do")
public String selectlistGET(Model model){
    try {
        List<Library2> list = l2Repository.findAllByOrderByNameAsc();

        // [ 클래스, 클래스, ... ]
        log.info("{}", list.toString());
        model.addAttribute("list", list);
        return "/library2/selectlist";
    } catch (Exception e) {
        e.printStackTrace();
        return "redirect:/home.do";
    }
}

Library2Controller에 selectListGET을 추가하고


<body>
    
    <!-- for (library2 obj : list) {  }  (반복문)-->
    <table border="1">
        <tr th:each="obj : ${list}">
            <td th:text="${obj.code}"></td>
            <td th:text="${obj.name}"></td>
            <td th:text="${obj.address}"></td>
            <td th:text="${obj.phone}"></td>
            <td th:text="${obj.regdate}"></td>
        </tr>
    </table>

</body>

${obj.getCode()} = ${obj.code}

selectlist.html을 생성한다.

DB에 등록되어있는 library의 데이터값이 출력된다. 순서대로 코드, 이름, 주소, 번호, 등록날짜이다.


// 127.0.0.1:9090/ROOT/api/library2/selectlist.json
@GetMapping(value="/selectlist.json")
public Map<String, Object> insertPOST(){
    Map<String, Object> retMap = new HashMap<>();
    try{
        List<Library2> list = l2Repository.findAllByOrderByNameAsc();
        log.info("{}", list.toString());
        retMap.put("status", 200);
        retMap.put("list", list);
    } catch (Exception e){
        e.printStackTrace();
        retMap.put("status", -1);
        retMap.put("error", e.getMessage());
    }
    return retMap;
}

RestLibrary2Controller.java에 위 코드를 추가한다.


Postman에서 이렇게 조회할 수 있다.

데이터의 값이 나오고, 조회에 성공하였으므로 200이 정상적으로 출력된다.


Student

등록

Controller

@Controller
@Slf4j
@AllArgsConstructor
@RequestMapping(value = "/student2")
public class Student2Controller {

    final Student2Repository s2Repository;
    BCryptPasswordEncoder bcpe = new BCryptPasswordEncoder();
    
    @GetMapping(value = "/insert.do")
    public String insertGET() {
        try {
            return "/student2/insert";
        } catch (Exception e){
            e.printStackTrace();
            return "redirect:/home.do";
        }
    }

    @PostMapping(value="/insert.do")
    public String insertPOST(@ModelAttribute Student2 obj) {
        try {
            // 암호는 bcpe를 이용하여 암호화하기
            obj.setPassword( bcpe.encode( obj.getPassword() ) );
            log.info("{}", obj.toString());
            s2Repository.save(obj);
            return "redirect:/student2/insert.do";
        } catch (Exception e){
            e.printStackTrace();
            return "redirect:/home.do";
        }
    }
}

Student2Controller.java를 생성한다.


<body>
    <form th:action="@{/student2/insert.do}" method="post">
        <input type="text" name="email" value="email"/>
        <input type="text" name="password" value="password"/>
        <input type="text" name="name" value="name" />
        <input type="text" name="phone" value="phone"/>
        <input type="submit" value="가입" />
    </form>
</body>

insert.html을 생성한다.


이메일, 암호, 이름, 전화번호 순으로 입력한 후에 가입을 누른다.

다시 insert.do로 돌아가고

암호화된 비밀번호와 함께 db에 등록된 것을 확인할 수 있다.


RestController

@Slf4j
@RestController
@RequestMapping(value = "/api/student2")
@RequiredArgsConstructor
public class RestStudentController {

    final Student2Repository s2Repository;
    BCryptPasswordEncoder bcpe = new BCryptPasswordEncoder();
    
    @PostMapping(value="/insert.do")
    public Map<String, Object> insertPOST(@RequestBody Student2 obj) {
        Map<String, Object> retMap = new HashMap<>();
        try {
            // 암호는 bcpe를 이용하여 암호화하기
            obj.setPassword( bcpe.encode( obj.getPassword() ) );
            log.info("{}", obj.toString());
            s2Repository.save(obj);
            retMap.put("status", 200); // 성공 시 출력
        } catch (Exception e){
            e.printStackTrace(); // 개발자용 debug
            retMap.put("status", -1); // 실패 시 출력
            retMap.put("error", e.getMessage());
        }
        return retMap;
    }
}

RestStudent2Controller.java를 생성한다.


Postman에서 확인해보자.

email에 e, password에 p, name에 n, phone에 010을 입력하고 send를 눌렀다.

성공 시 출력하라고 입력한 200이 떴으니 정상적으로 등록이 가능하다.


정상적으로 등록된 모습.


이메일 중복확인

// select count(*) from student2 where email = ?
long countByEmail(String email);

Student2Repository.java에 위 코드를 추가한다.


// 이메일 중복확인용
@GetMapping(value="/emailcheck.json")
public Map<String, Object> emailcheckGET(@RequestBody Student2 obj) {
    Map<String, Object> retMap = new HashMap<>();
    try{
        retMap.put("status", 200);
        retMap.put("chk", s2Repository.countByEmail(obj.getEmail()));
    } catch (Exception e){
        e.printStackTrace();
        retMap.put("status", -1);
        retMap.put("error", e.getMessage());
    }
    return retMap;
}

RestStudent2Controller.java에 이메일 중복확인을 위한 emailcheckGET을 추가한다.


등록되어있는 이메일인 123@123.com을 넣으면 결과창에 1, 200이 출력된다.

등록되어있지 않은 이메일인 a를 넣으면 결과창에 0, 200이 출력된다.

여기서 200은 조회를 성공했다는 뜻이고 1,0은 DB에 있는 이메일 유무를 판별하는 뜻이다.


반환

// select name, phone from student2 where email = ?
Student2Projection findByEmail(String email);

Student2Repository에 위 코드를 추가한다.


public interface Student2Projection {
    
    String getName();

    String getPhone();
}

entity에 Student2Projection.java를 생성하여 위 코드를 입력한다.

Projection이 아닌 Student2로 하면 Student2의 모든 정보를 받아오기 때문에 Projection을 따로 만든다.


// 이메일이 전달되면 회원의 이름, 연락처가 반환되는 
@GetMapping(value="/selectone.json")
public Map<String, Object> selectoneGET(@RequestBody Student2 obj) {
    Map<String, Object> retMap = new HashMap<>();
    try{
        Student2Projection obj2 = s2Repository.findByEmail(obj.getEmail());
        retMap.put("status", 200);
        retMap.put("obj", obj2);
    } catch (Exception e){
        e.printStackTrace();
        retMap.put("status", -1);
        retMap.put("error", e.getMessage());
    }
    return retMap;
}

RestStudent2Controller.java에 반환을 위한 selectoneGET을 추가한다.


Postman에서 조회해보자.

등록되어있는 이메일인 asd@asd.com을 입력하면 가입할 때 해당 이메일에 대한 이름, 전화번호 정보가 출력된다.

등록되어있지 않은 이메일을 입력하면 반환할 정보가 없으므로 null이 출력된다.

여기서도 마찬가지로 200은 입력한 코드가 정상적으로 작동했다는 의미이다.


수정

@GetMapping(value="/emailcheck.json")
public Map<String, Object> emailcheckGET(@RequestParam(name="email")String email) {
    Map<String, Object> retMap = new HashMap<>();
    try{
        retMap.put("status", 200);
        retMap.put("chk", s2Repository.countByEmail(email));
    } catch (Exception e){
        e.printStackTrace();
        retMap.put("status", -1);
        retMap.put("error", e.getMessage());
    }
    return retMap;
}

emailcheckGET

@GetMapping(value="/selectone.json")
public Map<String, Object> selectoneGET(@RequestParam(name="email")String email) {
    Map<String, Object> retMap = new HashMap<>();
    try{
        Student2Projection obj2 = s2Repository.findByEmail(email);
        retMap.put("status", 200);
        retMap.put("obj", obj2);
    } catch (Exception e){
        e.printStackTrace();
        retMap.put("status", -1);
        retMap.put("error", e.getMessage());
    }
    return retMap;
}

selectoneGET

Param이 아닌 Body로 하면 불러오지 못할 수도 있다고 한다.

Param으로 받자.


emailcheck

selectone

0개의 댓글