관리 메뉴

DeseoDeSeo

ミ★ Spring boot 02 본문

spring/Spring Boot

ミ★ Spring boot 02

deseodeseo 2023. 10. 20. 18:50
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

 

Spring Data JPA - Reference Documentation

Example 121. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

< 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