Spring Framework(jdbc)

으누·2024년 10월 23일

sql에서 Table 생성 하기

CREATE TABLE books (
code VARCHAR2(20) PRIMARY KEY,  -- 도서 코드
name VARCHAR2(100),             -- 도서명
price NUMBER,                   -- 도서가격
maker VARCHAR2(50)              -- 출판사
);

DTO Class 생성 (도서의 정보를 저장하는 데이터 전달 객체)

필드값 생성

	private String code;
	private String name;
	private int price;
	private String maker;

기본생성자 호출 ( super() 부모클래스 생성자를 호출하는 코드입니다 Object 클래스의 기본 생성자 호출)

  • Object 클래스는 자바에서 모든 클래스의 최상위 부모 클래스입니다
public BooksDTO() {
    super();}
  • 생성자 (BooksDTO(String code, String name, int price, String maker))
    객체가 생성 되면서 필드 위 값들을 초기화 한다
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() 메서드를 오버라이드

  • toString()을 오버라이드해서 객체의 상태를 더 가독성 있게 표현할 수 있습니다.

DAO 생성

JDBC 관련 변수 설정

  • 데이터베이스 연결, SQL 문 실행, 쿼리 결과 처리
  • PreparedStatement는 SQL 문을 미리 준비하고, 실행할 수 있게 도와주는 객체입니다.
	private Connection con;
	private PreparedStatement pstmt;
	private ResultSet rs;

Connection: 데이터베이스 연결을 담당.
PreparedStatement: SQL 문을 실행할 때 사용하는 객체로, 파라미터를 동적으로 설정할 수 있음.
ResultSet: SQL 쿼리의 결과 데이터를 담고 있으며, 데이터베이스에서 조회된 결과를 처리하는 데 사용.

JDBCUtil

	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)는 데이터베이스에 연결을 시도하는 부분입니다.

BookService 인터페이스 설정

새로운 도서 정보를 데이터베이스에 등록하는 기능을 정의합니다. BooksDTO 객체를 인자로 받아서 해당 도서 정보를 저장합니다.

  • 인터페이스는 구현 클래스가 따라야 할 규격을 제공하며, 실제로 이 메서드들을 구현하는 클래스는 BookService 인터페이스를 구현하게 됩니다

@Service 어노테이션

Spring 프레임워크에서 서비스 계층을 나타냅니다.
bookService 다른 클래스 서비스 이용가능
@Service로 어노테이션된 클래스는 스프링의 컴포넌트 스캔에 의해 자동으로 스프링 빈으로 등록됩니다

@Autowired 어노테이션

Spring에서 의존성 주입(Dependency Injection)을 통해 BooksDAO 객체를 자동으로 주입합니다.
스프링에서 관리하는 빈(Bean)을 자동으로 주입해주는 역할을 하며, 개발자가 직접 객체를 생성하지 않고도 스프링 컨테이너가 빈을 관리하고 주입해줍니다.

MAINTEST

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("없는 도서입니다~"); 
		
		
		
		
	}
	
profile
코딩 일기장

0개의 댓글