基于SSM和MySQL实现的小说管理系统
1.项目概述
1.1 背景与意义
开发背景
为了方便图书管理员的操作,减少图书管理员的工作量并使其能更有效的管理书库中的图书,实现了传统的图书管理工作的信息化建设。
意义
-
准备和提供统一格式的信息,使各种统计工作简化,使信息成本最低
-
及时全面地提供不同要求的、不同细度的信息,以期分析解释现象最快,及时产生正确的控制
-
全面系统的保存大量的信息,并能很快的查询和综合,为组织的决策提出信息支持
-
利用数学方法和各种模型处理信息,以期预测未来和科学地进行决策
1.2 开发环境
-
操作系统 :Win10
-
数据库 :MySQL 5.7
-
数据库开发工具 :Navicat
-
项目的开发工具 :Intellij IDEA
-
Java开发的版本 :1.8.0.102
-
项目运行的服务器 :tomcat
1.3 关键技术
Spring是从实际开发中抽取出来的开源框架,为企业的开发提供一个轻量级的解决方案。该解决方案包括:基于Ioc(控制反转)的核心机制,以及AOP(面向切面编程)的思想,能与多种持久层技术的整合,是优秀的Web MVC框架等。
MVC模式是一种软件架构模式。它将系统分为三个部分:模型,视图和控制器。MVC模式出现的目的就是方便了后续程序的修改和扩展简化,同时使系统中某一段代码的重复利用成为可能。此模式降低了模块之间的耦合度,对自身各个部分进行了分离的同时也使得各个部分具备了应有的功能。
Mybatis是一个经典的后端开源框架,它的前身就是iBatis,MyBatis的执行原理是应用程序根据XML配置文件创建出SqlSessionFactory,然后SqlSessionFactory根据配置文件或者注解创建出SqlSession,SqlSession这个对象包含了所有的执行sql所需要的所有方法,可以通过SqlSession这个实例执行所有的方法对数据库进行操作,操作结束后执行相应的事物控制。
在该系统实现的过程中,使用Spring和SpringMvc的同时,后端还使用了MyBatis技术对数据进行封装和操作。前端使用JSP实现数据展示,用原生HTML页面技术进行渲染,整个系统的架构也是基于经典的mvc设计模式来设计的。该项目后端通过java代码对数据进行一系列操作,整个系统架构基于经典的mvc设计模式来设计,开发工具使用IDEA以及tomcat服务器,同时使用了Mysql数据库对数据进行存储和维护。
2.项目分析
2.1 功能分析
2.2 架构设计
2.3 文件组织结构
项目包文件,配置文件
静态页面文件和静态图片
动态页面文件
3.数据库设计
用户表主要记录了用户的基本信息
小说表记录了小说的基本信息
3.1 概念模型
3.2 逻辑模型
3.3 物理模型
4.项目设计
4.1 后台登陆模块
4.1.1 controler对应的关键代码
```java
@Controller
public class BookController {
@Autowired
private MsBookService msBookService;
@Autowired
private MsCategoryService msCategoryService;
@RequestMapping(value = "/showBook")
public String showAllBookByPage(@RequestParam(value="currentPage",defaultValue="1",required=false)
int currentPage,String title,String author,Model model) {
model.addAttribute("pageMsg",msBookService.selectByPage(title, author, currentPage));
return "showAllBook";
}
/
*
*
*查询小说
*
*
*
*
/
//跳转页面
@RequestMapping(value = "/searchBook")
public String toSearchBook() {
return "searchBook";
}
@RequestMapping(value = "/searchBookPage")
public String searchBook(@RequestParam(value="currentPage",defaultValue="1",required=false)
int currentPage,String title,String author,Model model) {
model.addAttribute("pageMsg",msBookService.selectByPage(title, author, currentPage));
return "searchBook";
}
/
*
*
查询小说end
*
*
*
/
/
查看小说详细信息
/
@RequestMapping(value="/bookDetail")
public String showBookDetail(int id,Model model) {
MsBook book = msBookService.selectByID(id);
MsCategory cate = msCategoryService.selectByPrimaryKey(book.getCategoryId());
model.addAttribute("book",book);
model.addAttribute("cate", cate);
return "bookDetail";
}
/
跳转到添加小说页面 * @return
/
@RequestMapping(value = "/toAddNewBook")
public String toAddNewBook() {
return "addNewBook";
}
/
添加小说 * @param book * @param file * @param request * @return
/
@RequestMapping(value="/addNewBook")
public String addNewBook(MsBook book,MultipartFile file,HttpServletRequest request,HttpSession httpSession) {
MsAdmin admin = (MsAdmin)httpSession.getAttribute("msAdmin");
System.out.println("页面提交过来的表单:"+book);
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
book.setCreateTime(new Date());
book.setCreateAdmin(admin.getAdminName());
book.setUpdatePreAdmin(admin.getAdminName());
book.setDelFlg(1);
//String filePath = request.getSession().getServletContext().getRealPath("/bookImage");; //定义图片上传后的路径
//System.out.println("文件上传路径:"+filePath);
String newFileName = fileOperate(file,Message.IMG_LOCAL_PATH);
book.setImage(newFileName);
System.out.println("添加数据后的book:"+book);
msBookService.insertBook(book);
return "redirect:newBookList";
}
/
* 查询最近上架的小说
/
@RequestMapping(value="/newBookList")
public String newBookList(Model model) {
model.addAttribute("newBookList", msBookService.selectNewBook());
return "newBookList";
}
/
* 下架小说
* @param id
* @return
*/
@RequestMapping(value = "/deleteBook")
public String deleteBook(int id) {
msBookService.deleteByPrimaryKey(id);
return "redirect:showBook";
}
/
* 下架新上架的小说
* @param id
* @return
/
@RequestMapping(value = "/deleteBookNewList")
public String deleteBookNewList(int id) {
msBookService.deleteByPrimaryKey(id);
return "redirect:newBookList";
}
/
* 下架查询到的小说
* @param id
* @return
/
@RequestMapping(value = "/deleteSearchBook")
public String deleteSearchBook(int id) {
msBookService.deleteByPrimaryKey(id);
return "redirect:searchBook";
}
/
已下架小说列表
/
@RequestMapping(value = "/deleteBookList")
public String deleteBookList(Model model) {
model.addAttribute("bookList", msBookService.selectBookDel());
return "delBookList";
}
/
* 跳转到修改书籍信息
/
@RequestMapping(value = "/toUpdateBook")
public String updateBookPage(int id,Model model) {
MsBook book = msBookService.selectByID(id);
MsCategory cate = msCategoryService.selectByPrimaryKey(book.getCategoryId());
model.addAttribute("book", book);
model.addAttribute("cate", cate);
return "editBook";
}
/
* 修改小说信息
* @param book
* @param file
* @param httpSession
* @return
*/
@RequestMapping(value = "/updateBook")
public String updateBook(MsBook book,MultipartFile file,HttpSession httpSession) {
System.out.println("上传过来的小说信息:"+book);
MsBook oldBook = msBookService.selectByID(book.getId());
book.setPublishTime(oldBook.getPublishTime());
MsAdmin admin = (MsAdmin)httpSession.getAttribute("msAdmin");
book.setUpdatePreAdmin(admin.getAdminName());
String newFileName = fileOperate(file,Message.IMG_LOCAL_PATH);
book.setImage(newFileName);
System.out.println("添加完成的小说信息:"+book);
msBookService.updateByPrimaryKeySelective(book);
return "redirect:showBook";
}
/
* 重新上架小说
*/
@RequestMapping("/updateBackBook")
public String updateBackBook(int id) {
msBookService.updateBackBook(id);
return "redirect:deleteBookList";
}
/
* 彻底删除小说
*/
@RequestMapping("/deleteBookReal")
public String deleteBookReal(int id) {
msBookService.deleteBookReal(id);
return "redirect:deleteBookList";
}
/
* 封装操作文件方法,
* @param file
* @param filePath
* @return
/
private String fileOperate(MultipartFile file,String filePath) {
System.out.println("进入文件操作方法");
String originalFileName = file.getOriginalFilename();//获取原始图片的扩展名
System.out.println("图片原始名称:"+originalFileName);
String newFileName = UUID.randomUUID()+originalFileName; //新的文件名称
System.out.println("新的文件名称:"+newFileName);
File targetFile = new File(filePath,newFileName); //创建新文件
try {
file.transferTo(targetFile); //把本地文件上传到文件位置 , transferTo()是springmvc封装的方法,用于图片上传时,把内存中图片写入磁盘
System.out.println("文件上传成功!");
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return newFileName;
}
}
@RequestMapping(value = "/adminLogin")
public String adminLogin(String adminNumber, String adminPwd, HttpSession httpSession, Model model) {
Map
httpSession.removeAttribute("msAdmin"); //移除
return "redirect:/login"; //重定向到登登录界面
}
return "redirect:/login";
}
}
```
4.1.2 界面对应的关键代码功能效果图
4.2 项目配置文件
4.2.1 MyBatis.xml
```java
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--对应的mapper.xml文件 -->
<sqlMapGenerator targetPackage="mappers"
targetProject="./src/main/resources">
<property name="enableSubPackages" value="true" />
5.项目测试
5.1 登录界面异常
错误原因
:
/adminLogin
写为大写
/AdminLogin
错误修复
:
@RequestMapping(value = "/adminLogin")
5.2 上架小说异常
错误原因
:
msBookService.deleteByPrimaryKey(id);
方法应用错误
错误修复
:改为
.updateBackBook(id);
即可
5.3 删除失败异常
错误原因
:
return "redirect";
少了
:deleteBookList
错误修复
:添加
:deleteBookList
即可
5.4 无法显示界面
错误原因 :Tomcat未添加到项目上
错误修复 :
5.5 无法运行项目
错误原因 :JDK未添加到项目上
错误修复 :
6.总结
如今,JavaEE是一个非常优秀的企业信息化开发平台,由于其拥有一些很好的性质包括稳定的性能、良好的开发性和非常高的安全性因此被广泛运用于企业级开发。本项目基于当前比较流行的电商系统为项目背景,遵循javaEE应用软件的规则进行开发,将系统划分为四个层次包括模型model层,持久层,业务逻辑service层和表现层,并整合了目前在企业中广泛运用的spring、springMvc和MyBatis框架进行开发。
Spring用于整个系统的统一调度,贯穿于各层之间,springMvc框架着重于mvc模式的实现,MyBatis框架完成数据的映射和持久化工作,MyBatis的逆向工程极大的方便了持久层的开发,也方便了持久层的维护。
本文虽然完成了预期研究和目标,但后期还有很多工作需要完成:,随着web应用的快速发展,处于信息时代下会有更多的技术应运而生,不光需要对框架进行深入学习和研究还要对系统的架构进行研究。目前客户端技术正在崛起,我们需要认真做调查和研究做出一能让用户体验度更好的产品。以上只是目前的构想,接下来会继续深入研究并作进一步的完善和设计开发。
参考文献
- 基于B/S模式的社区图书馆管理系统的设计与实现(大连理工大学·丁娟娟)
- 基于B/S架构的图书管理系统的设计与实现(电子科技大学·郭汝奇)
- 基于JSP的网上购书系统(华东师范大学·王莉)
- 网上购书电子商务系统(吉林大学·谷丰)
- 基于SSH架构的高校自助化图书管理系统的设计与实现(大连理工大学·杨议)
- 图书管理系统设计与开发(电子科技大学·刘晓清)
- 网上书店的设计与实现(同济大学·徐爱鸣)
- 基于JSP的网上书店系统的设计与实现(吉林大学·马新)
- 基于SSH架构的高校自助化图书管理系统的设计与实现(大连理工大学·杨议)
- 基于JSP的网上书店系统的设计与实现(吉林大学·马新)
- 基于SSH框架的出版物管理系统的设计与实现(华中科技大学·赵曼)
- 网络文学平台的设计与实现(华中科技大学·王俊)
- 基于SSH架构的高校自助化图书管理系统的设计与实现(大连理工大学·杨议)
- 鼓楼区晓风网络书店系统的设计与实现(电子科技大学·陈望青)
- 网上购书电子商务系统(吉林大学·谷丰)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码驿站 ,原文地址:https://m.bishedaima.com/yuanma/35468.html