리우's IT Story
article thumbnail
728x90
반응형

2023.04.14 - [spring 리마인드] - DB 시작하기

 

DB 시작하기

테스트 - 상태 : 성공 db에 있는 정보를 이클립스에 띄우기 day 07 만들기 초기작업 -> 일단. 커넥션 객체 를 정해진 주소로 여러개 만들어 놓는다. 이 커넥션들을 돌려가며 풀을 만들어서 쓴다. jsp

ji7290.tistory.com

 

이제 데이터는 OracleSQL DataBase에 담겨져있다.

 

 

DTO에서 데이터를 꺼내와서 웹으로 출력해보자. 

 

한줄 한줄을 어떤식으로 맵핑할꺼냐.

 

 

 

BookDAO

이 코드는 ResultSet에서 반환된 결과를 BookDTO 객체로 매핑하는 역할을 하는 RowMapper 객체를 정의한다.

RowMapper는 ResultSet에서 추출된 각각의 레코드(row)에 대해서 어떻게 매핑할지를 정의하는 인터페이스

mapper 변수는 RowMapper 인터페이스를 구현하는 람다 표현식으로 정의되어있다.

mapper 변수는 ResultSet에서 각각의 컬럼(column) 값을 가져와 BookDTO 객체에 저장하고

이 때, ResultSet의 getInt, getString, getDate 메서드를 사용하여 각각의 속성값을 추출한다.

마지막으로, 추출한 속성값들을 이용하여 BookDTO 객체를 생성하고, 생성된 객체를 반환한다. 이러한 과정을 모든 레코드에 대해 반복하면 BookDTO 객체들의 리스트가 생성된다.  이렇게 생성된 리스트는 JdbcTemplate의 query 메서드 등을 사용하여 데이터베이스에서 가져온 결과를 BookDTO 객체들의 리스트로 변환하는데 쓰인다.

 

 

list.jsp로 돌아가보면

 

dto.idx에 책번호가 보이게된다. 

그러므로 이제  varStatus가 필요없다.

 

 

 

modify에서도 dto.idx를 쓸 수 있다.

 

method="POST" : 폼 데이터를 전송할 HTTP 메소드를 POST로 지정
<input type="hidden" name="idx" value="${idx }"> :  => 수정할 책의 인덱스 번호를 전달하기 위해 hidden 타입의 input 요소를 생성하고 , 이 요소는 사용자가 볼 수 없다. 

 

<p><input type="text" name="name" value="${dto.name }" placeholder="이름" required autofocus></p>
책의 이름을 입력하는 텍스트 입력 요소를 생성

name 속성은 이 요소가 서버로 전송될 때 사용될 이름을 지정

value 속성은 입력 필드에 기본으로 설정될 값

placeholder 속성은 입력 필드에 입력할 값에 대한 설명을 제공

required 속성은 이 필드가 반드시 입력되어야 함을 나타낸다

autofocus 속성은 페이지가 로드될 때 이 필드에 자동으로 포커스가 맞춰지도록 한다.


<input type="text" name="publisher" value="${dto.publisher }" placeholder="출판사" required> 

=> 출판사를 입력하는 텍스트 입력 요소를 생성

 

<input type="date" name="publishDate" value="${dto.publishDate }" required>

 =>  출간일을 입력하는 날짜 입력 요소를 생성
<input type="number" name="price" value="${dto.price }" placeholder="가격" min="0" step="100" required> : 

책의 가격을 입력하는 숫자 입력 요소를 생성

type 속성을 number로 설정.

min 속성은 입력할 수 있는 최소값을 지정한다

step 속성은 입력 가능한 값의 간격을 지정한다.  
<input type="submit"> : 입력된 값을 서버로 전송하기 위한 버튼을 생성

이 버튼을 클릭하면, 폼 데이터가 서버로 전송된다. 

 

 

 

검색기능 구현

BookController

 

 

Bookservice

searchType과 Value를 반환하는 selectList 함수

BookDAO

 

mapper하나를 만들어놔서 매번 불러와서 사용가능하다.

select * from book where name like '%search%';

 

추가기능구현

 

BookController

@PostMapping을 이용하여 "/add" 요청에 대한 POST 메서드를처리한다.

메서드 인자로는 BookDTO 타입의 dto 객체가 전달되는데, 이는 사용자가 입력한 새 책 정보를 담고 있는 DTO 객체

 

bookService.add(dto)는 dto 객체를 이용하여 데이터베이스에 새로운 책 정보를 추가하는 메서드를 호출,

이때  int 타입으로 성공적으로 추가된 레코드의 수를 반환한다. 이값을 row변수에 저장한다.

println문은 row 가 0이 아니면 추가성공을 0이면 추가실패를 출력한다

마지막으로 return redirect/list는 책 목록 페이지로 리다이렉트하며 새로 추가된 책정보가 목록에 표시된다. 

 

 

 

 

BookService

이 코드는 BookDTO 객체를 전달받아 데이터베이스에 새로운 책 정보를 추가하는 메서드

dao는 BookDAO클래스의 인스턴스로, 데이터베이스와의 상호작용을 담당하는 객체이다. 

insert 메서드는 BookDTO객체를 인자로 데이터베이스에 해당정보를 추가하고, 추가된 레코드의 수를 int타입으로 반환

 

add 메서드는 dto객체를 인자로 받아 dao.insert(dto) 메서드를 호출하여 db에 정보를 추가한 후 , 추가된 레코드의 수를 

반환한다. 

 

 

 

 

BookDAO

 

이 코드는 BookDTO 객체를 전달받아 데이터베이스에 해당 정보를 추가하는 메서드

sql 변수는 book 테이블에 새로운 레코드를 추가하기 위한 SQL 쿼리문을 저장하고  values 절에는 ?이 포함되어 있으며, 이는 나중에 args 배열에서 전달받은 값으로 대체될 것이다.

args 배열은 dto 객체에서 각각의 속성 값을 가져와 배열로 저장한 것입니다. args 배열은 Object 타입으로 선언되어 있어 어떤 자료형의 값을 저장해도 상관없다..

jt는 JdbcTemplate 클래스의 인스턴스로, 데이터베이스와의 상호작용을 담당하는 객체

update 메서드는 SQL 쿼리문과 args 배열을 인자로 받아 데이터베이스에 해당 쿼리문을 실행하고, 실행된 쿼리문에 영향을 받은 레코드의 수를 int 타입으로 반환. 여기서는 데이터를 추가하는 INSERT 문을 실행하므로, 추가된 레코드의 수가 반환된다.

마지막으로 row 변수에는 추가된 레코드의 수가 저장되어 반환된다. 

반환된 값은 add 메서드에서 사용되어 추가된 책 정보가 잘 추가되었는지를 확인하는 용도로 사용된다.

 

추가영역에 책이름을 아무렇게나 넣고 추가해보자.

 

추가,검색,목록 기능이 구현됐다. 

 

 

728x90
반응형
profile

리우's IT Story

@LRWoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!