返回
jQuery EasyUI读书管理系统构建指南
前端
2022-12-19 17:23:02
书籍管理系统:使用 Java EE 技术构建一个功能齐全的应用程序
简介
对于任何图书馆或书店来说,一个高效且用户友好的书籍管理系统都是必不可少的。使用 Java EE 技术,可以构建一个功能强大的应用程序,满足所有书籍管理需求,包括添加、编辑和删除书籍,以及管理书籍类别。本教程将逐步指导您完成创建一个这样的系统。
准备工作
在开始构建系统之前,需要准备以下内容:
- Java 开发环境(JDK)
- 集成开发环境(IDE),例如 Eclipse 或 IntelliJ IDEA
- 数据库管理系统(DBMS),例如 MySQL 或 PostgreSQL
- Web 容器,例如 Apache Tomcat
数据库设计
系统需要两个表:books
表和 categories
表。
books
表:
字段 | 数据类型 | 约束 | 注释 |
---|---|---|---|
id | int | 主键 | 书籍 ID |
title | varchar(255) | 非空 | 书籍标题 |
author | varchar(255) | 可空 | 书籍作者 |
category_id | int | 外键 | 书籍类别 ID |
price | decimal(10, 2) | 可空 | 书籍价格 |
stock | int | 可空 | 书籍库存 |
description | text | 可空 | 书籍 |
categories
表:
字段 | 数据类型 | 约束 | 注释 |
---|---|---|---|
id | int | 主键 | 类别 ID |
name | varchar(255) | 非空 | 类别名称 |
页面设计
系统需要两个页面:
- bookList.jsp :用于显示书籍列表和提供添加、编辑和删除书籍的选项。
- bookList.js :包含实现上述功能的 JavaScript 代码。
bookList.jsp:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/bookList.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>书籍管理</h1>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
<table id="bookList" class="table table-bordered table-hover">
<thead>
<tr>
<th>ID</th>
<th>标题</th>
<th>作者</th>
<th>类别</th>
<th>价格</th>
<th>库存</th>
<th></th>
<th colspan="3">操作</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>
bookList.js:
$(document).ready(function() {
$('#bookList').DataTable({
"ajax": "bookList.do",
"columns": [
{ "data": "id" },
{ "data": "title" },
{ "data": "author" },
{ "data": "category.name" },
{ "data": "price" },
{ "data": "stock" },
{ "data": "description" },
{
"data": null,
"defaultContent": "<button class='btn btn-primary' onclick='editBook(this)'>编辑</button>"
},
{
"data": null,
"defaultContent": "<button class='btn btn-danger' onclick='deleteBook(this)'>删除</button>"
}
]
});
});
function addBook() {
$.ajax({
url: "addBook.do",
type: "POST",
data: $('#addBookForm').serialize(),
success: function(result) {
if (result.success) {
window.location.reload();
} else {
alert(result.msg);
}
}
});
}
function editBook(btn) {
var row = $(btn).closest('tr');
var id = row.find('td:first-child').text();
$.ajax({
url: "editBook.do",
type: "GET",
data: { id: id },
success: function(result) {
if (result.success) {
var book = result.data;
$('#editBookForm #id').val(book.id);
$('#editBookForm #title').val(book.title);
$('#editBookForm #author').val(book.author);
$('#editBookForm #categoryId').val(book.category.id);
$('#editBookForm #price').val(book.price);
$('#editBookForm #stock').val(book.stock);
$('#editBookForm #description').val(book.description);
$('#editBookModal').modal('show');
} else {
alert(result.msg);
}
}
});
}
function deleteBook(btn) {
var row = $(btn).closest('tr');
var id = row.find('td:first-child').text();
$.ajax({
url: "deleteBook.do",
type: "POST",
data: { id: id },
success: function(result) {
if (result.success) {
window.location.reload();
} else {
alert(result.msg);
}
}
});
}
代码示例
以下代码示例演示了如何使用 Java EE 技术实现上述功能:
BookService.java:
import java.util.List;
public interface BookService {
List<Book> findAll();
Book findById(Long id);
void save(Book book);
void delete(Long id);
}
BookServiceImpl.java:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookRepository bookRepository;
@Override
public List<Book> findAll() {
return bookRepository.findAll();
}
@Override
public Book findById(Long id) {
return bookRepository.findById(id).orElse(null);
}
@Override
public void save(Book book) {
bookRepository.save(book);
}
@Override
public void delete(Long id) {
bookRepository.deleteById(id);
}
}
BookController.java:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/books")
public String showBooks(Model model) {
List<Book> books = bookService.findAll();
model.addAttribute("books", books);
return "books";
}
@GetMapping("/books/new")
public String showNewBookForm(Model model) {
Book book = new Book();
model.addAttribute("book", book);
return "book-form";
}
@PostMapping("/books")
public String saveBook(@ModelAttribute("book") Book book) {
bookService.save(book);
return "redirect:/books";
}
@GetMapping("/books/{id}/edit")
public String showEditBookForm(@PathVariable("id") Long id, Model model) {
Book book = bookService.findById(id);
model.addAttribute("book", book);
return "book-form";
}
@PostMapping("/books/{id}")
public String updateBook(@PathVariable("id") Long id, @ModelAttribute("book") Book book) {
Book existingBook = bookService.findById(id);
existingBook.setTitle(book.getTitle());
existingBook.setAuthor(book.getAuthor