- 준비물
전날에 만들었던 Book프로젝트를 사용하여 추가적인 수업을 진행했습니다
인천 일보 아카데미 45일차 -2- DB와 연동해보기 / DB에 값 담기 / DB에 담은 값 list 출력 / DB에 담긴
IntelliJ를 MySQL DB와 연결해보기 먼저 전에 받은 설정파일에서 root-context-DB연결 파일을 vscord로 열어 인텔리제이에 있는 root-context에 복사 붙여넣기 해줍니다 이후 각각의 붉은 선부분에 MySQL에서 만
guping.tistory.com
- 저장된 정보 수정하기
list.jsp에 버튼을 3개 만들고 각각 수정 , 삭제 , 조회로 설정했습니다


각버튼을 클릭하면 onclick 이벤트가 실행되고 함수를 호출합니다
id의 정보는 MySQL에서 자동으로 넣어주고 primary key로 설정했기 때문에
고유한 값으로 특정 정보를 찾아 가져오는 키값으로 사용합니다
그렇기 때문에 해당 List의 id값을 호출되는 함수의 매개변수로 받아 사용하였습니다
함수에서는 받은 매개변수와 location.href를 조합하여 파라미터 형식으로 Controller에 전송합니다
Controller
@Controller
public class BookController {
@Autowired // BookService 의존성 주입 (필드 주입)
private BookService bookService;
@GetMapping("/update")
public String updateForm(@RequestParam("id") Long id , Model model){
매개변수로 받아온 id값을 @RequstParam으로 받아줍니다
BookDTO bookDTO = bookService.select(id);
id값을 키로 사용해 객체 정보를 가져와야하기 때문에
Service의 select메소드의 매개변수로 넘겨줍니다
최종적으로는 bookDTO를 리턴받습니다
model.addAttribute("bookUpdate",bookDTO);
리턴받은 객체를 model 인터페이스에 담아
리턴할때 함께 넘겨줍니다
return "update";
update.jsp를 화면에 출력합니다
}
}
Service
@Service
public class BookService {
@Autowired // 의존성주입 (필드주입)
private BookRepository bookRepository;
public BookDTO select(Long id) {
매개변수로 받은 id는 Long타입입니다
BookDTO bookDTO = bookRepository.select(id);
id값을 키로 사용하여 DB로 접근해 정보를 가져와야하기 때문에
Repository의 select 메소드에 매개변수로 넘겨줍니다
if(bookDTO == null){
return null;
}else{
return bookDTO;
}
만약 서버에 문제가생겨
빈 DTO를 리턴 할 수 있기 때문에
만약을 대비한 return 조건문입니다
}
}
Repository
@Repository
public class BookRepository {
@Autowired // 의존성주입 (필드주입)
private SqlSessionTemplate sql;
public BookDTO select(Long id) {
return sql.selectOne("Book.select",id);
Repository에서는 sql의 DB로 id값을 넘겨주며
사용할 Mapper와 쿼리id를 지정해줍니다
그리고 DB에서 리턴해주는 값을 리턴해줍니다
}
}
Mapper
<mapper namespace="Book">
이름이 Book인 맵퍼에 접근
<select id="select" parameterType="Long" resultType="book">
id가 select인 쿼리문에 접근하여 매개로 받은 id의 타입과
리턴해야하는 값의 타입을 넣어줍니다
select * from book_list where id=#{id}
MySQL 쿼리문을 작성하여 값을 리턴해줍니다
여기서는 매개로 받은 id값과 같은 id값을 가진 table의 모든 정보를
DTO객체에 담아 리턴해줍니다
</select>
</mapper>
update.jsp만들고 사용


위에서 받아온 객체와 함께 update.jsp로 넘어옵니다
굳이 객체로 받아온 이유는 일단 input의 text바에 전에 있던 값을 넣어주고
수정할 부분만 수정할 수 있는 편의성을 제공하기 위해서 입니다
(오른쪽의 사진은 입력하지 않아도 자동으로 값이 들어가 있다는 내용의 사진입니다)
input 태그의 value로 넣어주면 실행했을 때 객체의 해당 필드 값이 들어가게 됩니다
Controller - redirect 요청 방식 사용했음
@Controller
public class BookController {
@Autowired // BookService 의존성 주입 (필드 주입)
private BookService bookService;
@PostMapping("/update")
public String update (@ModelAttribute BookDTO bookDTO){
update.jsp에서 받은 파라미터 값을
@ModelAttribute를 사용하여 객체에 바로 담아줍니다
bookService.update(bookDTO);
DB에 넘겨 저장해주기 위해 Service의 update 메소드의 매개변수로
객체를 넘겨줍니다
return "redirect:/detail?id="+bookDTO.getId();
// 수정이 완료되면 상세페이지를 다시 출력
// redirect 요청 : 다른 컨트롤러의 주소를 요청(jsp페이지 이름을 리턴하는 것이 아님)
// jsp를 요청하는것이 아닌 detail 메소드를 요청함
저는 redirect가 파라미터 형식으로 리턴을 받거나
해당 주소에서 DB수정이루어 지는 경우 새로 리턴받는다고 이해 했습니다
}
}
Service
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public void update(BookDTO bookDTO) {
bookRepository.update(bookDTO);
수정한 값을 DB에 저장만하면 되기 때문에
굳이 리턴을 받지 않고 DTO만 매개변수로
Repository의 update메소드에 넘겨줍니다
}
}
Repository
@Repository
public class BookRepository {
@Autowired
private SqlSessionTemplate sql;
public void update(BookDTO bookDTO) {
sql.update("Book.update",bookDTO);
마찬가지로 받아온 객체를
DB에 넘겨줍니다
}
}
Mapper
<mapper namespace="Book">
<update id="update" parameterType="book">
매개변수로 사용된 값의 타입을 넣어줍니다
update book_list set bookName=#{bookName},bookPublisher=#{bookPublisher},
bookPrice=#{bookPrice},bookAuthor=#{bookAuthor}
where id = #{id}
MySQL의 실행문을 작성해줍니다
객체로 받은 값을 한번에 넣는 방법을 아직 모르기 때문에
table의 컬럼에 하나하나 넣어줍니다 where을 사용하여
id의 값이 같은 table에 넣어줍니다
</update>
</mapper>
- DB에 저장된 정보 삭제하기
Controller - redirect 요청 방식 사용했음
@Controller
public class BookController {
@Autowired // BookService 의존성 주입 (필드 주입)
private BookService bookService;
@GetMapping("/detailDelete")
public String detailDelete(@RequestParam("id") Long id){
파라미터로 받은 값을 @RequestParam을 사용하여 받아줍니다
bookService.delete(id);
삭제는 말그대로 지우기만 하면 되기 때문에
굳이 리턴 받지 않고 ID값만 DB까지 넘겨줍니다
return "redirect:/list";
저는 redirect가 파라미터 형식으로 리턴을 받거나
해당 주소에서 DB수정이루어 지는 경우 다시 한번 리턴받는다고 이해 했습니다
}
}
Service
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public void delete(Long id) {
bookRepository.delete(id);
전달받은 id값을 Repository의 delete메소드의
매개변수로 넘겨줍니다
}
}
Repository
@Repository
public class BookRepository {
@Autowired
private SqlSessionTemplate sql;
public void delete(Long id) {
sql.delete("Book.delete",id);
매개변수로 받은 id값을 DB에 넘겨줍니다
}
}
Mapper
<mapper namespace="Book">
<delete id="delete" parameterType="Long">
매개변수로 받은 값의 타입을 알려줍니다
delete from book_list where id=#{id}
SQL실행문을 작성해줍니다
매개로 가져온 값은 #{매개} 양식으로 넣어줍니다
</delete>
</mapper>
'나의 수업일지' 카테고리의 다른 글
- 준비물
전날에 만들었던 Book프로젝트를 사용하여 추가적인 수업을 진행했습니다
인천 일보 아카데미 45일차 -2- DB와 연동해보기 / DB에 값 담기 / DB에 담은 값 list 출력 / DB에 담긴
IntelliJ를 MySQL DB와 연결해보기 먼저 전에 받은 설정파일에서 root-context-DB연결 파일을 vscord로 열어 인텔리제이에 있는 root-context에 복사 붙여넣기 해줍니다 이후 각각의 붉은 선부분에 MySQL에서 만
guping.tistory.com
- 저장된 정보 수정하기
list.jsp에 버튼을 3개 만들고 각각 수정 , 삭제 , 조회로 설정했습니다


각버튼을 클릭하면 onclick 이벤트가 실행되고 함수를 호출합니다
id의 정보는 MySQL에서 자동으로 넣어주고 primary key로 설정했기 때문에
고유한 값으로 특정 정보를 찾아 가져오는 키값으로 사용합니다
그렇기 때문에 해당 List의 id값을 호출되는 함수의 매개변수로 받아 사용하였습니다
함수에서는 받은 매개변수와 location.href를 조합하여 파라미터 형식으로 Controller에 전송합니다
Controller
@Controller
public class BookController {
@Autowired // BookService 의존성 주입 (필드 주입)
private BookService bookService;
@GetMapping("/update")
public String updateForm(@RequestParam("id") Long id , Model model){
매개변수로 받아온 id값을 @RequstParam으로 받아줍니다
BookDTO bookDTO = bookService.select(id);
id값을 키로 사용해 객체 정보를 가져와야하기 때문에
Service의 select메소드의 매개변수로 넘겨줍니다
최종적으로는 bookDTO를 리턴받습니다
model.addAttribute("bookUpdate",bookDTO);
리턴받은 객체를 model 인터페이스에 담아
리턴할때 함께 넘겨줍니다
return "update";
update.jsp를 화면에 출력합니다
}
}
Service
@Service
public class BookService {
@Autowired // 의존성주입 (필드주입)
private BookRepository bookRepository;
public BookDTO select(Long id) {
매개변수로 받은 id는 Long타입입니다
BookDTO bookDTO = bookRepository.select(id);
id값을 키로 사용하여 DB로 접근해 정보를 가져와야하기 때문에
Repository의 select 메소드에 매개변수로 넘겨줍니다
if(bookDTO == null){
return null;
}else{
return bookDTO;
}
만약 서버에 문제가생겨
빈 DTO를 리턴 할 수 있기 때문에
만약을 대비한 return 조건문입니다
}
}
Repository
@Repository
public class BookRepository {
@Autowired // 의존성주입 (필드주입)
private SqlSessionTemplate sql;
public BookDTO select(Long id) {
return sql.selectOne("Book.select",id);
Repository에서는 sql의 DB로 id값을 넘겨주며
사용할 Mapper와 쿼리id를 지정해줍니다
그리고 DB에서 리턴해주는 값을 리턴해줍니다
}
}
Mapper
<mapper namespace="Book">
이름이 Book인 맵퍼에 접근
<select id="select" parameterType="Long" resultType="book">
id가 select인 쿼리문에 접근하여 매개로 받은 id의 타입과
리턴해야하는 값의 타입을 넣어줍니다
select * from book_list where id=#{id}
MySQL 쿼리문을 작성하여 값을 리턴해줍니다
여기서는 매개로 받은 id값과 같은 id값을 가진 table의 모든 정보를
DTO객체에 담아 리턴해줍니다
</select>
</mapper>
update.jsp만들고 사용


위에서 받아온 객체와 함께 update.jsp로 넘어옵니다
굳이 객체로 받아온 이유는 일단 input의 text바에 전에 있던 값을 넣어주고
수정할 부분만 수정할 수 있는 편의성을 제공하기 위해서 입니다
(오른쪽의 사진은 입력하지 않아도 자동으로 값이 들어가 있다는 내용의 사진입니다)
input 태그의 value로 넣어주면 실행했을 때 객체의 해당 필드 값이 들어가게 됩니다
Controller - redirect 요청 방식 사용했음
@Controller
public class BookController {
@Autowired // BookService 의존성 주입 (필드 주입)
private BookService bookService;
@PostMapping("/update")
public String update (@ModelAttribute BookDTO bookDTO){
update.jsp에서 받은 파라미터 값을
@ModelAttribute를 사용하여 객체에 바로 담아줍니다
bookService.update(bookDTO);
DB에 넘겨 저장해주기 위해 Service의 update 메소드의 매개변수로
객체를 넘겨줍니다
return "redirect:/detail?id="+bookDTO.getId();
// 수정이 완료되면 상세페이지를 다시 출력
// redirect 요청 : 다른 컨트롤러의 주소를 요청(jsp페이지 이름을 리턴하는 것이 아님)
// jsp를 요청하는것이 아닌 detail 메소드를 요청함
저는 redirect가 파라미터 형식으로 리턴을 받거나
해당 주소에서 DB수정이루어 지는 경우 새로 리턴받는다고 이해 했습니다
}
}
Service
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public void update(BookDTO bookDTO) {
bookRepository.update(bookDTO);
수정한 값을 DB에 저장만하면 되기 때문에
굳이 리턴을 받지 않고 DTO만 매개변수로
Repository의 update메소드에 넘겨줍니다
}
}
Repository
@Repository
public class BookRepository {
@Autowired
private SqlSessionTemplate sql;
public void update(BookDTO bookDTO) {
sql.update("Book.update",bookDTO);
마찬가지로 받아온 객체를
DB에 넘겨줍니다
}
}
Mapper
<mapper namespace="Book">
<update id="update" parameterType="book">
매개변수로 사용된 값의 타입을 넣어줍니다
update book_list set bookName=#{bookName},bookPublisher=#{bookPublisher},
bookPrice=#{bookPrice},bookAuthor=#{bookAuthor}
where id = #{id}
MySQL의 실행문을 작성해줍니다
객체로 받은 값을 한번에 넣는 방법을 아직 모르기 때문에
table의 컬럼에 하나하나 넣어줍니다 where을 사용하여
id의 값이 같은 table에 넣어줍니다
</update>
</mapper>
- DB에 저장된 정보 삭제하기
Controller - redirect 요청 방식 사용했음
@Controller
public class BookController {
@Autowired // BookService 의존성 주입 (필드 주입)
private BookService bookService;
@GetMapping("/detailDelete")
public String detailDelete(@RequestParam("id") Long id){
파라미터로 받은 값을 @RequestParam을 사용하여 받아줍니다
bookService.delete(id);
삭제는 말그대로 지우기만 하면 되기 때문에
굳이 리턴 받지 않고 ID값만 DB까지 넘겨줍니다
return "redirect:/list";
저는 redirect가 파라미터 형식으로 리턴을 받거나
해당 주소에서 DB수정이루어 지는 경우 다시 한번 리턴받는다고 이해 했습니다
}
}
Service
@Service
public class BookService {
@Autowired
private BookRepository bookRepository;
public void delete(Long id) {
bookRepository.delete(id);
전달받은 id값을 Repository의 delete메소드의
매개변수로 넘겨줍니다
}
}
Repository
@Repository
public class BookRepository {
@Autowired
private SqlSessionTemplate sql;
public void delete(Long id) {
sql.delete("Book.delete",id);
매개변수로 받은 id값을 DB에 넘겨줍니다
}
}
Mapper
<mapper namespace="Book">
<delete id="delete" parameterType="Long">
매개변수로 받은 값의 타입을 알려줍니다
delete from book_list where id=#{id}
SQL실행문을 작성해줍니다
매개로 가져온 값은 #{매개} 양식으로 넣어줍니다
</delete>
</mapper>