IDEA+Java+SSM+Mysql+Bootstrap+Maven实现网上书城系统

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: IDEA+Java+SSM+Mysql+Bootstrap+Maven实现网上书城系统

一、系统介绍


1.开发环境


开发工具:IDEA2018


JDK版本:jdk1.8


Mysql版本:8.0.13


2.技术选型


Java+Spring+SpringMVC+Mybatis+Bootstrap+Mysql+Maven


3.系统功能


用户


1.注册


2.登录


3.浏览书籍


4.购买书籍


4.数据库文件

/*
 Navicat Premium Data Transfer
 Source Server         : MySQL
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : 127.0.0.1:3306
 Source Schema         : ssm_maven_bookstore
 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001
 Date: 02/12/2021 21:32:11
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `author` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `press` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `pubdate` date NOT NULL,
  `price` double(3, 1) NOT NULL,
  `page` int(3) NOT NULL,
  `img` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `feature` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `booktype` int(5) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, '图解Java多线程设计模式', '侯振龙', '图灵出版社', '2017-08-22', 89.0, 360, 'java01.jpg', '编写了300个示例程序来实现设计模式,掌握这些设计模式可以避免程序发生死锁、节省资源、提高性能等,让多线程程序更高效。java.util.concurrent包、synchronized关键字、Swing框架、Java内存模型等内容也均有涉及,不仅能够了解Java多线程的相关知识,还可加深对Java语言的理解。', 1);
INSERT INTO `book` VALUES (2, 'Java编程思维', 'Allen B. Downey', '人民出版社', '2016-12-15', 59.0, 220, 'java02.jpg', '本书是一本实用的计算机入门教程,目前已被众多大学和高中选作教材。书中不仅介绍Java编程,还阐明如何养成计算机科学家才具备的思维方式,让读者学会怎样将编程作为实现目的的手段。', 1);
INSERT INTO `book` VALUES (3, 'Java技术手册(第6版)', 'Benjamin J Evans', '人民出版社', '2015-11-23', 79.0, 180, 'java03.jpg', '本书旨在帮助有经验的Java程序员充分使用Java 7和Java 8的功能,但也可供Java开发新手学习。书中提供了大量示例,演示了如何充分利用现代API和开发过程中的最佳实践。这一版进行了全面更新。第一部分快速准确地介绍了Java编程语言和Java平台。第二部分讨论了核心概念和API,展示了如何在Java环境中解决实际的编程任务。', 1);
INSERT INTO `book` VALUES (4, 'Java虚拟机基础教程', 'Vincent van der Leun', '图灵出版社', '2018-03-29', 69.0, 295, 'java04.jpg', 'Java虚拟机(JVM)是开发和部署软件的成熟的现代平台,最初只有Java一门语言运行于其中。随着Java的日益复杂以及JVM性能的增强,出现了新一代可在JVM中运行的编程语言。', 1);
INSERT INTO `book` VALUES (5, '明解Java', '柴田望洋', '新华出版色', '2018-01-19', 99.0, 483, 'java05.jpg', '从基础知识到面向对象编程完全掌握!\r\n从Java的基础知识讲起,循序渐进,直到面向对象编程的内容。书中结合猜数字游戏、猜拳游戏、心算训练等有趣的游戏程序进行讲解,让学习过程完全不枯燥。', 1);
INSERT INTO `book` VALUES (6, 'Java机器学习', 'Boštjan Kaluža', '人民出版社', '2017-09-01', 49.0, 320, 'java06.jpg', '- 快速了解用Java创建并实现机器学习\r\n- 涵盖Mahout、Weka、Spark等常见库的功能和用法\r\n- 介绍各种常见任务的机器学习应用,如基于数据库的预测预报、购物篮分析、图像识别、行为识别、文本分析等\r\n- 在线支持网站提供书中所有示例代码以及其他入门资料:http://machine-learning-in-java.com', 1);
INSERT INTO `book` VALUES (7, '码农·进击的Java(第16期)', '图灵社区出品', '图灵出版社', '2015-01-21', 29.0, 183, 'java07.jpg', 'IEEE Spectrum评出的2014年十大语言,Java依然稳坐第一。虽然每个程序员几乎都对Java有着无尽的怨言,但是事实证明,作为一个工具Java仍然是最“好用”的。', 1);
INSERT INTO `book` VALUES (8, 'Spring Boot实战', 'Craig Walls', '清华大学出版社', '2016-09-05', 59.0, 224, 'java08.jpg', 'Craig Walls的著作正是Spring的完美缩影。Spring经过了几年的发展,技术日臻成熟,让编程者学习负担持续减轻,不再需要掌握那么多知识就可以写出有趣的程序。本书堪称Spring Boot的完美指南,面面俱到地介绍了Spring Boot特性。Spring最新的发展也都被Craig精进了此书中。浩瀚书海又迎来了一本好书,出自一位大师级作者,关于一门伟大的技术。隆重推荐给你!', 1);
INSERT INTO `book` VALUES (15, '程序员的算法趣题', '增井敏克', '人民出版社', '2017-07-25', 55.0, 312, 'algorithm01.jpg', '本书通过谜题式算法解谜,可有效训练数学思维、算法思维,\r\n如同锻炼大脑的趣味体操,程序员、推理解谜爱好者都会沉浸\r\n其中,找到乐趣。', 3);
INSERT INTO `book` VALUES (16, '算法新解', '刘新宇', '图灵出版社', '2016-12-20', 99.0, 592, 'algorithm02.jpg', '《算法新解》七年磨一剑,作者笔耕不辍,几年来常在TopLanguage邮件列表中放出让大家校对,在程序书泛滥的这个时代尤显难能可贵。书中包含大量插图和公式,又结合C++、Haskell、Python、Scheme等多种编程语言实现,命令式、函数式兼顾,准确细致地描述了大量基本算法和习题。', 3);
INSERT INTO `book` VALUES (17, '流畅的Python', 'Luciano Ramalho', '人民出版社', '2017-05-08', 99.9, 600, 'python01.jpg', '本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、Alex Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python 2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。 ', 2);
INSERT INTO `book` VALUES (18, 'Python机器学习经典实例', 'Prateek Joshi', '新华出版社', '2017-08-17', 59.0, 244, 'python02.jpg', '用最火的Python语言、通过各种各样的机器学习算法来解决实际问题!\r\n书中介绍的主要问题如下。\r\n- 探索分类分析算法并将其应用于收入等级评估问题\r\n- 使用预测建模并将其应用到实际问题中\r\n- 了解如何使用无监督学习来执行市场细分\r\n- 探索数据可视化技术以多种方式与数据进行交互\r\n-了解如何构建推荐引擎\r\n', 2);
INSERT INTO `book` VALUES (19, 'Python数据科学手册', 'Jake VanderPlas', '青年出版社', '2018-01-30', 99.9, 448, 'python03.jpg', 'Python语言拥有大量可用于存储、操作和洞察数据的程序库,已然成为深受数据科学研究人员推崇的工具。本书以IPython、NumPy、Pandas、Matplotlib和Scikit-Learn这5个能完成数据科学大部分工作的基础工具为主,从实战角度出发,讲授如何清洗和可视化数据、如何用数据建立各种统计学或机器学习模型等常见数据科学任务,旨在让各领域与数据处理相关的工作人员具备发现问题、解决问题的能力。\r\n', 2);
INSERT INTO `book` VALUES (20, 'Python数据科学入门', 'Dmitry Zinoviev', '图灵出版社', '2017-11-08', 49.0, 145, 'python04.jpg', '- 不同类型文本数据的获取、清洗、组织和可视化\r\n- 如何用NumPy和Pandas模块处理数值数据\r\n- 探索用MySQL和MongoDB配置、填充、查询数据\r\n- 网络创建、度量和分析\r\n- 概率与统计以及机器学习的相关基本概念\r\n', 2);
INSERT INTO `book` VALUES (21, 'Python性能分析与优化', 'Fernando Doglio', '人民出版社', '2016-06-16', 45.0, 192, 'python05.jpg', '本书从基本的概念开始,循序渐进地介绍高级的优化主题。首先介绍了Python的主流性能分析器,以及用于帮助理解性能分析结果的可视化工具。然后介绍了通用的性能优化方法和专门针对Python的性能优化方法,带你浏览该语言的主要结构,让你只需做一点改变,即可迅速改善代码的性能。最后介绍了一些专门用于数据处理的程序库,教你如何正确地使用它们以获得最佳性能。\r\n', 2);
INSERT INTO `book` VALUES (22, '征服C指针', '前橋和弥', '清华大学出版社', '2013-02-26', 49.0, 264, 'c01.jpg', 'C程序员必读经典\r\n原版畅销11年\r\n“毒舌程序员”为你揭开指针的真实面纱\r\n', 4);
INSERT INTO `book` VALUES (23, '明解C语言:中级篇', '柴田望洋', '中国人民大学出版社', '2017-09-14', 89.0, 334, 'c02.jpg', '畅销书《明解C语言》第2弹,C语言进阶不二之选!\r\n111段代码+152幅图表,图文并茂,讲解清晰易懂。\r\n10个有趣的游戏程序,让你在快乐编程中学会实用技巧。\r\n双色印刷,版式赏心悦目。\r\n本书是日本超受欢迎的C语言教程,荣获日本工学教育协会著作奖,原版系列累计畅销超100万册!\r\n', 4);
INSERT INTO `book` VALUES (24, 'C语言详解(第6版)', 'Jeri R.Hanly', '人民教育出版社', '2010-03-15', 79.0, 558, 'c03.jpg', '本书是C语言的经典教材。它不仅深入浅出地讲述了实际开发中最需要的C语言基础知识,还充分介绍了动态数据结构和多进程等高级内容,而且同时阐述了程序设计思想。\r\n', 4);
INSERT INTO `book` VALUES (25, 'Linux shell脚本编程入门', '金泰龙', '人民教育出版社', '2014-09-18', 89.0, 496, 'linux01.jpg', '* 本书涵盖了Linux学习中必知的shell(Bourne shell、Bash shell)指令和Linux全局系统要素。\r\n* 本书包括了Linux服务器和嵌入式Linux中必须掌握的基础知识。\r\n* 本书通过对Linux服务器运行的核心——shell脚本编程的讲解和举例,帮助读者提高技术水平,成为善于思考的管理员、程序员。\r\n', 6);
INSERT INTO `book` VALUES (26, 'Linux/Unix设计思想', 'Mike Gancarz', '中国人民大学出版社', '2012-03-30', 39.0, 192, 'linux02.jpg', '剖析Linux/Unix制胜之道\r\n全新阐释开源哲学\r\nJon ”maddog” Hall作序推荐', 6);
INSERT INTO `book` VALUES (27, 'Linux命令速查手册', 'Scott Granneman ', '清华大学出版社', '2009-09-29', 29.0, 336, 'linux03.jpg', '要想真正精通Linux,并成为一名高手,必须掌握Linux命令。本书涵盖了Linux 命令的基础知识、文件管理命令、资料查询命令、系统管理命令、网络配置命令和网络服务命令等内容,并用翔实的例子演示了每个命令的使用方法。本书篇幅短小,内容简洁实用,易于查询,书中提供的代码和命令语法可以快速用于Linux操作系统和开发环境。\r\n', 6);
INSERT INTO `book` VALUES (28, 'JavaScript修炼之道', 'Christophe Porteneuv', '北京大学出版社  ', '2011-11-07', 29.0, 132, 'js04.jpg', 'JavaScript已无处不在。在当今纷繁复杂的网络世界中,它是不可或缺的组成部分。然而,即便对有经验的开发人员而言,JavaScript的体系都像难以穿越的生态环境系统。为此,本书以有别于一般教程的任务驱动方式来组织,围绕35个必会的关键JavaScript任务进行论述,并针对常见任务提出了一些新的开发方法,再加上本书独特的左页原理右页代码的编排方式,使你在阅读过程中快速地获得提升。\r\n\r\n', 5);
INSERT INTO `book` VALUES (29, 'JavaScript程序设计', 'Ray Toal', '中国人民大学出版社', '2016-04-11', 89.0, 380, 'js02.jpg', 'JavaScript是Web开发和网页设计的必备技术之一,也是一门优秀的教学语言,非常适合初涉计算机科学领域的学生学习。本书是专门为计算机编程入门课程设计的,它以一种现代化的方式向学生们介绍了计算机科学与编程,并提供了真实案例研究和大量练习。', 5);
INSERT INTO `book` VALUES (30, 'JavaScript设计模式与开发实践', '曾探', '清华大学出版社', '2015-05-15', 59.0, 312, 'js03.jpg', '腾讯前端Alloy Team团队出品,资深前端工程师曾探力作\r\n全面涵盖专门针对JavaScript的16个设计模式\r\n深入剖析面向对象设计原则、面向对象编程技巧及代码重构\r\n', 5);
INSERT INTO `book` VALUES (31, '同构JavaScript应用开发', 'Jason Strimpe', '清华大学出版社', '2017-10-19', 49.0, 159, 'js01.jpg', '本书的主要目的是为同构JavaScript的实现提供基础知识,并帮助读者理解业界现有的同构JavaScript解决方案,在实际判断同构JavaScript是否为可行的解决方案时能够作出最明智的选择,避免你“重复造轮子”。具体内容:第一部分描绘不同种类的同构JavaScript的轮廓,第二部分介绍关键概念,第三部分提供业界同行的解决方案案例。\r\n', 5);
INSERT INTO `book` VALUES (32, '前方的路 [预售]', '阮一峰', '人民教育出版社', '2017-05-15', 49.0, 360, 'zhishu01.jpg', '深刻的好奇心,善于考据的思维方式,对一切美好事物及感情充满向往……作者广泛涉猎,善于思考,勤于总结,并且乐于分享:将自己从一本书、一部电影或者一段经历中所得的感受和思考,都发表在了2003年开通的博客上。十余年累积的1500余篇博文,书写了各种庞杂的知识,理性且不乏人文关怀。\r\n\r\n', 7);
INSERT INTO `book` VALUES (33, '未来世界的幸存者 [预售]', '阮一峰 ', '人民教育出版社', '2017-06-15', 39.0, 168, 'zhishu02.jpg', '机器人、自动化、人工智能正变得比人类更强大\r\n技术变革导致人类社会重构\r\n在可预见的未来,技术终将淘汰人类\r\n世界正剧烈变化,我们该何去何从\r\n', 7);
INSERT INTO `book` VALUES (34, '简约至上:交互式设计四策略[预售]', '贾尔斯•科尔伯恩', '人民教育出版社', '2017-06-26', 59.0, 232, 'zhishu03.jpg', '追求简单易用是人类的本性,简单易用始终是赢得用户的关键,并决定了产品寿命。本书作者贾尔斯•科尔伯恩依托20多年交互式设计的探索与实践,提出了合理删除、分层组织、适时隐藏和巧妙转移这4个达成简约至上的策略,讲述了为什么应该站在主流用户一边,以及如何从他们的真实需求和期望出发,简化设计,提升易用性,创造出卓尔不群、历久弥新的用户体验。\r\n', 7);
-- ----------------------------
-- Table structure for cart
-- ----------------------------
DROP TABLE IF EXISTS `cart`;
CREATE TABLE `cart`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `count` int(5) NOT NULL,
  `price` double(3, 1) NOT NULL,
  `date` date NOT NULL,
  `orderman` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of cart
-- ----------------------------
INSERT INTO `cart` VALUES (24, 'Python数据科学手册', 1, 99.9, '2021-12-02', '1');
INSERT INTO `cart` VALUES (26, 'Python数据科学手册', 1, 99.9, '2021-12-02', '1');
INSERT INTO `cart` VALUES (27, '程序员的算法趣题', 1, 55.0, '2021-12-02', 'user');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', 'admin');
INSERT INTO `user` VALUES (2, '1', '1');
INSERT INTO `user` VALUES (3, 'user', 'user');
SET FOREIGN_KEY_CHECKS = 1;


二、系统展示


1.首页展示


4ad1c432d6804492b33dcbf323b9881d.jpg


2.系统注册


a99fd3d1479241daa8e552d7f6c75124.jpg


3.系统登录


fdae085819bb4ad3a49758720c66fc78.jpg


4.登录首页


image.jpeg



5.书籍查看


b49deb5fa5c44125a9e77d92d7541a40.jpg


6.书籍明细


b3825a0bae8f482cbbe9a44600741308.jpg


7.购物车明细


01ebb88af64e4b9680cd808ffa03ef66.jpg


三、部分代码


LoginController

package com.bookstore.controller;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.bookstore.domain.User;
import com.bookstore.service.LoginService;
@Controller
public class LoginController {
    //授权服务层
    @Autowired
    private LoginService loginService;
    //跳转到登录页面
    @RequestMapping("tologin")
    public ModelAndView tologin() {
        ModelAndView mv = new ModelAndView("login");
        return mv;
    }
    //登录操作
    @RequestMapping(value = "login", method = RequestMethod.POST)
    public ModelAndView login(String username, String password, HttpSession session) {
        ModelAndView mv;
        User user = loginService.login(username, password);//执行登录操作,并将登录对象返回
        if (user != null) {//判断对象是否存在
            //不存在就跳往主页面,并设置对象的会话
            mv = new ModelAndView("redirect:main");
            session.setAttribute("user", user);
        } else {
            //存在:就跳到登录页面重新登陆
            mv = new ModelAndView("redirect:tologin");
        }
        return mv;
    }
}

MainController

package com.bookstore.controller;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.bookstore.domain.Book;
import com.bookstore.domain.Cart;
import com.bookstore.service.BookService;
import com.bookstore.service.CartService;
@Controller
public class MainController {
    //授权服务层
    @Autowired
    private BookService bookService;
    @Autowired
    private CartService cartService;
    //跳往主页面
    @RequestMapping("main")
    public ModelAndView main() {
        List<Book> bookList = bookService.getAllNewBooks();//查询最新的书籍(取前12本)
        ModelAndView mv = new ModelAndView("main");
        mv.addObject("bookList", bookList);//将数据传递到前台页面
        return mv;
    }
    //查询得到所有的书籍
    @RequestMapping("allbook")
    public ModelAndView allbook() {
        List<Book> bookList = bookService.getAllBooks();//调用服务层方法得到所有书籍用List结果集存起来
        ModelAndView mv = new ModelAndView("main");
        mv.addObject("bookList", bookList);//将List集合返回给前端页面,进行呈现
        return mv;
    }
    //退出登录
    @RequestMapping("cancel")
    public ModelAndView cancel(HttpSession session) {
        session.removeAttribute("user");//销毁用户登录的会话
        ModelAndView mv = new ModelAndView("redirect:main");//重定向到主页面
        return mv;
    }
    //按类型查询书籍(type传递过来的分类参数)
    @RequestMapping("typebook")
    public ModelAndView typebook(int type) {
        List<Book> bookList = bookService.getBooksByBooktype(type);//调用服务层方法按分类参数查询不同种类的书籍(例如Java,type=1)
        ModelAndView mv = new ModelAndView("main");
        mv.addObject("bookList", bookList);//将数据传递到前台页面
        return mv;
    }
    //跳转到书籍页面,根据书籍的id来判断是选中的那本书进行跳转,并查询对应的书籍数据进行显示数据
    @RequestMapping("tobook")
    public ModelAndView tobook(int id) {
        Book book = bookService.getBookById(id);//调用服务层方法,通过书籍id查询出选中书的属性
        ModelAndView mv = new ModelAndView("book");
        mv.addObject("book", book);//将数据传递到前台页面
        return mv;
    }
    //选好书籍数量,添加到购物车
    @RequestMapping(value = "incart", method = RequestMethod.POST)
    public ModelAndView incart(Cart cart, HttpSession session) {
        ModelAndView mv = null;
        if (session.getAttribute("user") == null) {//通过判断会话中是否有用户来进行不同的操作
            //用户不是登录状态跳转到登录界面,进行登录操作
            mv = new ModelAndView("redirect:tologin");
        } else {
            //用户是登录状态,直接调用服务层方法把购物记录添加到数据库
            int n = cartService.incart(cart, session);
            //并通过返回值n来判断添加时候成功,成功就跳转到购物车页面
            if (n != 0) {
                mv = new ModelAndView("redirect:tocart");//从定向跳转到购物车
            }
        }
        return mv;
    }
    //跳转到购物车页面
    @RequestMapping("tocart")
    public ModelAndView tocart(HttpSession session) {
        ModelAndView mv;
        if (session.getAttribute("user") != null) {//判断用户是否登录
            mv = new ModelAndView("cart");//登录状态下,跳转到购物车页面
            List<Cart> cartList = cartService.getAllOrders(session);//查询出来的购物车记录保存到List集合里面
            mv.addObject("cartList", cartList);//将数据传递到前台页面
        } else {
            mv = new ModelAndView("redirect:tologin");//不是登录状态下,跳转到登录页面
        }
        return mv;
    }
    //通过购物记录id删除这条记录
    @RequestMapping(value = "cancelcart", method = RequestMethod.GET)
    public ModelAndView cancelcart(int id) {//得到选中记录的id
        ModelAndView mv = null;
        int n = cartService.deleteCartById(id);//调用服务层进行删除操作,并返回n
        if (n != 0) {//n不为0,说明删除成功
            mv = new ModelAndView("redirect:tocart");//重定向到购物车页面,进行刷新显示
        }
        return mv;
    }
}

RegisterController

package com.bookstore.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.bookstore.domain.User;
import com.bookstore.service.RegisterService;
@Controller
public class RegisterController {
    //授权服务层
    @Autowired
    private RegisterService registerService;
    //跳转到注册页面
    @RequestMapping("toregister")
    public ModelAndView toregister() {
        ModelAndView mv = new ModelAndView("register");//跳转到注册页面,没有数据读取,就单纯的跳转
        return mv;
    }
    //进行注册操作
    @RequestMapping(value = "register", method = RequestMethod.POST)
    public ModelAndView register(User user) {//获取页面post提交的参数,如果页面提交的参数和实体类User定义的参数一样,可以直接写User对象接受
        ModelAndView mv;
        int m = registerService.getUserByNameAndPwd(user);//通过user对象的用户名和密码,调用服务层方法去查询这个用户时候已经存在
        if (m == 0) {//返回的m等于0,表示用户不存在
            int n = registerService.register(user);//调用服务层方法,进行添加用户到数据库
            if (n != 0) {//n不等0,表示添加成功,成功了就行跳转到登录页面
                mv = new ModelAndView("redirect:tologin");
            } else {//n等于0,表示添加失败,重新跳转到注册页面,进行重新注册
                mv = new ModelAndView("toregister");
            }
        } else {//m不等于0,表示用户存在,直接重定向到登录页面,进行登录操作
            mv = new ModelAndView("redirect:tologin");
        }
        return mv;
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com</groupId>
    <artifactId>bookstore</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>bookstore Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>
    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <!-- Spring AOP dependency -->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>
        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>
        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- mybatis and Mysql -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.2</version>
        </dependency>
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.9</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>BookStore</finalName>
        <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>


四、其他


1.更多系统


Java+JSP系统系列实现


Java+JSP实现学生图书管理系统


Java+JSP实现学生信息管理系统


Java+JSP实现用户信息管理系统


Java+Servlet系统系列实现

Java+Servlet+JSP实现航空订票系统


Java+Servlet+JSP实现新闻发布系统


Java+Servlet+JSP学生宿舍管理系统


Java+Servlet+JSP实现图书管理系统


Java+Servlet+JSP实现停车场管理系统


Java+Servlet+JSP实现房屋租赁管理系统


Java+Servlet+JSP实现学生信息管理系统


Java+Servlet+JSP实现学生选课管理系统


Java+Servlet+JSP实现宠物诊所管理系统


Java+Servlet+JSP实现学生成绩管理系统-1


Java+Servlet+JSP实现学生成绩管理系统-2


Java+SSM系统系列实现


Java+SSM+JSP实现网上考试系统


Java+SSM+JSP实现宠物商城系统


Java+SSM+Layui实现学生成绩管理系统


Java+SSM+Bootstrap实现学生信息管理系统


Java+SSH系统系列实现


Java+SSH+JSP实现在线考试系统


Java+SSH+JSP实现医院在线挂号系统


Java+Springboot系统系列实现


Java+Springboot+H-ui+Maven实现营销管理系统


Java+Springboot+Bootstrap+Maven实现网上商城系统


Java+Springboot+Bootstrap+Maven实现景区旅游管理系统


1.更多JavaWeb系统请关注专栏。


https://blog.csdn.net/helongqiang/category_10020130.html

https://blog.csdn.net/helongqiang/category_10020130.html


2.更多JavaSwing系统请关注专栏。


https://blog.csdn.net/helongqiang/category_6229101.html

https://blog.csdn.net/helongqiang/category_6229101.html


2.源码下载


Java+SSM+Maven+Mysql+Bootstrap实现网上书城系统


3.备注


如有侵权请联系我删除。


4.支持博主


如果您觉得此文对您有帮助,请点赞加关注加收藏。祝您生活愉快!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
20天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
1月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
86 3
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
37 1
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
2月前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
83 1
|
2月前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
61 1
|
2月前
|
Java 关系型数据库 API
介绍一款Java开发的企业接口管理系统和开放平台
YesApi接口管理平台Java版,基于Spring Boot、Vue.js等技术,提供API接口的快速研发、管理、开放及收费等功能,支持多数据库、Docker部署,适用于企业级PaaS和SaaS平台的二次开发与搭建。
|
2月前
|
Java 关系型数据库 MySQL
基于Java的学生成绩管理系统/学生信息管理系统
基于Java的学生成绩管理系统/学生信息管理系统
71 2

推荐镜像

更多
下一篇
DataWorks