BoardController
@Autowired
private BoardRepository repo; << 요게 기존에 사용하던 mapper.java 역할을 하는듯
@RequestMapping("/")
public String home()
{
return "redirect:/list";
}
@RequestMapping("/list")
public String list(Model model)
{
model.addAttribute("list",repo.list());
return "/list";
}
@RequestMapping("/content")
public String content(HttpServletRequest request,Model model)
{
int id = Integer.parseInt(request.getParameter("id"));
Board bvo = repo.content(id);
bvo.setContent(bvo.getContent().replace("\r\n","<br>"));
model.addAttribute("bvo",bvo);
return "/content";
}
}
JPA는 VO를 요롷게 사용한다고 하심
Board.class
package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Table(name="board")
@Data
public class Board {
@Autowired
private BoardRepository repo;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private int readnum;
private String title,name,content,pwd,writeday;
}
Repository.class
package com.example.demo;
import javax.persistence.EntityManager;
import org.springframework.stereotype.Repository;
@PersistenceContext
(JPA라이브러리 EntityManager)
private EntityManager manager; << 기존에 사용하던 쿼리문(CRUD)를 사용할때 필요함
public ArrayList의 상위 interface라고함 >>List<Board> list()
{
String jpql = "select b from Board<<(Board.class의 Board) b order by id desc";
TypedQuery<Board> list = manager.createQuery(jpql,Board.class);
return list.getResultList(); << list형태로 받으려면 getResultList()로 받아야함
}
public Board content(int id)
{
return manager.find(Board.class, id);
}
@Transactional << DB안에 값을 바꿔주거나 할땐 꼭 있어야하는 annotation
public Board update(int id)
{
return manager.find(Board.class, id);
}
public void update_ok(Board bvo)
{
manager.merge(bvo);
}
게시글의 조회수를 늘릴땐 어떻게 하느냐
@Repository
public interface BoardRepository2 extends JpaRepository<Board, Integer>{
@Modifying
@Query("update Board b set b.readnum=b.readnum+1 where b.id=:id")
void updateReadnum(int id);
}
interface를 하나 만들어서 쿼리문을 적어주고
@Transactional
public void updateReadnum(int id)
{
repo2.updateReadnum(id);
}
이렇게도 사용할 수 있음 그런데 이건 좀 귀찮은거 같아서 아래처럼 해봤는데
문제없이 됐음 그래서 난 아래걸 쓰겠다.
하지만
근데 위 방법은 쿼리문 자체를 내가 쓸수있기 때문에 좀 더 세밀하게 작업할때
사용할 수 있을듯
@Transactional
public void readnum(int id)
{
Board bvo = manager.find(Board.class, id);
bvo.setReadnum(bvo.getReadnum() + 1);
}
이렇게 하면 쉽게 쌉가능