나의 수업일지

인천 일보 아카데미 46일차 -1- spring_framework / 수정 , 삭제 추가해보기

2023. 4. 26. 22:01
  • 준비물

전날에 만들었던 Book프로젝트를 사용하여 추가적인 수업을 진행했습니다

 

인천 일보 아카데미 45일차 -2- DB와 연동해보기 / DB에 값 담기 / DB에 담은 값 list 출력 / DB에 담긴

IntelliJ를 MySQL DB와 연결해보기 먼저 전에 받은 설정파일에서 root-context-DB연결 파일을 vscord로 열어 인텔리제이에 있는 root-context에 복사 붙여넣기 해줍니다 이후 각각의 붉은 선부분에 MySQL에서 만

guping.tistory.com

 

 

  • 저장된 정보 수정하기

list.jsp에 버튼을 3개 만들고  각각 수정 , 삭제 , 조회로 설정했습니다

list.jsp
list.jsp 화면 출력 결과

각버튼을 클릭하면 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

위에서 받아온 객체와 함께 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>

'나의 수업일지' 카테고리의 다른 글

인천 일보 아카데미 47일차 -1- IntelliJ에서 MySQL 사용하기 / IntelliJ - HTML 편의 설정법  (0) 2023.04.30
인천 일보 아카데미 46일차 -2- 배운 내용으로 만들어보기 (쇼핑몰 회원관리) / redirect 약간 이해함  (0) 2023.04.27
인천 일보 아카데미 45일차 -2- DB와 연동해보기 / DB에 값 담기 / DB에 담은 값 list 출력 / DB에 담긴 특정 값만 출력  (0) 2023.04.26
인천 일보 아카데미 45일차 -1- 실습 / MySQL - DB / table 만들기  (0) 2023.04.25
인천 일보 아카데미 44일차 -2- ModelAttribute / 체크박스로 받은 값 담기 / @Service 알아보기 / 의존성 주입 - Autowired  (0) 2023.04.25
'나의 수업일지' 카테고리의 다른 글
  • 인천 일보 아카데미 47일차 -1- IntelliJ에서 MySQL 사용하기 / IntelliJ - HTML 편의 설정법
  • 인천 일보 아카데미 46일차 -2- 배운 내용으로 만들어보기 (쇼핑몰 회원관리) / redirect 약간 이해함
  • 인천 일보 아카데미 45일차 -2- DB와 연동해보기 / DB에 값 담기 / DB에 담은 값 list 출력 / DB에 담긴 특정 값만 출력
  • 인천 일보 아카데미 45일차 -1- 실습 / MySQL - DB / table 만들기
GUPING
GUPING
안녕하세요 개발자를 꿈꾸는 GUPING 입니다
GUPING
개발자를 꿈꾸는 GUPING
GUPING
전체
오늘
어제
  • 분류 전체보기 (89)
    • 나의 수업일지 (88)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삭제
  • realative
  • pagingAjax
  • 업로드파일이름출력
  • 개힘드렁
  • 틀만들기
  • 여러사진프리뷰
  • 클래스 이름 변경
  • 파일이름가져오기
  • Ajax
  • 페이징Controller
  • 버튼2가지이벤트
  • 파일이름(다중)
  • naver
  • 버튼 이벤트 함수 변경
  • 검색결과페이징
  • 수정
  • PAGE
  • 다중프리뷰
  • Paging
  • 파일 이름 가져오기
  • 답변 채택
  • 검색
  • 로그인 경고문
  • 로그인게시판
  • 버튼 이벤트 변경
  • 로그인form
  • 네이버
  • 페이징
  • 지식인

최근 댓글

최근 글

hELLO · Designed By 정상우.
GUPING
인천 일보 아카데미 46일차 -1- spring_framework / 수정 , 삭제 추가해보기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.