sql에서 Table 생성 하기
CREATE TABLE books (
code VARCHAR2(20) PRIMARY KEY, -- 도서 코드
name VARCHAR2(100), -- 도서명
price NUMBER, -- 도서가격
maker VARCHAR2(50) -- 출판사
);
필드값 생성
private String code;
private String name;
private int price;
private String maker;
기본생성자 호출 ( super() 부모클래스 생성자를 호출하는 코드입니다 Object 클래스의 기본 생성자 호출)
public BooksDTO() {
super();}
public BooksDTO(String code, String name, int price, String maker) {
super();
this.code = code;
this.name = name;
this.price = price;
this.maker = maker;
}
BooksDTO 클래스의 생성자와 getter/setter 메서드를 정의
public String getCode() {
return code;
}
필드의 값을 반환하는 메서드입니다.
public void setCode(String code) {
this.code = code;
}
필드의 값을 설정하는 메서드입니다.
@Override
public String toString() {
return "[ 도서번호 : " + code + " - 도서명 : " + name + " - 가격 : " + price + " - 출판사 : " + maker + " ]";
}
toString() 메서드를 오버라이드
JDBC 관련 변수 설정
private Connection con;
private PreparedStatement pstmt;
private ResultSet rs;
Connection: 데이터베이스 연결을 담당.
PreparedStatement: SQL 문을 실행할 때 사용하는 객체로, 파라미터를 동적으로 설정할 수 있음.
ResultSet: SQL 쿼리의 결과 데이터를 담고 있으며, 데이터베이스에서 조회된 결과를 처리하는 데 사용.
public static Connection getConnection() {
Connection con = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, id, pwd);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
getConnection() 메서드는 정적(static) 메서드로, 어디서든 클래스 이름을 통해 호출될 수 있습니다. 이 메서드는 데이터베이스와의 연결을 나타내는 Connection 객체를 반환합니다.
Class.forName(driver)는 JDBC 드라이버 클래스를 로드하는 코드입니다. driver 변수에는 JDBC 드라이버 클래스의 이름(예: "oracle.jdbc.driver.OracleDriver")이 들어 있어야 합니다. 이 코드는 특정 데이터베이스 유형(예: Oracle, MySQL 등)을 사용하기 위한 드라이버를 로드하는 역할을 합니다.
DriverManager.getConnection(url, id, pwd)는 데이터베이스에 연결을 시도하는 부분입니다.
새로운 도서 정보를 데이터베이스에 등록하는 기능을 정의합니다. BooksDTO 객체를 인자로 받아서 해당 도서 정보를 저장합니다.
Spring 프레임워크에서 서비스 계층을 나타냅니다.
bookService 다른 클래스 서비스 이용가능
@Service로 어노테이션된 클래스는 스프링의 컴포넌트 스캔에 의해 자동으로 스프링 빈으로 등록됩니다
Spring에서 의존성 주입(Dependency Injection)을 통해 BooksDAO 객체를 자동으로 주입합니다.
스프링에서 관리하는 빈(Bean)을 자동으로 주입해주는 역할을 하며, 개발자가 직접 객체를 생성하지 않고도 스프링 컨테이너가 빈을 관리하고 주입해줍니다.
GenericXmlApplicationContext context =
new GenericXmlApplicationContext("applicationContext.xml");
GenericXmlApplicationContext 클래스
ApplicationContext 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 XML 파일로부터 Bean 설정을 읽어들이고, 그 설정에 따라 애플리케이션에서 사용할 빈(Bean) 객체를 관리하는 역할을 합니다
이 코드는 applicationContext.xml 파일에서 설정된 Bean들을 읽어와서 context 객체를 통해 Spring Bean에 접근할 수 있도록 합니다.
<context:component-scan base-package="com.book.service"/>
<bean id="booksDAO" class="com.book.dao.BooksDAO"/>
Spring에서 빈(Bean)은 Spring IoC (Inversion of Control) 컨테이너에 의해 관리되는 객체를 의미합니다.
<context:component-scan base-package="com.book.service"/>
이 설정은 Spring이 지정된 패키지(com.book.service) 내에서 자동으로 빈을 검색하고 등록하도록 지시합니다.
의존성 관리: 빈은 다른 빈과의 관계를 설정하고, 필요에 따라 의존성을 주입받습니다. 예를 들어, BooksDAO 빈은 데이터베이스 접근을 위한 DAO(Data Access Object)로서 다른 서비스나 컨트롤러에 주입될 수 있습니다.
생명 주기 관리: Spring 컨테이너는 빈의 생명 주기를 관리합니다. 빈의 생성, 초기화, 소멸과 같은 과정이 자동으로 처리됩니다.
구성의 분리: 애플리케이션의 비즈니스 로직과 객체 생성, 의존성 주입을 분리하여 코드의 유연성과 유지 보수성을 높입니다.
BookService bookService = context.getBean("bookService", BookService.class);
BooksDTO dto = new BooksDTO();
context.getBean(...) 메서드는 Spring IoC 컨테이너에서 정의된 빈을 가져오는 데 사용됩니다.
BookService.class는 반환할 객체의 타입입니다. 이렇게 함으로써 Spring은 적절한 타입으로 변환된 빈을 반환합니다.
이 코드는 bookService라는 이름의 빈을 가져와 BookService 인터페이스 타입의 bookService 변수에 할당합니다. 이렇게 함으로써, 서비스 계층에서 정의된 메서드를 호출하여 비즈니스 로직을 수행할 수 있습니다
// //- 도 서 등 록 -//
// System.out.println("--- 도서 정보 등록 ---");
// System.out.print("도서번호 >> ");
// dto.setCode(scanner.next()); scanner.nextLine();
// System.out.print("도서명 >> ");
// dto.setName(scanner.nextLine());
// System.out.print("도서가격 >> ");
// dto.setPrice(scanner.nextInt());
// System.out.print("출판사 >> ");
// dto.setMaker(scanner.next());
//
// su = bookService.insertBooks(dto);
// if(su > 0)
// System.out.println("도서 등록 성공...");
// else
// System.out.println("도서 등록 실패~");
//-------------------------------------------------------
//- 도 서 목 록 -//
System.out.println("--- 도서 목록 ---");
list = bookService.getBookList(null);
for(BooksDTO book : list) {
System.out.println(book);
}
System.out.println();
//-------------------------------------------------------
// //- 도서 정보 수정 -//
// System.out.println("--- 도서 정보 수정 ---");
// System.out.print("도서번호 >> ");
// dto.setCode(scanner.next()); scanner.nextLine();
// System.out.print("도서명 >> ");
// dto.setName(scanner.nextLine());
// System.out.print("도서가격 >> ");
// dto.setPrice(scanner.nextInt());
// System.out.print("출판사 >> ");
// dto.setMaker(scanner.next());
//
// su = bookService.updateBooks(dto);
// if(su > 0)
// System.out.println("도서 수정 성공...");
// else
// System.out.println("도서 수정 실패~");
//
// System.out.println("--- 도서 목록 ---");
// list = bookService.getBookList(null);
// for(BooksDTO book : list) {
// System.out.println(book);
// }
// System.out.println();
//-------------------------------------------------------
// //- 도서 삭제 -//
// System.out.println("--- 도서 삭제 ---");
// System.out.print("도서번호 >> ");
// dto.setCode(scanner.next());
//
// su = bookService.deleteBooks(dto);
// if(su > 0)
// System.out.println("도서 삭제 성공...");
// else
// System.out.println("도서 삭제 실패~");
//
// System.out.println("--- 도서 목록 ---");
// list = bookService.getBookList(null);
// for(BooksDTO book : list) {
// System.out.println(book);
// }
// System.out.println();
//-------------------------------------------------------
//- 도서 확인 -//
System.out.println("--- 도서 정보 확인 ---");
System.out.print("도서번호 >> ");
dto.setCode(scanner.next());
dto = bookService.getBooks(dto);
if(dto != null)
System.out.println(dto);
else
System.out.println("없는 도서입니다~");
}