//JdbcTemplate.java
package edu.jlu.fuliang.library.jdbc;
import java.util.ArrayList;
import java.util.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcTemplate {
public List query(String sql,RowCallBackHandler handler){
Connection connection = JdbcUtils.createConnection();
PreparedStatement ps = JdbcUtils.createPreparedStatement(sql,connection);
ResultSet rs = null;
List list = new ArrayList();
try {
rs = ps.executeQuery();
while(rs.next()){
list.add(handler.processRow(rs));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.closeStatement(ps);
JdbcUtils.relaseConnection(connection);
}
return list;
}
public Object queryForObject(String sql,RowCallBackHandler handler){
Connection connection = JdbcUtils.createConnection();
PreparedStatement ps = JdbcUtils.createPreparedStatement(sql,connection);
ResultSet rs = null;
Object o = null;
try {
rs = ps.executeQuery();
rs.next();
o = handler.processRow(rs);
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.closeStatement(ps);
JdbcUtils.relaseConnection(connection);
}
return o;
}
public void executeUpdate(String sql,PreparedStatementCallBack pareparedStatementCallBack){
Connection connection = JdbcUtils.createConnection();
PreparedStatement ps = JdbcUtils.createPreparedStatement(sql,connection);
try {
pareparedStatementCallBack.doInStatement(ps);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.closeStatement(ps);
JdbcUtils.relaseConnection(connection);
}
}
}
//回调接口RowCallBackHandler
package edu.jlu.fuliang.library.jdbc;
import java.sql.ResultSet;
public interface RowCallBackHandler {
public Object processRow(ResultSet rs);
}
///回调接口PreparedStatementCallBack
package edu.jlu.fuliang.library.jdbc;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public interface PreparedStatementCallBack {
public void doInStatement(PreparedStatement stmt)throws SQLException;
}
//ORMaping接口
package edu.jlu.fuliang.library.jdbc;
import java.sql.ResultSet;
public interface ORMaping {
public Object mapping(ResultSet rs,Object o);
}
//JdbcUtils.java
package edu.jlu.fuliang.library.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtils {
public static Connection createConnection(){//为了简单,进行了硬编码
String user = "root";
String passwd = "123456";
String url = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gb2312";
Connection connection = null;
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(url,user,passwd);
}
catch(Exception e){
e.printStackTrace();
}
return connection;
}
public static PreparedStatement createPreparedStatement(String sql,Connection connection){
PreparedStatement stmt = null;
try{
stmt = connection.prepareStatement(sql);
}catch(Exception e){
e.printStackTrace();
}
return stmt;
}
public static void closeStatement(Statement s){
try {
s.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void relaseConnection(Connection connection){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//以下是数据访问对象:
//BorrowerDao.java
package edu.jlu.fuliang.library.dao;
import edu.jlu.fuliang.library.domain.Borrower;
public interface BorrowerDao {
public Borrower queryByLastName(String lastName);
public void updateBorrower(Borrower borrower);
public void insertBorrower(Borrower borrower);
public void deleteBorrowerByLastName(String lastName);
}
// BookDao.java
package edu.jlu.fuliang.library.dao;
import java.util.List;
import edu.jlu.fuliang.library.domain.Book;
public interface BookDao {
public Book queryByTitle(String title);
public List queryByAuthor(String author);
public List queryByBorrowerLastName(String firstName);
public void updateBook(Book book);
public void insertBook(Book book);
public void deleteBookByTile(String title);
}
// BorrowOrReturnDao.java
package edu.jlu.fuliang.library.dao;
public interface BorrowOrReturnDao {
public void borrowBook(String borrowerLastName,String bookTile);
public void returnBook(String borrowerLastName,String bookTile);
}
//抽象工厂:
package edu.jlu.fuliang.library.dao;
public interface DaoFactory {
public BookDao createBookDao();
public BorrowerDao createBorrowerDao();
public BorrowOrReturnDao createBorrowOrReturnDao();
}
//具体工厂:
package edu.jlu.fuliang.library.dao;
import edu.jlu.fuliang.library.dao.mysql.BookDaoImpl;
import edu.jlu.fuliang.library.dao.mysql.BorrowerDaoImpl;
public class MysqlDaoFactory implements DaoFactory{
public BookDao createBookDao() {
return new BookDaoImpl();
}
public BorrowerDao createBorrowerDao() {
return new BorrowerDaoImpl();
}
public BorrowOrReturnDao createBorrowOrReturnDao() {
return new BorrowOrReturnDaoImpl();
}
}
//BookDao的具体实现:
//BookDaoImpl.java
package edu.jlu.fuliang.library.dao.mysql;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import edu.jlu.fuliang.library.dao.BookDao;
import edu.jlu.fuliang.library.domain.Book;
import edu.jlu.fuliang.library.jdbc.*;
public class BookDaoImpl implements BookDao{
private JdbcTemplate jdbcTemplate = new JdbcTemplate();
public Book queryByTitle(String title) {
String sql = "select * from book where title = "+title;
return (Book)jdbcTemplate.queryForObject(sql,new RowCallBackHandler(){
public Object processRow(ResultSet rs) {
BookMaping map = new BookMaping();
Book book = (Book)map.mapping(rs,new Book());
return book;
}
});
}
public List queryByAuthor(String author) {
String sql = "select * from book where author = "+author;
return jdbcTemplate.query(sql,new RowCallBackHandler(){
public Object processRow(ResultSet rs) {
BookMaping map = new BookMaping();
Book book = (Book)map.mapping(rs,new Book());
return book;
}
});
}
//Borrower的具体实现:
//BookDaoImpl.java
package edu.jlu.fuliang.library.dao.mysql;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import edu.jlu.fuliang.library.dao.BorrowerDao;
import edu.jlu.fuliang.library.domain.Borrower;
import edu.jlu.fuliang.library.jdbc.JdbcTemplate;
import edu.jlu.fuliang.library.jdbc.PreparedStatementCallBack;
import edu.jlu.fuliang.library.jdbc.RowCallBackHandler;
public class BorrowerDaoImpl implements BorrowerDao{
private JdbcTemplate jdbcTemplate = new JdbcTemplate();
public Borrower queryByLastName(String lastName) {
String sql = "select * from borrower where lastName = " + lastName;
return (Borrower)jdbcTemplate.queryForObject(sql,new RowCallBackHandler(){
public Object processRow(ResultSet rs) {
BorrowerMaping borrowerMaping = new BorrowerMaping();
return borrowerMaping.mapping(rs,new Borrower());
}
});
}
public void updateBorrower(final Borrower borrower) {
String sql = "update borrower set lastname = ?,firstname=?" +
",address =?,city =?,zip=?,state=? where lastname = ?";
jdbcTemplate.executeUpdate(sql,new PreparedStatementCallBack(){
public void doInStatement(PreparedStatement stmt) throws SQLException {
stmt.setString(1,borrower.getLastName());
stmt.setString(2,borrower.getFirstName());
stmt.setString(3,borrower.getAddress());
stmt.setString(4,borrower.getCity());
stmt.setString(5,borrower.getZip());
stmt.setString(6,borrower.getState());
stmt.setString(7,borrower.getLastName());
}
});
}
public void insertBorrower(final Borrower borrower) {
String sql = "insert into borrower values(?,?,?,?,?,?)";
jdbcTemplate.executeUpdate(sql,new PreparedStatementCallBack(){
public void doInStatement(PreparedStatement stmt) throws SQLException {
stmt.setString(1,borrower.getLastName());
stmt.setString(2,borrower.getFirstName());
stmt.setString(3,borrower.getAddress());
stmt.setString(4,borrower.getCity());
stmt.setString(5,borrower.getZip());
stmt.setString(6,borrower.getState());
}
});
}
public void deleteBorrowerByLastName(final String lastName) {
String sql = "delete from borrower where lastName = ?";
jdbcTemplate.executeUpdate(sql,new PreparedStatementCallBack(){
public void doInStatement(PreparedStatement stmt) throws SQLException {
stmt.setString(1,lastName);
}
});
}
}
// BorrowOrReturnDaoImpl.java
package edu.jlu.fuliang.library.dao.mysql;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import edu.jlu.fuliang.library.dao.BorrowOrReturnDao;
import edu.jlu.fuliang.library.jdbc.JdbcTemplate;
import edu.jlu.fuliang.library.jdbc.PreparedStatementCallBack;
public class BorrowOrReturnDaoImpl implements BorrowOrReturnDao{
private JdbcTemplate jdbcTemplate = new JdbcTemplate();
public void borrowBook(final String borrowerLastName, final String bookTitle) {
String sql = "insert into book_borrower values(?,?)";
jdbcTemplate.executeUpdate(sql,new PreparedStatementCallBack(){
public void doInStatement(PreparedStatement stmt) {
try{
stmt.setString(1,borrowerLastName);
stmt.setString(2,bookTitle);
}catch(SQLException e){
e.printStackTrace();
}
}
});
}
public void returnBook(final String borrowerLastName, final String bookTitle) {
String sql = "delete from book_borrower where lastname = ?,title = ?";
jdbcTemplate.executeUpdate(sql,new PreparedStatementCallBack(){
public void doInStatement(PreparedStatement stmt) {
try{
stmt.setString(1,borrowerLastName);
stmt.setString(2,bookTitle);
}catch(SQLException e){
e.printStackTrace();
}
}
});
}
}
//book的ORMaping的实现:
// BookMaping.java
package edu.jlu.fuliang.library.dao.mysql;
import java.sql.ResultSet;
import java.sql.SQLException;
import edu.jlu.fuliang.library.domain.Book;
import edu.jlu.fuliang.library.jdbc.ORMaping;
public class BookMaping implements ORMaping{
public Object mapping(ResultSet rs, Object o) {
Book book = (Book)o;
try {
book.setTitleName(rs.getString("titleName"));
book.setAuthor(rs.getString("author"));
book.setISBN(rs.getString("isbn"));
book.setType(rs.getInt("type"));
book.setItemsAvailable(rs.getInt("itemAvailable"));
} catch (SQLException e) {
e.printStackTrace();
}
return book;
}
}
////borrower的ORMaping的实现:
// BorrowerMaping.java
package edu.jlu.fuliang.library.dao.mysql;
import java.sql.ResultSet;
import java.sql.SQLException;
import edu.jlu.fuliang.library.domain.Borrower;
import edu.jlu.fuliang.library.jdbc.ORMaping;
public class BorrowerMaping implements ORMaping{
public Object mapping(ResultSet rs, Object o) {
Borrower borrower = (Borrower)o;
try {
borrower.setLastName(rs.getString(1));
borrower.setFirstName(rs.getString(2));
borrower.setAddress(rs.getString(3));
borrower.setCity(rs.getString(4));
borrower.setZip(rs.getString(5));
borrower.setState(rs.getString(6));
} catch (SQLException e) {
e.printStackTrace();
}
return borrower;
}
}
//业务层:
//Service接口
// Service.java
package edu.jlu.fuliang.library.service;
import java.util.List;
import edu.jlu.fuliang.library.domain.Book;
import edu.jlu.fuliang.library.domain.Borrower;
public interface Service {
public Book queryBookByTitle(String title);
public List queryBookByAuthor(String author);
public List queryBookByBorrowerLastName(String firstName);
public void updateBook(Book book);
public void insertBook(Book book);
public void deleteBookByTile(String title);
public Borrower queryBorrowerByLastName(String lastName);
public void updateBorrower(Borrower borrower);
public void insertBorrower(Borrower borrower);
public void deleteBorrowerByLastName(String lastName);
public void borrowBook(String borrowerLastName,String bookTitle);
public void returnBook(String borrowerLastName,String bookTitle);
}
//Service的具体实现
// LibraryService.java
package edu.jlu.fuliang.library.service;
import java.util.List;
import edu.jlu.fuliang.library.dao.BookDao;
import edu.jlu.fuliang.library.dao.BorrowOrReturnDao;
import edu.jlu.fuliang.library.dao.BorrowerDao;
import edu.jlu.fuliang.library.dao.DaoFactory;
import edu.jlu.fuliang.library.dao.MysqlDaoFactory;
import edu.jlu.fuliang.library.domain.Book;
import edu.jlu.fuliang.library.domain.Borrower;
public class LibraryService implements Service{
private BookDao bookDao;
private BorrowerDao borrowerDao;
private BorrowOrReturnDao borrowOrReturnDao;
public LibraryService(){
DaoFactory daoFactory = new MysqlDaoFactory();
bookDao = daoFactory.createBookDao();
borrowerDao = daoFactory.createBorrowerDao();
borrowOrReturnDao = daoFactory.createBorrowOrReturnDao();
}
public Book queryBookByTitle(String title) {
return bookDao.queryByTitle(title);
}
public List queryBookByAuthor(String author) {
return bookDao.queryByAuthor(author);
}
public List queryBookByBorrowerLastName(String firstName) {
return bookDao.queryByBorrowerLastName(firstName);
}
public void updateBook(Book book) {
bookDao.updateBook(book);
}
public void insertBook(Book book) {
bookDao.insertBook(book);
}
public void deleteBookByTile(String title) {
bookDao.deleteBookByTile(title);
}
public Borrower queryBorrowerByLastName(String lastName) {
return borrowerDao.queryByLastName(lastName);
}
public void updateBorrower(Borrower borrower) {
borrowerDao.updateBorrower(borrower);
}
public void insertBorrower(Borrower borrower) {
borrowerDao.insertBorrower(borrower);
}
public void deleteBorrowerByLastName(String lastName) {
borrowerDao.deleteBorrowerByLastName(lastName);
}
public void borrowBook(String borrowerLastName, String bookTitle) {
borrowOrReturnDao.borrowBook(borrowerLastName,bookTitle);
}
public void returnBook(String borrowerLastName, String bookTitle) {
borrowOrReturnDao.returnBook(borrowerLastName,bookTitle);
}
}
//view层:
//主界面:
package edu.jlu.fuliang.library.view;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class LibraryMainFrame extends JFrame{
private JPanel myPanel = new MyPanel();
private JMenu functionMenu,infoMenu,maintenanceMenu;
private JMenuItem lendMenuItem,returnMenuItem;
private JMenuItem titleMenuItem,borrowerMenuItem,browseAllMenuItem;
private JMenuItem insertBookMenuItem,updateBookMenuItem;
private JMenuItem insertBorrowerMenuItem,updateBorrowerMenuItem;
public LibraryMainFrame(){
functionMenu = new JMenu("Function");
infoMenu = new JMenu("Inforation");
maintenanceMenu = new JMenu("Maintenance");
lendMenuItem = new JMenuItem("Lend items...");
returnMenuItem = new JMenuItem("Return items...");
functionMenu.add(lendMenuItem);
functionMenu.add(returnMenuItem);
titleMenuItem = new JMenuItem("Search book...");
borrowerMenuItem = new JMenuItem("Search Borrower...");
browseAllMenuItem = new JMenuItem("Browse All...");
infoMenu.add(titleMenuItem);
infoMenu.add(borrowerMenuItem);
infoMenu.add(browseAllMenuItem);
insertBookMenuItem = new JMenuItem("Insert Title...");
updateBookMenuItem = new JMenuItem("Update Item...");
insertBorrowerMenuItem = new JMenuItem("Insert Borrower...");
updateBorrowerMenuItem = new JMenuItem("Update Borrower...");
maintenanceMenu.add(insertBookMenuItem);
maintenanceMenu.add(updateBookMenuItem);
maintenanceMenu.add(insertBorrowerMenuItem);
maintenanceMenu.add(updateBorrowerMenuItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(functionMenu);
menuBar.add(infoMenu);
menuBar.add(maintenanceMenu);
setJMenuBar(menuBar);
add(myPanel);
setSize(300,300);
setVisible(true);
lendMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new BorrowDialog(LibraryMainFrame.this,"Lend book",true);
}
});
returnMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new ReturnDialog(LibraryMainFrame.this,"Return book",true);
}
});
titleMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new SearchBookDialog(LibraryMainFrame.this,"Search book",true);
}
});
borrowerMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new BorrowerInformationDialog(LibraryMainFrame.this,"Borrower Information",true);
}
});
browseAllMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
}
});
insertBookMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new InsertBookDialog(LibraryMainFrame.this,"Insert book dialog",true);
}
});
updateBookMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new UpdateBookDialog(LibraryMainFrame.this,"Update book dialog",true);
}
});
insertBorrowerMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new InsertBorrowerDialog(LibraryMainFrame.this,"Insert borrower dialog",true);
}
});
updateBorrowerMenuItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
new UpdateBorrowerDialog(LibraryMainFrame.this,"Update borrower dialog",true);
}
});
}
private class MyPanel extends JPanel{
public void paint(Graphics g){
g.setColor(Color.green);
g.drawString("Welcome to Library System!",40,40);
}
}
public static void main(String []args){
LibraryMainFrame mainFrame = new LibraryMainFrame();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package edu.jlu.fuliang.library.view;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import edu.jlu.fuliang.library.controller.InsertBorrowerController;
import edu.jlu.fuliang.library.domain.Borrower;
public class InsertBorrowerDialog extends JDialog{
JTextField lastNameField;
JTextField firstNameField;
JTextField addressField;
JTextField cityField;
JTextField zipField;
JTextField stateField;
JButton addButton,exitButton;
public InsertBorrowerDialog(JFrame f,String s,boolean