Java大作业----三层的架构图书管理系统

  (由于忙于考研没有进行很好的测试,功能不够全,bug在所难免,望见谅)
 LibraryManageSystem整体设计说明
LibraryManageSystem 使用了三层的架构:数据访问(Data acess)层、业务(business)层、视图(View)层。
数据访问层:使用JDBC来访问数据库,并对jdbc进行了简单的封装,使用Template mothod模式和回调接口大大减少了对jdbc的低级操作。其中JdbcTemplate类提供了使用jdbc访问数据库的模板,提供了queryForObject和queryForList方法来分别获取查询到的对象和对象的聚集,execute方法来更新、插入、删除操作。提供了RowCallBackHandler接口,可以通过实现该接口来提供对查询一行的回调处理,使用PreparedStatementCallBack回调接口,来提供对PreparedStatement参数的设置,提供了ORMaping接口,通过实现该接口可以很容易实现关系数据库与domain对象的映射,并产生可重用的逻辑。使用Dao模式和AbstractFactory模式对数据访问层进行封装,可以轻易实现数据库间的移植。
业务层:业务层实现了LibraryManageSystem的各项服务,通过业务层使得视图(View)层不依赖于具体的数据访问(Data acess)层的实现。
View层:对MVC进行了清晰地划分。领域对象作为Model,使用java Swing实现了view,
使用ActionLisenter和Controller来实现controller。Controller接口使用命令模式,通过实现该接口来封装对业务的执行并获取执行的结果。真正的控制器其实是ActionLisenter,通过它来监听事件的发生,并分发对命令,并将该命令封装成Controller的某个实现类的对象,执行业务方法,获取执行结果,并将结果显示在view上。
   LibraryManageSystem是一个松耦合的系统,并且可以使得数据访问(Data acess)层、业务(business)层可以轻易的被重用与替换,可以使用其他的view技术(如jsp)来复用这两层。提供了对jdbc进行的简单的封装的基础设施,可以在其他项目中重用并扩展。
源码如下:
对jdbc进行封装的部分:
// 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
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值