본문 바로가기
JAVA & Spring

[Java / MySQL] 도서 관리 시스템 02 (MVC패턴)

by 알기 쉬운 코딩 사전 2023. 1. 14.
반응형

 

2장에서는 데이터를 전달받는 객체인 VO 클래스를 생성하고 VIEW 패키지에 검색 기능이 가능한 SearchView를 생성하고 Controller에서 정상 작동이 되는지를 간단하게나마 확인해 보겠습니다.

 

book.vo 패키지에 BookVO 클래스를 생성해 줍니다. main 실행시킬 일이 없으므로 main 생성 부분 체크를 하지 않습니다.

 

우선 변수를 각 데이터 타입에 맞게 설정해 줍니다.

package book.vo;

public class BookVO {
	private int isbn;
	private String name;
	private String publish;
	private String author;
	private int price;
	private int category;
}

 

메뉴바의 Source에서 Generate Getters and Setters..를 클릭합니다.

 

Select All을 클릭 후 Generate 클릭합니다.

 

Source에서 Generate toString() 버튼을 클릭합니다.

 

Fields 버튼을 클릭 후 Generate를 클릭해 줍니다.

 

BookVO 클래스 소스 코드입니다.

package book.vo;

public class BookVO {
	private int isbn;
	private String name;
	private String publish;
	private String author;
	private int price;
	private int category;
	
	public int getIsbn() {
		return isbn;
	}
	public void setIsbn(int isbn) {
		this.isbn = isbn;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPublish() {
		return publish;
	}
	public void setPublish(String publish) {
		this.publish = publish;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public int getCategory() {
		return category;
	}
	public void setCategory(int category) {
		this.category = category;
	}
	
	@Override
	public String toString() {
		return "BookVO [isbn=" + isbn + ", name=" + name + ", publish=" + publish + ", author=" + author + ", price="
				+ price + ", category=" + category + "]";
	}
	
	
}

 

데이터 베이스에 접근 가능한 객체 클래스를 book.dao 패키지에 만들어 보겠습니다. 클래스명은 BookDAO입니다.

실행시킬 필요가 없으니 main은 체크하지 않아도 됩니다.

 

BookDAO 소스 코드입니다.

package book.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import book.vo.BookVO;

public class BookDAO {

	public ArrayList<BookVO> bookVOList = new ArrayList<BookVO>();
	
	public ArrayList<BookVO> select(Connection con, String searchWord){
		
		try {
			String sql = "select * from book where name like ?";
			PreparedStatement pstmt = con.prepareStatement(sql);
			pstmt.setString(1, "%"+searchWord+"%");
			ResultSet rs = pstmt.executeQuery();
			while(rs.next()) {
				BookVO vo = new BookVO();
				vo.setIsbn(rs.getInt("isbn"));
				vo.setName(rs.getString("name"));
				vo.setPublish(rs.getString("publish"));
				vo.setAuthor(rs.getString("author"));
				vo.setPrice(rs.getInt("price"));
				vo.setCategory(rs.getInt("category"));
				bookVOList.add(vo);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return bookVOList;
	}
}

 

화면 기능을 나타내는 book.view 패키지에 검색 가능 화면을 출력하는 BookSearchView 클래스를 생성합니다. 실행시킬 필요가 없으므로 main은 체크하지 않아도 됩니다.

 

BookSearchView 소스 코드입니다.

package book.view;

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import book.vo.BookVO;

public class BookSearchView extends JPanel {

	JTextField tf;
	JButton btnSearch;
	ArrayList<BookVO> bookVOList;
	JPanel panN;
	JTable table;
	DefaultTableModel model;
	String searchWord;
	
	public BookSearchView() {
		setLayout(new BorderLayout(10, 10));
		JLabel lbl = new JLabel("검색어: ");
		tf = new JTextField(20);
		btnSearch = new JButton("검색");
		panN = new JPanel();
		panN.add(lbl);
		panN.add(tf);
		panN.add(btnSearch);
	}
	
	public void initView() {
		String[] hearder = {"도서번호", "도서명", "저자명", "출판사", "가격", "분류명"};
		model = new DefaultTableModel(hearder, bookVOList.size());
		putSearchResult();
		table = new JTable(model);
		JScrollPane scroll = new JScrollPane(table);
		add("North", panN);
		add("Center", scroll);
	}
	
	public void putSearchResult() {
		BookVO vo = null;
		for (int i = 0; i < bookVOList.size(); i++) {
			vo = bookVOList.get(i);
			model.setValueAt(vo.getIsbn(), i, 0);
			model.setValueAt(vo.getName(), i, 1);
			model.setValueAt(vo.getAuthor(), i, 2);
			model.setValueAt(vo.getPublish(), i, 3);
			model.setValueAt(vo.getPrice(), i, 4);
			model.setValueAt(vo.getCategory(), i, 5);
		}
	}
	public void setBookVOList(ArrayList<BookVO> bookVOList) {
		this.bookVOList = bookVOList;
	}
	public String getSearchWord() {
		this.searchWord = tf.getText();
		return searchWord;
	}
}

 

마지막으로 처리하는 부분인 book.controller 패키지에 BookController 클래스를 생성합니다.

직접적으로 실행되는 프로그램이니 main을 체크합니다.

 

BookController 소스 코드 입니다.

package book.controller;

import java.sql.Connection;
import java.util.ArrayList;

import javax.swing.JFrame;

import book.dao.BookDAO;
import book.dao.JDBC_Connector;
import book.view.BookSearchView;
import book.vo.BookVO;

public class BookController extends JFrame {
	
	public BookController() {
		//DB 연결
		Connection con = JDBC_Connector.getCon();
		BookDAO dao = new BookDAO();
		
		BookSearchView searchPan = new BookSearchView();
		ArrayList<BookVO> bookVOList = dao.select(con, searchPan.getSearchWord());
		
		searchPan.setBookVOList(bookVOList);
		searchPan.initView();
		searchPan.putSearchResult();
		
		add(searchPan);
		
		setTitle("도서관리시스템");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(300, 500, 600, 500);
		setVisible(true);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new BookController();
	}

}

 

정상적으로 실행이 되는지 BookController를 실행시켜 봅니다.

 

궁금하신 점이 있으시면 덧글 주시면 최대한 답글 해드리겠습니다.

감사합니다.

반응형

댓글