DeseoDeSeo
ミ★ Spring boot 02 본문
kr.spring > package생성 " kr.spring.repository" > interface생성 " BoardRepository.java"
myBatis에서는 mapper, jpa에서는 Repository임.
myBatis에서는 xml에서 쿼리문을 만드는데 jpa에서는 jpaRepostiory를 상속받으면 해결됨.
public interface BoardRepository extends JpaRepository<T, ID>
T : 테이블 명
ID : pk에 대한 데이터타입.
⬇ jpa에 대한 설명들 여기서 볼 수 있다.↓
Spring Data JPA - Reference Documentation
< 3 tier > 일 처리의 흐름.
Board Controller ➜ Board Service ➜ Board Repository ➜DB
Board Repository가 일을 할 것 임.
kr.spring > 패키지 생성 " kr.spring.service " > interface생성 "BoardService.java"
package kr.spring.service;
import java.util.List;
import kr.spring.entity.Board;
public interface BoardService {
public List<Board> getList(); // 게시글 전체 조회
public void register(Board vo); //게시글 등록
public Board get(Long idx); //상세보기
public void delete(Long idx);
public void update(Board vo);
}
kr.spring.service > class 생성 " BoardServiceImpl.java "
package kr.spring.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import kr.spring.entity.Board;
import kr.spring.repository.BoardRepository;
@Service
public class BoardServiceImpl implements BoardService { // BoardService를 가져다 쓰겠다.
@Autowired
private BoardRepository boardRepository ;
@Override
public List<Board> getList() { //여러개의 게시물을 가져오니까 board데이터의 list형태
List<Board> list = boardRepository.findAll();
return list;
}
@Override
public void register(Board vo) {
boardRepository.save(vo);
}
//상세보기
@Override
public Board get(Long idx) {
Optional<Board> vo = boardRepository.findById(idx); //board형태가 아니라 optional형태임.
return vo.get(); //이렇게 하면 optional안에 있는걸 꺼내주는거임.
}
@Override
public void delete(Long idx) {
boardRepository.deleteById(idx);
}
@Override
public void update(Board vo) {
//JPA의 SAVE메서드는 새로운pk값 또는 없는 값이 들어오면 insert기능을
// 기존에 존재하는 pk값이 들어오면 update기능을 함.
boardRepository.save(vo);
}
}
kr.spring.controller < class생성 "BoardController.java"
package kr.spring.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import kr.spring.entity.Board;
import kr.spring.service.BoardService;
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
@RequestMapping("/list")
public String list(Model model) { // 게시글 전체 조회
List<Board> list = boardService.getList();
model.addAttribute("list", list);
return "list";
}
@PostMapping("/register")
public String register(Board vo) {
boardService.register(vo);
return "redirect:/list";
}
@GetMapping("/get") //비동기방식으로 응답하려면 responsebody.
public @ResponseBody Board get(@RequestParam("idx") Long idx) {
Board vo = boardService.get(idx);
return vo;
}
@GetMapping("/remove")
public String remove(@RequestParam("idx") Long idx) {
boardService.delete(idx);
return "redirect:/list";
}
@PostMapping("/modify")
public String modify(Board vo) {
boardService.update(vo);
return"redirect:/list";
}
}
src > main > folder생성 "webapp" > folder생성 "WEB-INF" > folder생성"board"
package kr.spring.entity;
import java.util.Date;
import javax.annotation.Generated;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import lombok.Data;
import lombok.ToString;
@ToString
@Entity //Board VO가 Database Table로 만들 떄 설정
@Data
public class Board { //vo가 orm을 통해서 table을 만들어줌.
@Id //pk를 의미함. //1씩 증가하면서 넣기 -> auto_incremente와 같음
@GeneratedValue(strategy = GenerationType.IDENTITY) //를 하면 자동으로 1씩 증가하게됨.
private Long idx; //게시글 고유번호(호환을 long형으로 해준다.)
private String title;
@Column(length=2000) //길이 지정 : 길이지정 따로 안할 때 길이 255임.
private String content;
@Column(updatable = false) //수정할 때 작성자는 안 바꿔 주겠다.
private String writer;
@Column(insertable = false, updatable = false, columnDefinition = "datetime default now()")
private Date indate;
@Column(insertable = false, updatable = false, columnDefinition = "int default 0")
private Long count;
}
jsp를 사용하기 위해서는
pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
webapp>WEB-INF > board> list.jsp 생성
실행은
SpringMVC10Application에서 Run as > spring Boot App 실행하고
url 주소에 localhost:8081:boot/list
ajax를 사용하기 위해서
상단에
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
추가해줌.
'spring > Spring Boot' 카테고리의 다른 글
[Spring Boot ] 로그인 구현 (0) | 2023.10.23 |
---|---|
[Spring Boot] Spring Boot Security (0) | 2023.10.20 |
ミ★ Spring Boot 01 (0) | 2023.10.16 |