【图书管理系统】Springboot +JPA+thymeleaf+MySQL

本文介绍了使用Springboot、JPA和Thymeleaf开发图书管理系统的步骤,涵盖系统设计、页面展示及功能实现,包括增删改查、分页和按作者查询等功能。
摘要由CSDN通过智能技术生成

目 录

前言

一、Springboot介绍

二、系统设计步骤

1.系统开发第一步:

2.系统开发第二步:

3.系统开发第三步:

4.系统开发第四步:

5.系统开发第五步:

三、页面展示

1.首页

2.添加页

3.更新页

4.查询页

四、学习情况总结


前言

在开始系统设计和开发前,需要先明确系统的要求和目标,本次设计的是一个图书信息管理系统,图书信息包含书名、作者、出版社、图书编号、图书类型、价格等;对系统的功能设计有增删改查,以及分页和排序。

一、Springboot介绍

在mvc(Model-View-Controller)架构中,springboot具有五个基本层:

  1. 控制器层(Controller Layer):控制器层负责处理外部请求,并协调其他层的工作。
  2. 服务层(Service Layer):服务层主要负责实现业务逻辑。
  3. 数据访问层(Data Access Layer):数据访问层负责与数据库或其他数据存储系统进行交互,执行数据读取、写入和更新等操作。
  4. 实体类层(Entity Layer):实体类层包含与数据库表相对应的实体类。
  5. 视图层(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/{
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值