# 基于JSP和MySQL实现的图书管理系统
# 一、采用的工具与技术总览
- **前端页面设计涉及技术**:html5+css3
- **后端开发设计技术**:jsp+servlet+javaBean+jdbc+dao
- **模板引擎**:jsp(el与jstl)
- **服务器与java版本**:Tomcat8.5、java12
- **开发与调试工具**:Eclipse IDE 2020-03、Chorme、MySQL、Navicat
# 二、图书管理系统数据库的设计
## 2.1 数据库管理工具
- **数据库管理系统**:mysql数据库管理系统
- **数据库可视化工具**:Navicat for MySQL
## 2.2 数据库表关系
为了减少表的数据冗余,达到数据库设计的三范式,就要避免表设计时候出现的非主键字段的部份依赖与传递依赖,实体性之间是多对多的联系我们就可以采取三张表的设计,关机表两个外键,如果是一对多,我们可以设计两张表,多方的那张表加外键。
## 2.3 数据库以及数据库中表的创建
在mysql中建立了一个名为homework的数据库用来存放与本系统相关的表的信息,所有的表都不采用业务主键,主键只是为了唯一标识表中的一条记录,这里采用的是id作为主键,并且设置为自动递增,以后再见到就不一一描述,所有表的信息如下图所示:

接下来具体介绍该数据库中的每一张表的作用与表之间的关系:
**administrator表**

**user表**

由于本系统主要是针对于学校的图书馆里系统,所以在该系统中外校人员以及无关人等不可以申请账户来借书等操作,只有在校学生可以申请账号,所以此表中Sno字段引用的student表中的Sno作为外键(具体看student表)。
**book表**

**bookshelf表**

**student表**


**department表**

**notice表**

此表是用来做消息通知的,是为了迎合后来的收发邮件。管理员发通知等功能。
注:time是用varchar存的,在具体业务中是主要使用SimpleDateFormat类的 format方法与java.util.Date和java.sql.Date类来进行具体的业务操作
**book__appointment_relation表**

此表主要用于记录所有用户的预约图书的情况。
**student_book_realtion表**

此表主要用于记录每个用户的借书信息。
**student_borrow_relation表**

此表主要用于记录每个用户的借书状态。
**student_fine_relation表**

此表主要用于记录每个用户的罚款状态。
# 三、成品项目的目录结构展示与说明
项目遵循了软甲开发的三层架构的设计,表现层(servlet,jsp与web浏览器等)用于展示数据,业务层(service)用于处理业务需求,持久层(dao)用于完成与数据库的交互




以上就是整个项目的目录结构的展示与说明。
# 四、项目实现
## 4.1 BeanFactory类的细节
通过类加载器获取指定资源properties资源的输入流,加载解析配置文件中的内容,反射创建类的实例对象并且存入到容器中,这里的容器采用的Map,然后其它地方要用的时候。就可以调用BeanFactory类的静态方法getBean来通过key获取实例对象。
注意service所有类的实例化的时机必须要在dao之后,因为service服务层要调用持久层,必须要掌控(依赖)持久层的对象,而持久层对象又是通过容器注入的,所以要先实例化service层再实例化dao层。
下面是类的代码截图:


## 4.2 ProxyFactory类
该类实现了InvocationHanlder接口,自己实现invoke方法,在创建动态代理对象的时候将自己传入当作第三个参数,该类的属性proxyObject就是具体的要代理的对象,返回的经过Proxy.newProxyInstance方法创建的代理对象将会继承Proxy类实现与被代理对象实现的相同的接口,这样返回的对象的方法在执行时候就会经过InvocationHandler实例的invoke方法的拦截,即会加上了其中(在这里是事务控制)的功能。

## 4.3 web.xml
在不使用框架的情况下,一开始我们被该如何在同一个类中接收多个客户端发送的不同的请求,难道要写很多个servlet一个一个的来处理吗?这显然不是一个很好的办法,于是通过百度我了解了怎样让一个servlet处理多个请求,这里的多个请求是同一类请求,然后通过request.getRequserURI()方法来获取请求的url,然后再截取 / 获取请求方法名(请求的具体描述),最后根据if,else判断就可以实现一个servlet处理同一类请求。而这些都是配置在web.xml里面的,下面是web.xml的展示。

首先是访问本项目的欢迎页,这个不用多说

比如LoginController类就是专门处理项目下的以login开头的所有同类请求。

很多,这里就不一一截图了,一个servlet控制器处理一类请求。
## 4.4 dao层的实现细节
持久层是与我们的数据库打交道的,所以避免不了要查数据库,查数据库的具体方法都是从request域或者session域中取得的,然后与数据库交互的话增删改比较好说,就是查询的DQL语句有时为了展示的数据丰富要进行多表联查,要进行分页sql的编写。sql语句就会比较长一些,而且后来加了通信等功能没有新写实现类,与借还信息dao类写在一起,导致这个类代码比较多,有点沉重。
下面是几个dao的查询方法实现的示例:
例如学生查询所有预约的图书与管理员查询某学生借书信息方法:











收起资源包目录





































































































共 362 条
- 1
- 2
- 3
- 4
资源评论


工具盒子
- 粉丝: 37
- 资源: 1314
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
