图书管理系统(3)修改图书接口
文章目录
- 图书管理系统(3)修改图书接口
-
- 观前提醒:
-
- 无Mybatis版本获取:
- [基于 Mybatis版本 的获取:](#基于 Mybatis版本 的获取:)
- 目录结构:
- 个人建议:
- [1. 后端代码](#1. 后端代码)
-
- [1.1 根据id,查询图书接口](#1.1 根据id,查询图书接口)
- [1.2 修改图书接口](#1.2 修改图书接口)
- 2.前端代码:
- [3. 总结:](#3. 总结:)
观前提醒:
这个图书管理系统,非常的简陋,仅作为练习使用。不建议大家使用我介绍的 图书管理系统 ,去作为 课程设计。
如果你是第一次点击这篇博客的,需要你将我 图书管理系统 的博客列表中,从这篇开始看:
图书管理系统(1)项目准备,用户登录接口,添加图书接口
无Mybatis版本获取:
这个 图书管理系统 的实现,需要你从我的 gitee上,将 无Mybatis版本 的图书管理系统源代码下载下来。
gitee链接:https://gitee.com/mrbgvhbhjv/java-ee-course/tree/master/后端代码/springboot_bookManage_System

基于 Mybatis版本 的获取:
如果你想直接获取 基于 Mybatis 完全实现了增删查改功能的图书管理系统,就从我的 gitee 上面获取,下载源代码。
gitee链接:https://gitee.com/mrbgvhbhjv/java-ee-course/tree/master/后端代码/Book_System_20251107

目录结构:
以防大家会乱,或者我博客写的不详细,各种类的存放位置,我放个目录结构在这里:


个人建议:
这篇博客的代码,建议自己敲一下。
跟着我的步骤,使用 无Mybatis版本 的图书管理系统源代码 ,一步一步的将代码实现出来。
这里使用的数据库是 MySQL。
图形化工具:Navicat
虽然,截止到 2026年,cursor,TRAE等 AI工具,能够一键编写代码,甚至一个系统。
但是,如果你不会基础知识,只会让 ai 生成代码,不会看代码,不会修改代码,代码运行报错,你不会解决问题等等。其实,你都不算是一个 Java开发者。
如果我们将 AI工具,对我们的工作效率提升,有巨大的帮助,它一定是一个乘法结算的结果。
你的基础开发能力 × AI工具效率 == 工作效率。
如果你的基础开发能力不行,约等于 0,那么,无论 AI工具效率多高,99倍也好,0 * 99 == 0
所以,只有将我们自己的基础开发能力提升了,使用 AI工具提升效率,才是事半功倍的效果。
1. 后端代码

这是一个图书修改页面,但是,这个页面不太合理。
不合理的点:修改图书,应该要把这个图书原本的信息,显示出来,我在根据我想修改的内容,去修改对应的数据。
也就是说,修改图书的页面,应该要先显示这本图书的原有信息,用户再去修改。
显示这本图书的原有信息,就是要查询某一本图书的信息,根据什么去查?
可以根据id,也可以根据书名。
这里,我使用 图书id 进行查询。
接口文档:
这里,我们应该设计两个接口:
- 根据id,查询图书接口
- 修改图书接口
1.1 根据id,查询图书接口
接口文档描述:

mapper层(数据持久层):
java
@Select("select * from book_info where `status` != 0 and id=#{bookId}")
BookInfo queryBookById(Integer bookId);
Service层(业务层):
java
public BookInfo queryBookById(Integer bookId) {
return bookInfoMapper.queryBookById(bookId);
}
Controller层:
java
@RequestMapping("/queryBookById")
public BookInfo queryBookById(Integer bookId){
return bookService.queryBookById(bookId);
}
这个接口,联合 修改图书接口 一起测试。
1.2 修改图书接口
接口文档描述:

mapper层(数据持久层):
更新逻辑相对较为复杂,用户 传递了哪些值,咱们更新哪些值,需要使用动态SQL 。
对于初学者,注解的方式拼接动态SQL不太友好,咱们 采用xml的方式来实现 。
set关键字,我们使用 set标签来表示。
如果某一个数据,如:书名,作者名,价格等,没有修改,我们的动态sql语句,就不传入对应的参数和赋值,所以,每一个字段都使用 if标签。
同时,update语句,一定要记得where条件 :根据 id 修改图书。
不加 where,就会把所有的记录都修改掉。
BookInfoMapper接口代码:
java
Integer updateBookInfo(BookInfo bookInfo);
BookInfoMapper.xml 文件代码:
java
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.book_system_20251107.book.mapper.BookInfoMapper">
<update id="updateBookInfo">
update book_info
<set>
<if test="bookName!=null">
book_name = #{bookName}
</if>
<if test="author!=null">
author = #{author}
</if>
<if test="count!=null">
count = #{count}
</if>
<if test="price!=null">
price = #{price}
</if>
<if test="publish!=null">
publish = #{publish}
</if>
<if test="status!=null">
status = #{status}
</if>
</set>
where id = #{id}
</update>
</mapper>
Service层(业务层):
java
public Integer updateBook(BookInfo bookInfo) {
return bookInfoMapper.updateBookInfo(bookInfo);
}
Controller层:
java
@RequestMapping("/updateBook")
public String updateBook(BookInfo bookInfo){
log.info("修改图书信息,bookInfo:" + bookInfo);
try {
bookService.updateBook(bookInfo);
return "";
}catch (Exception e){
log.error("修改图书发送异常,e:"+ e.getMessage());
return "修改图书发送异常";
}
// if-else 语句判断,并返回结果
// if (bookService.updateBook(bookInfo) == 1){
// return "";
// }else {
// return "修改图书发送异常";
// }
}
接口测试:
Postman:

测试效果:

2.前端代码:
后端人员,对前端代码,能够掌握其思路,逻辑即可,对代码完全手写,没有强制性要求。
book_update.html代码:
html
<script>
getBookInfo();
function getBookInfo ()
{
$.ajax({
type: "get",
url: "/book/queryBookById" + location.search,
success: function (bookInfo)
{
if (bookInfo != null) {
$("#bookId").val(bookInfo.id);
$("#bookName").val(bookInfo.bookName);
$("#bookAuthor").val(bookInfo.author);
$("#bookStock").val(bookInfo.count);
$("#bookPrice").val(bookInfo.price);
$("#bookPublisher").val(bookInfo.publish);
$("#bookStatus").val(bookInfo.status);
}
}
});
}
function update ()
{
$.ajax({
type: "post",
url: "/book/updateBook",
data: $("#updateBook").serialize(),
success: function (result)
{
if (result == "") {
alert('修改成功');
location.href = "book_list.html?currentPage=1";
} else {
alert(result);
}
}
});
// alert("更新成功");
// location.href = "book_list.html"
}
</script>
页面效果:


3. 总结:
可能会犯的错误:
- 后端接口(Controller)代码,接收前端参数的时候,一定要和方法名对应上,不然,接口就接收不到前端的参数。
- Sql语句的 ',' 一定要记得写上,不然 sql语句会报错的。无法修改数据。

最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!
下一篇博客:图书管理系统(4)删除图书接口