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에 추가된다.
@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이 정상적으로 출력된다.
@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에 등록된 것을 확인할 수 있다.
@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