【JavaEE进阶】 图书管理系统开发日记——伍

news2024/7/6 17:42:16

文章目录

  • 🎋前言
  • 🌲需求分析
  • 🎄约定前后端交互接口
  • 🌳实现服务器代码
    • 🚩控制层
    • 🚩业务层
    • 🚩数据层
  • 🍃修改前端代码
  • ⭕总结

🎋前言

这次我们来实现图书管理系统的增加图书模块。

🌲需求分析

我们先来看一下需要达到的效果。

  1. 点击添加图书按钮,跳转以下界面
    在这里插入图片描述
  2. 添加图书时,若有图书信息没有填写,则会返回错误信息
    在这里插入图片描述
  3. 成功添加图书后跳转至图书列表页,并显示添加图书信息
    在这里插入图片描述
    在这里插入图片描述

🎄约定前后端交互接口

根据以上需求,我们可以约定以下接口

[请求]
/book/addBook
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
[参数]
bookName=图书1&author=作者1&count=23&price=36&publish=出版社1&status=1
[响应]
“” //失败信息, 成功时返回空字符串

我们约定,浏览器给服务器发送⼀个 /book/addBook 这样的HTTP请求,form表单的形式来提交数据服务器返回处理结果,返回""表⽰添加图书成功,否则,返回失败信息.

🌳实现服务器代码

服务器代码依旧采用分层设计的思想

🚩控制层

在这里插入图片描述
该层我们使用对象来接受from表单传回来的值。

并对传回来的值判断其合法性,若不合法返回"输⼊参数不合法, 请检查⼊参!"即可

合法则交给业务层进行处理,并进行异常处理。

代码实现如下:

@RequestMapping("/addBook")
public String addBook(BookInfo bookInfo) {
    log.info("添加图书:{}", bookInfo);
    if (!StringUtils.hasLength(bookInfo.getBookName())
            || !StringUtils.hasLength(bookInfo.getAuthor())
            || bookInfo.getCount()==null
            || bookInfo.getPrice()==null
            || !StringUtils.hasLength(bookInfo.getPublish())
            || bookInfo.getStatus() ==null
    ) {
        return "输⼊参数不合法, 请检查⼊参!";
    }
    try {
        bookService.addBook(bookInfo);
        return "";
    } catch (Exception e) {
        log.error("添加图书失败", e);
        return e.getMessage();
    }
}

🚩业务层

在这里插入图片描述
因为因为层代码较简单,直接调用数据层代码发回即可

代码实现如下:

public void addBook(BookInfo bookInfo) {   
    bookInfoMapper.insertBook(bookInfo);
}

🚩数据层

在这里插入图片描述
使用注解实现对数据库的操作即可

实现带代码如下:

@Insert("insert into book_info (book_name,author,count,price,publish,status) " +
        "values (#{bookName},#{author},#{count},#{price},#{publish},#{status})")
Integer insertBook(BookInfo bookInfo);

🍃修改前端代码

在这里插入图片描述

关于前端代码,我们只需要修改添加页代码即可。

代码修改部分如下:

function add() {
    $.ajax({
        type: "post",
        url: "/book/addBook",
        data: $("#addBook").serialize(),
        success: function (result) {
            if (result == "") {
                location.href = "book_list.html"
            } else {
                console.log(result);
                alert("添加失败:" + result);
            }
        },
        error: function (error) {
            console.log(error);
        }
    });
}

⭕总结

关于《【JavaEE进阶】 图书管理系统开发日记——伍》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT 应用中集成 Sentry

QT 应用中集成 Sentry QT应用中集成 SentrySentry SDK for C/C注册 Sentry 账号QT 应用中集成 Sentry触发 Crash 上报 QT应用中集成 Sentry Sentry 是一个开源的错误监控和日志记录平台,旨在帮助开发团队实时捕获、跟踪和解决软件应用程序中的错误和异常。它提供了…

qml中布局属性讲解

1.行布局&列布局:RowLayout&ColumnLayout RowLayout {id: layoutanchors.fill: parentspacing: 6Rectangle {color: tealLayout.fillWidth: trueLayout.minimumWidth: 50Layout.preferredWidth: 100Layout.maximumWidth: 300Layout.minimumHeight: 150Text {anchors.c…

基于nginx的虚拟主机配置

目录 一.基于不同ip的虚拟主机 二.基于不同端口的虚拟主机 三.基于不同域名的虚拟主机 一.基于不同ip的虚拟主机 1.关闭 SELinux和防火墙 2.在/data目录中创建三个目录,分别为nginx1、nginx2 和nginx3,具体名为: 3.分别在三个目录中创建index.html,并输入内容“…

C++程序在开机自启和定时器执行时遇到的问题和解决方法

遇到的错误如下: Camera is created.load vfvlog.[dll/so] failed for dll[/vfvlog.so] unexistedLoadDbgConfig, LoadFile fail, err:-3, errno: No such file or directoryqt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could not load the Qt platfo…

XSS haozi靶场通关笔记

XSS靶场地址:alert(1) 靶场的要求是输出一个内容为1的弹窗;这个靶场限制了输入位置只能是input code;而且浏览器发送内容时会自动进行url编码;所以重点考察的是代码的分析和基础payload构造;一切完成在当前页面&#…

毫米波雷达在汽车领域的原理、优势和未来趋势

1 毫米波雷达的原理 汽车引入毫米波雷达最初主要是为了实现盲点监测和定距巡航。毫米波实质上是电磁波,其频段位于无线电和可见光、红外线之间,频率范围为10GHz-200GHz。工作原理类似一般雷达,通过发射无线电波并接收回波,利用障…

Dynamo根据几何相交对墙体进行分组——群问题整理002

你好,这里是 BIM 的乐趣,我是九哥~ 近期给大家分享一些短平快的小教程,基本都是来自群里面常问的问题,不做过多的介绍了,直接上截图和代码。 问题:002 - 根据几何相交对墙体进行分组 今天分享的&#xff0…

C++后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发

C后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发 没错,我不能像大佬那样直接在Ubuntu上面用Vim手搓代码,只能在本地配置一下VSCode远程连接Ubuntu进行开发咯! 本篇主要是讲解了VSCode如何配置ssh连接Ubuntu,还有…

【文件增量备份系统】前端项目构建

文章目录 创建项目安装项目依赖引入element plus组件下载组件在main.js中使用组件测试 整合路由router下载组件创建路由管理器index.js使用路由App.vue上面使用 <router-view />测试 整合axios下载组件工具类axiosRequest.js工具类使用 创建项目 damwangrunqindeMBP dev…

PyTorch 2.2 中文官方教程(十四)

参数化教程 原文&#xff1a; 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Mario Lezcano 注意 点击这里下载完整示例代码 在本教程中&#xff0c;您将学习如何实现并使用此模式来对模型进行约束。这样做就像编写自己的nn.Module一样容易。 对深…

Mybatis基础教程及使用细节

本篇主要对Mybatis基础使用进行总结&#xff0c;包括Mybatis的基础操作&#xff0c;使用注解进行增删改查的练习&#xff1b;详细介绍xml映射文件配置过程并且使用xml映射文件进行动态sql语句进行条件查询&#xff1b;为了简化java开发提高效率&#xff0c;介绍一下依赖&#x…

树莓派5一键安装C++版本OpenCV

安装环境 本人当前的安装环境&#xff1a; 树莓派5Raspberry Pi os (64-bit) Debian12 Bookworm 镜像下载地址 我这里是将镜像安装好后直接安装opencv&#xff0c;如果不是刚安装好的镜像需要注意是否有openCV的python之类的安装过&#xff0c;不然可能出现编译错误 一、扩展内…

vue3+threejs+koa可视化项目——模型文件上传(第四步)

文章目录 ⭐前言&#x1f496;往期node系列文章&#x1f496;threejs系列相关文章&#x1f496;vue3threejs系列 ⭐koa后端文件上传(koa-body)&#x1f496;自动创建目录&#x1f496;自定义目录上传&#x1f496;apifox自测上传接口 ⭐vue3前端上传模型文件&#x1f496; axio…

echarts使用之饼图(四)

1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" cont…

latex multirow学习

今天搞了一晚上的这个multirow&#xff0c;总算弄出来了几个比较好的例子&#xff0c;主要是这个multirow的语法我没看懂&#xff0c;这个逻辑我是没理解&#xff0c;就很尴尬&#xff0c;一改就报错&#xff0c;只能先弄几个例子&#xff0c;自己慢慢试 \documentclass{artic…

k8s学习-Kubernetes的网络

Kubernetes作为编排引擎管理着分布在不同节点上的容器和Pod。Pod、Service、外部组件之间需要⼀种可靠的方找到彼此并进行通信&#xff0c;Kubernetes网络则负责提供这个保障。1.1 Kubernetes网络模型 Container-to-Container的网络 当Pod被调度到某个节点&#xff0c;Pod中的…

【Python】【完整代码】解析Excel 文件中的内容并检查是否包含某字符串,并返回判断结果

示例&#xff1a; 开发需求&#xff1a;解析Excel 文件中的内容并检查是否包含 "Fail" 字符&#xff0c;若没有则返回True&#xff0c;若有则返回False 实现代码&#xff1a; #!/usr/bin/env python3 # -*- encoding: utf-8 -*-File : check_excel_for_fail.py Ti…

后端程序员入门react笔记——react的生命周期(二)

React常用的钩子函数 constructor 这个函数我们太常见了&#xff0c;在初始化类的state的时候&#xff0c;或者初始化类的props的时候都会用到&#xff0c;就是一个类的构造函数。对后端人员来说很熟悉 constructor() {super();this.state {age: 18}}getDerivedStateFromPro…

【C++入门学习指南】:函数重载提升代码清晰度与灵活性

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、函数重载1.1 函数重载的概念1.2 函数重载的作用1.3 C支持函数重载的原理1.4 扩展 &…

如何写好论文——(15)如何写研究目标之实例讲解

写好研究目标一要有方向、二要有边界。 定边界的时候要有方法和结论。 下面的例子为目标的两种写法&#xff0c;第二种提供了更明确可以测量的目标。 下面的第二个例子更有方向性。第一个例子的本质是去验证一种假说&#xff0c;这种假说如果成立完全可以支撑第二种写法中的目…