目 录
前言
在开始系统设计和开发前,需要先明确系统的要求和目标,本次设计的是一个图书信息管理系统,图书信息包含书名、作者、出版社、图书编号、图书类型、价格等;对系统的功能设计有增删改查,以及分页和排序。
一、Springboot介绍
在mvc(Model-View-Controller)架构中,springboot具有五个基本层:
- 控制器层(Controller Layer):控制器层负责处理外部请求,并协调其他层的工作。
- 服务层(Service Layer):服务层主要负责实现业务逻辑。
- 数据访问层(Data Access Layer):数据访问层负责与数据库或其他数据存储系统进行交互,执行数据读取、写入和更新等操作。
- 实体类层(Entity Layer):实体类层包含与数据库表相对应的实体类。
- 视图层(View Layer):视图层主要负责用户界面的呈现和展示,通常是HTML、CSS和JavaScript等前端技术实现。
二、系统设计步骤
1.系统开发第一步:
创建一个book实体类,该类对应数据库中books表的信息,并注入无参构造、有参构造、get和set访问器、实体类的注解。具体代码如下:
2.系统开发第二步:
在数据访问层创建一个BookRepository接口并继承JpaRepository接口,实现增删改查功能;在BookRepository接口编写一个查询作者的方法,为前端以作者查询图书信息做准备,代码如下:
3.系统开发第三步:
在service层中创建一个BookService接口封装增删改查的方法:
public interface BookService {
//获取所有图书
List<Book> getAllBook();
//新增图书
void addBook(Book book);
//更新图书
void updateBook(Book book);
//获取指定id的图书
Book getBookById(long id);
//删除指定id的图书
void deleteBookById(long id);
//分页
Page<Book> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);
//获取指定的作者的图书
Book findByAuthor(String author);
}
然后再创建一个实现业务逻辑的类,实现增删改查以及分页、通过作者查询的的方法,代码如下:
@Service
public class BookServiceImpl implements BookService {
//注入BookRepository接口
@Autowired
private BookRepository bookRepository;
//获取所有图书
@Override
public List<Book> getAllBook() {
return bookRepository.findAll();
}
//新增图书
@Override
public void addBook(Book book) {
this.bookRepository.save(book);
}
//更新图书
@Override
public void updateBook(Book book) {
bookRepository.saveAndFlush(book);
}
//获取指定id的图书
@Override
public Book getBookById(long id) {
//调用数据访问层查找指定id的图书,返回Optional对象
Optional<Book> optional = bookRepository.findById(id);
Book book = null;
if (optional.isPresent()){ //如果指定的id存在
book = optional.get(); //从Optional对象中获取图书
}else { //否则提示找不到图书
throw new RuntimeException("找不到图书id :" + id);
}
return book;
}
//删除指定id的图书
@Override
public void deleteBookById(long id) {
this.bookRepository.deleteById(id);
}
//分页
@Override
public Page<Book> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
//设置排序参数,升序ASC;降序DESC
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
//根据页号/每页记录数/排序依据返回某指定页面数据
Pageable pageable = PageRequest.of(pageNo - 1,pageSize, sort);
return this.bookRepository.findAll(pageable);
}
//获取指定的作者
@Override
public Book findByAuthor(String author) {
return (Book) bookRepository.findByAuthor(author);
}
}
4.系统开发第四步:
在controller层调用服务层处理的业务逻辑,封装响应结果,与客户端交互,代码如下:
@Controller
public class BookController {
@Autowired
private BookService bookService;
//首页
@GetMapping("/")
public String index(Model model){
// List<Book> bookList = bookService.getAllBook();
// model.addAttribute("bookList",bookList);
// return "index";
return findPaginated(1,"name","asc", model);
}
//新增图书页
@GetMapping("/showNewBookForm")
public String showNewBookForm(Model model){
//创建模型属性来绑定表单数据
Book book = new Book();
model.addAttribute("book",book);
return "new_book";
}
//新增图书页
@PostMapping("/addBook")
public String addBook(@ModelAttribute("book") Book book){
//将图书保存到数据库
bookService.addBook(book);
return "redirect:/";
}
//更新图书信息页
@GetMapping("/updateBook/{