图书借阅管理系统

时间:2020-9-3 作者:admin


图书借阅管理系统

注意本系统为最简单的增删改查,没有解决并发问题,适合于初学SSM的人练手

本系统采用SSM+MySQL+Maven+MySQL+layui+idea实现

一:写思维导图

写思维导图,能初步的认识本项目需要的功能和对项目的认知,无论是小白还是老白写项目时都应该整理好思维导图,这样,能知道自己应该写什么业务,也能思路条例都清晰,每写完一个流程可以做标记,这样,如果忘记写到那个业务了也能从思维导图看出。
图书借阅管理系统
这即为本项目的项目流程思维导图,可看出本项目分为管理员和用户两个系统。之后,即可以两个系统来开始写项目

二: 数据库

数据库为整个项目数据的来源,更是正式写项目时第一个流程,没有数据库,就没有实体类,就没有之后的所有,所以,数据库的存在和规范极为重要:

引用下大佬写的数据库规范:https://blog.csdn.net/zollty/article/details/85165434
重要的为:要遵守数据的设计规范3NF 规定:

  1. 表内的每一个记录都只能被表达一次。
  2. 表内的每一个记录都应该被唯一的标识(有唯一键)。
  3. 表内不应该存储依赖于其他键的非键信息。

本项目使用了五个表,分别是:
管理员 表:

CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) DEFAULT NULL,
  `password` int(12) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1002 DEFAULT CHARSET=utf8;

书籍信息 表:

CREATE TABLE `book_info` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `author` varchar(20) DEFAULT NULL,
  `publish` varchar(20) DEFAULT NULL,
  `ISBN` varchar(30) DEFAULT NULL,
  `introduction` varchar(255) DEFAULT NULL,
  `language` varchar(5) DEFAULT NULL,
  `price` double(10,2) DEFAULT NULL,    #价格
  `pubdate` varchar(20) DEFAULT NULL,
  `cid` int(10) DEFAULT NULL,
  `stock` int(11) DEFAULT NULL,
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1007 DEFAULT CHARSET=utf8;

书籍类别表:

CREATE TABLE `class_info` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

借阅信息表:

CREATE TABLE `lend_list` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `reader_id` int(12) DEFAULT NULL,
  `book_id` int(12) DEFAULT NULL,
  `lend_date` varchar(20) DEFAULT NULL,
  `back_date` varchar(20) DEFAULT NULL,
  `fine` double(10,2) DEFAULT NULL,
  `state` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

读者用户 表:

CREATE TABLE `reader_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `reader_id` int(11) NOT NULL,
  `name` varchar(12) NOT NULL,
  `password` int(12) NOT NULL,
  `sex` varchar(5) DEFAULT NULL,
  `birthday` varchar(20) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  `telephone` varchar(11) DEFAULT NULL,
  `card_state` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

三:具体代码实现and静态资源

见我写的gitee地址:https://gitee.com/CYS1847527897/ssmBuild

四:本项目所写的错误and经验

第一个思想问题:mvc里管理员和普通用户登录判断 : 直接采用用户名密码登录?? 通过下拉框选择管理员或者用户?
解决办法:根据下拉框的值来判断是管理员还是读者
第二个代码问题:前端页面报404: 想法:会不会因为在前端页面在web-inf里,介于上周显示出来了,这周突然显示不出,排除
但是为什么在这项目里出不来,在另一个空项目里前端页面放在web-inf外,空项目能出来,疑问
问题解决:将jsp页面放在web-inf外,解决! 为什么?
第三个前端页面问题:视图解析器跳转不到页面,没有拼接路径:为了测试是否因为不在web-inf的原因,将jsp再次放入web-inf,
结果还是没有跳转过去,页面也点不出来了,23333… 不是这个原因
找到解决思路:配置文件或web.xml写错了,框架搭错
第四个Tomcat启动报错问题:解决 :多打了个war包,重新打war包
第五个Tomcat启动报错问题:[2020-08-05 07:03:22,224] Artifact SSMMyLibrary:war exploded: Error during artifact deployment. See server log for details.
解决 :重新注入配置文件 解决:大哥帮忙写配置文件
第六个问题:Error:(3, 20) java: 程序包com.sms.pojo不存在
思路: ps:一分钟前运行到页面了,配置文件删了重新copy了,可能是配置文件的问题,也可以是maven的问题
解决:maven刷新,idea重启
第七个问题:前端提示中文乱码问题: 好像本来后台传到前端的时候就乱码了,大哥传字符串能传过去不乱码
解决:layui书籍传到前端需要官网的转义
第八个问题: No converter found for return value of type: class com.sms.util.SuccessUtil
SuccessUtil类不能作为mvc返回类型,需转为jackson类型
解决:导入jackson三个jar包
第九个问题: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1318)
问题出现:导入jackson三个jar包后,页面不出来,直接报500
重复第八个问题:org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved [org.springframework.http.converter.
HttpMessageNotWritableException: No converter found for return value of type: class com.sms.util.SuccessUtil]
思路:可能jackson版本和spring版本不匹配 将spring版本降低 原来:5.2.8 降为:4.1.9.RELEASE
问题解决:spring版本和jackson版本不匹配
第十个错误:class com.github.pagehelper.PageHelper cannot be cast to class org.apache.ibatis.plugin.Interceptor
问题解决:pageHelper版本过高,接口名字已修改,将配置文件修改成: com.github.pagehelper.PageInterceptor
第十一个问题:Caused by: java.lang.ClassNotFoundException: mysql
问题解决: pageHelper版本过高,已经可以自动匹配数据库类型,不需要指定数据库,把配置文件 <property name="dialect" value="mysql"/> 删掉即可
第十二个问题:Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 5
由错误提示可知,查询的结果是期望一条记录或者为空,但是返回的结果有5条,也就是说你的sql查询结果返回多条了
解决办法
(1)检查Mybatis配置文件中返回的结果类型与Java中返回类型是否一致
(2)检查传递参数的个数
(3)检查数据库数据是否正确
(4)检查映射SQL中返回resultType 或resultMap,接口里的返回类型
(5)select语句加上limit 1 …
第十三个问题:后端传参数给前端layui框架数据列表乱码 解决:SpringMvc json传到前端layui需要转换为官网要求
第十四个问题:前端页面突然没有页面效果: 解决:清理浏览器缓存
第十五个问题:前端id出不来:“数据库字段和java变量名有一个默认的映射规则”,
“name_id 对应 nameId” “对不上就无法赋值”
“因为是用的反射机制实现的赋值”
第十六个问题: java.lang.NumberFormatException: null
解决:前端book_id 改为bookId
第十七个问题:用户的头像出不来 : 有时出的来,有时出不来 :解决:用户头文件和管理员头文件分开
第十八个问题:模糊查询一直出不来 :解决:map.put里面的键 需要和 sql语句里面的 条件 对应
第十九个问题:前端有东西乱码(分页,自带的提示框)
第二十个问题:借阅管理前端和后端交互 :解决:见第十六个问题方法
第二十一个思想问题:查询时:如果默认查询全部的话,那模糊查询不知道插在哪里,如果直接模糊查询,默认为空,
那分页不知道怎么添加
解决:直接用模糊查询,分页参数和条件参数全放在map里

学会的新经验:1、将经常在不同类里但值一样的变量放在工具类里设为静态常量,减少引用,
要用的时候直接调用,session.setAttribute键直接调用,不打用引号,“你要是把他打引号了,怎么可能用这个类调用他的”,
“他是个静态的常量。直接可以用类名点儿调用。”
2、mapper.xml里resultMap column是数据库字段 property是实体类属性,为了让两个对应
“resultmap最主要作用是结果集,自定义想要返回的结果”
3.@ResponseBody:它就不会走视图解析器,会直接返回个字一符串
4.判断页面跳转用前端下拉框判断,0为管理员,走管理员页面 1为读者,走读者页面 跳转走前端ajax判断跳转
5.ssm 控制层就像一个大拼图,拼图是缺角补角,总会有两个拼图的缺口和角能拼在一起,我们需要做的,就是写拼图,并且把拼图全部拼好成为一个完整的大拼图
6.整合ssm:“最简单的就是一个spring的一个springmvc的就可以了”,“mybatis的其实不用也可以’”,
“spring的就配置个数据源,mybatis工厂,包扫描代理,事务管理器”,
“springmvc就配置下静态资源映射,注解驱动,视图解析器就差不多了”,
“web.xml的配置顺序是上下文参数-监听器-过滤器-servlet”
7.关于mvc接收前端值:“为什么我在这里写access就能得到前端的access参数呢?如果前端和后端参数名一样,他不会冲突吗?”
“你这个问题,他们是通过name匹配的,匹配到就自动给你注入进去了 ,我之前写过一遍博客,介绍属性注入的实例。”
“http://xieahui.com/2018/05/17/%E6%8A%80%E6%9C%AF/spring%E4%B8%AD%E8%87%AA%E5%8A%A8%E6%B3%A8%E5%85%A5%E5%89%8D%E7%AB%AF%E4%BC%A0%E9%80%92%E7%9A%84%E5%90%84%E7%A7%8D%E7%B1%BB%E5%9E%8B%E7%9A%84%E6%95%B0%E6%8D%AElist-map-bean-array/”
8.为什么要在接口上就throws:“老子没有犯过的错,儿子也不能犯了! 如果儿子犯错了,自己偷偷的处理(try…catch),不要让老子知道(throws)!!”
9.pageHelper的使用
10.idea类列表分行 (见有道云笔记)
11.逆向工程 Generator 12:关于业务逻辑层和控制层:业务逻辑层写好判断,写好逻辑后,控制层直接调用就会返回所要的数据了,而不是在控制层写逻辑判断
13:翻译插件:Translation 14:查看sql语句:Mybatis Log Plugin (需要加log4j)
15:SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
//Date转换为String
lendInfo.setLend_date(sdf.format(date)); 16:Calendar 类 :得到时间,设置时间,计算时间 17:sql: 计算从哪一条数据开始取

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。