view.jsp
ํ๋จ์ ๋๊ธ html ์ฝ๋ ์ถ๊ฐ
<div>
<a href="/board/modify?bno=${view.bno}">๊ฒ์๋ฌผ ์์ </a> <a
href="/board/delete?bno=${view.bno}">๊ฒ์๋ฌผ ์ญ์ </a>
</div>
<!--๋๊ธ ์์ -->
<hr />
<ul>
<li>
<div>
<p>์ฒซ๋ฒ์งธ ๋๊ธ ์์ฑ์</p>
<p>์ฒซ๋ฒ์งธ ๋๊ธ</p>
</div>
</li>
<li>
<div>
<p>๋๋ฒ์งธ ๋๊ธ ์์ฑ์</p>
<p>๋๋ฒ์งธ ๋๊ธ</p>
</div>
</li>
<li>
<div>
<p>์ธ๋ฒ์งธ ๋๊ธ ์์ฑ์</p>
<p>์ธ๋ฒ์งธ ๋๊ธ</p>
</div>
</li>
</ul>
<div>
<p>
<label>๋๊ธ ์์ฑ์</label> <input type="text">
</p>
<p>
<textarea rows="5" cols="50"></textarea>
</p>
<p>
<button type="button">๋๊ธ ์์ฑ</button>
</p>
</div>
<!-- ๋๊ธ ๋ -->

MySQL์์ ํ ์ด๋ธ ์ถ๊ฐํจ
CREATE TABLE tbl_reply (
rno int not null auto_increment,
bno int not null,
writer varchar(30) not null,
content text not null,
regDate timestamp not null default now(),
PRIMARY KEY(rno, bno),
FOREIGN KEY(bno) REFERENCES tbl_board(bno)
);
select * from tbl_reply;
๋๊ธ์ ๊ฒ์๊ธ์ ๋๊ธ์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์๊ธ ์์ด๋๋ ํฌํจ๋์ด์๋ค.
rno ๋ง๋ค ๋ ๋ง๋ค ์๋ ์์ฑ๋๊ฒ ํจ = auto_increment
bno (๊ฒ์๊ธ ๋ฒํธ) ๋ฅผ ๊ฐ์ ธ์์ผํจ
writer ( ๊ธ์ด์ด )
regDate ์์ฑ์ผ์๋ default ๊ฐ์ผ๋ก ์๋์์ฑ
primary key๋ rno, bno ๊ฐ์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.

INSERT INTO tbl_reply(bno,writer,content,regDate)
VALUE(99,'๋ ๊ธ ์ ์ฑ ์', '๋ ๊ธ ๋ด ์ฉ', SYSDATE());
SELECT * FROM tbl_reply;

UPDATE๋ฌธ๋ ํ ์คํธ
UPDATE tbl_reply
SET writer ='๋๊ธ ์์ฑ์ ์์ ',
content ='๋๊ธ ๋ด์ฉ ์์ '
WHERE rno=1 AND bno=99;
SELECT * from tbl_reply;

ReplyVO ํด๋์ค ์์ฑ

sql insert๋ฌธ ๋ณต์ฌํด์ ์ฃผ์์ฒ๋ฆฌ ํ๊ณ ๋ณ์ ์์ฑํ๋ฉด ํธ๋ฆฌํจ
getter setter๋ source๋ก ์์ฑํ๊ธฐ
VO๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด hashMap ๋ณด๋ค ์์๋ณด๊ธฐ๊ฐ ์ฌ์ \ ๋นจ๋ฆฌ ์ฌ์ฉํ๊ธฐ์๋ map์ด ํธํ๊ธด ํจ
package com.board.dao;
import java.util.Date;
public class ReplyVO {
// CREATE TABLE tbl_reply (
// rno int not null auto_increment,
// bno int not null,
// writer varchar(30) not null,
// content text not null,
// regDate timestamp not null default now(),
// PRIMARY KEY(rno, bno),
// FOREIGN KEY(bno) REFERENCES tbl_board(bno)
// );
private int rno ;
private int bno;
private String writer;
private String content;
private Date regDate;
//getter setter
public int getRno() {
return rno;
}
public void setRno(int rno) {
this.rno = rno;
}
public int getBno() {
return bno;
}
public void setBno(int bno) {
this.bno = bno;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
}
mappers์ replyMapper ์์ฑ


namespace ๋ณ๊ฒฝ ํ์ํจ
<!-- ๋๊ธ ๋ชฉ๋ก (๊ฒ์๊ธ ๋ฒํธ) -->
<select id="replyList" parameterType="int"
resultType="com.board.domain.ReplyVO">
select
rno, bno, writer, content, regDate
from tbl_reply
where bno = #{bno}
</select>
<!-- ๋๊ธ ์์ฑ -->
<insert id="replyWrite" parameterType="com.board.domain.ReplyVO">
insert into tbl_reply(bno, writer, content)
value(#{bno}, #{writer}, #{content})
</insert>
<!-- ๋๊ธ ์์ -->
<update id="replyModify"
parameterType="com.board.domain.ReplyVO">
update tbl_reply set
writer = #{writer},
content = #{content}
where rno = #{rno}
and bno = #{bno}
</update>
<!-- ๋๊ธ ์ญ์ -->
<delete id="replyDelete"
parameterType="com.board.domain.ReplyVO">
delete from tbl_reply
where rno = #{rno}
and bno = ${bno}
</delete>
๋๊ธ ์กฐํ๋ ๊ฒ์๋ฌผ ๋ฒํธ(bno)๋ง ์ด์ฉํ์ฌ ์กฐํํ๋ ๊ฒฐ๊ณผ๋ ReplyVO์ ํํ๋ก ๋ฐํ๋๋ฏ๋ก, ํ๋ผ๋ฏธํฐํ์ (parameterType)๋ ์ ์ํ(int)์ด๋ฉฐ ๋ฆฌ์ ํธํ์ (resultType)์ ReplyVO์
๋๊ธ ์์ฑ/์์ /์ญ์ ๋ ๊ฒ์๋ฌผ ๋ฒํธ(bno)์ ๋๊ธ ๋ฒํธ(rno)๊ฐ ๋ชจ๋ ํ์ํ๋ฉฐ, ์ถ๊ฐ์ ์ผ๋ก ์์ฑ์(writer), ๋๊ธ ๋ด์ฉ(content), ์์ฑ ๋ ์ง(regDate)๊ฐ ํ์ํ๋ฉฐ, ๋ฐํ๋๋ ๋ฐ์ดํฐ๋ ์์ผ๋ฏ๋ก ํ๋ผ๋ฏธํฐํ์ ์ ReplyVO, ๋ฆฌ์ ํธํ์ ์ ์์ต๋๋ค.
https://blog.naver.com/drv982/223220059223
[๋๊ธ] DAO ์ ์๋น์ค ๊ณ์ธต ์์ฑ
db์ ํ ์ด๋ธ์ ์ถ๊ฐํ์ผ๋ฏ๋ก, ํ ์ด๋ธ ํํ์ VO(Value Object)๋ฅผ ์ถ๊ฐํด์ผํฉ๋๋ค. com.board.domain ์...
blog.naver.com
ReplyDAO ๊ณผ ReplyDAOImple ์์ฑ

DAO๋ ์ธํฐํ์ด์ค

ReplyDAOImple
ReplyDAO ์์, Repository ์ถ๊ฐ
package com.board.dao;
import org.springframework.stereotype.Repository;
@Repository
public class ReplyDAOImple implements ReplyDAO{
}
ReplyDAO
package com.board.dao;
import java.util.List;
import com.board.domain.ReplyVO;
public interface ReplyDAO {
// ๋๊ธ ์กฐํ
public List<ReplyVO> list(int bno) throws Exception;
// ๋๊ธ ์์ฑ
public void write(ReplyVO vo) throws Exception;
// ๋๊ธ ์์
public void modify(ReplyVO vo) throws Exception;
// ๋๊ธ ์ญ์
public void delete(ReplyVO vo) throws Exception;
}
ReplyDAOImple
package com.board.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.board.domain.ReplyVO;
@Repository
public class ReplyDAOImple implements ReplyDAO{
@Autowired
private SqlSessionTemplate sqlTemplate;
//๋๊ธ ๋ชฉ๋ก
@Override
public List<ReplyVO> list(int bno) throws Exception {
return sqlTemplate.selectList("reply.replyList", bno);
}
//๋๊ธ ์์ฑ
@Override
public void write(ReplyVO vo) throws Exception {
sqlTemplate.insert("reply.replyWrite", vo);
}
//๋๊ธ ์์
@Override
public void modify(ReplyVO vo) throws Exception {
sqlTemplate.update("reply.replyModify", vo);
}
//๋๊ธ ์ญ์
@Override
public void delete(ReplyVO vo) throws Exception {
sqlTemplate.delete("reply.replyDelete", vo);
}
}
ReplyService ์ ReplyServiceImple ๋ ์์ฑํ๋ค

ReplyService
package com.board.service;
import java.util.List;
import com.board.domain.ReplyVO;
public interface ReplyService {
// ๋๊ธ ์กฐํ
public List<ReplyVO> list(int bno) throws Exception;
// ๋๊ธ ์์ฑ
public void write(ReplyVO vo) throws Exception;
// ๋๊ธ ์์
public void modify(ReplyVO vo) throws Exception;
// ๋๊ธ ์ญ์
public void delete(ReplyVO vo) throws Exception;
}
ReplyServiceImple
@Service ์ถ๊ฐ ํ์
autowired ํ์
package com.board.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.board.dao.ReplyDAO;
import com.board.domain.ReplyVO;
@Service
public class ReplyServiceImple implements ReplyService{
@Autowired
private ReplyDAO replyDAO;
//๋๊ธ ์กฐํ
@Override
public List<ReplyVO> list(int bno) throws Exception {
return replyDAO.list(bno);
}
//๋๊ธ ์์ฑ
@Override
public void write(ReplyVO vo) throws Exception {
replyDAO.write(vo);
}
//๋๊ธ ์์
@Override
public void modify(ReplyVO vo) throws Exception {
replyDAO.modify(vo);
}
//๋๊ธ ์ญ์
@Override
public void delete(ReplyVO vo) throws Exception {
replyDAO.delete(vo);
}
}
ReplyController

package com.board.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.board.service.ReplyService;
@Controller//์ปจํธ๋กค๋ฌ ์ ์ธ
@RequestMapping("/reply")// ์์ฒญ ์ฃผ์ /reply ์ฃผ์๋ง ๋ฃ์ผ๋ฉด ํด๋น ์ปจํธ๋กค๋ฌ๋ก ๋์ด์ด
public class ReplyController {
@Autowired
private ReplyService replyService;
//๋๊ธ ์กฐํ
//๋๊ธ ์์ฑ
//๋๊ธ ์์
//๋๊ธ ์ญ์
}
์ฌ์ค ReplyController ๋ ํ์์์.
๊ธฐ๊ป ReplyController๋ฅผ ๋ง๋ค์ด๋๊ณ , ์ BoardController์ ์์ ํ๋๋ฉด
์์ง๊น์ง๋ ReplyController์์ ๋ค๋ฃฐ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ง๊ธ์ ๋จ์ํ๊ฒ,
๋ฐ๋ก ๋๊ธ๋ง ์ฌ์ฉํ๋ ํ์ด์ง๋ฅผ ๋ง๋ค๊ฒ ์๋๊ณ
๊ฒ์๋ฌผ์ ์ฝ์ด์ค๋ฉด์ ๋๊ธ๋ ๊ฐ์ด ์ฝ์ด์ค๋ ๋ฐฉ์์ผ๋ก ์งํํฉ๋๋ค.
BoardController -> getView(๊ฒ์๊ธ ์์ธ ์กฐํ) ์ ๋๊ธ ์กฐํ ์ถ๊ฐ
// ๊ฒ์๋ฌผ ์์ธ ์กฐํ , ์กฐํ์ ์ฆ๊ฐ ๊ธฐ๋ฅ ์ถ๊ฐ
@GetMapping("/view")
public void getView(@RequestParam("bno") int bno, Model model) throws Exception{
BoardVO vo = boardService.view(bno);
model.addAttribute("view", vo);
//๋๊ธ ์กฐํ
List<ReplyVO> replyList = replyService.list(bno);
model.addAttribute("reply", replyList);
}
view.jsp - ๋๊ธ ์์ ์์
<!--๋๊ธ ์์ -->
<hr />
<ul>
<!-- <li>
<div>
<p>์ฒซ๋ฒ์งธ ๋๊ธ ์์ฑ์</p>
<p>์ฒซ๋ฒ์งธ ๋๊ธ</p>
</div>
</li> -->
<c:forEach items="${reply}" var="reply">
<li>
<div>
<p>${reply.writer}/ ${reply.regDate }</p>
<p>${reply.content}</p>
</div>
</li>
</c:forEach>
</ul>
<div>
<p>
<label>๋๊ธ ์์ฑ์</label> <input type="text">
</p>
<p>
<textarea rows="5" cols="50"></textarea>
</p>
<p>
<button type="button">๋๊ธ ์์ฑ</button>
</p>
</div>
<!-- ๋๊ธ ๋ -->

'BACKEND > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฒ์ํ ๋ง๋ค๊ธฐ - ๋๊ธ ์์ ํ๊ธฐ (0) | 2023.10.25 |
|---|---|
| ๊ฒ์ํ ๋ง๋ค๊ธฐ - ๋๊ธ ์์ฑ(write) (0) | 2023.10.25 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ - ๊ฒ์ ๊ธฐ๋ฅ (1) | 2023.10.24 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ - ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ2 (0) | 2023.10.24 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ - ํ์ด์ง ๊ธฐ๋ฅ ๊ตฌํ (2) | 2023.10.24 |