简单使用SpringMVC写一个图书管理系统的登入功能和图书展示功能 ...

打印 上一主题 下一主题

主题 681|帖子 681|积分 2043

准备好前端的代码


这里已经准备好了前端的代码,这里仅仅简单的先容登入功能,和展示图书列表的功能。
如图:

如上图所示,这里的前端代码还是比力多的,在这里我先容,login.html另有book_list.html这两个。

login.html

如代码:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Document</title>
  7.     <link rel="stylesheet" href="css/bootstrap.min.css">
  8.     <link rel="stylesheet" href="css/login.css">
  9.     <script type="text/javascript" src="js/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="container-login">
  13.     <div class="container-pic">
  14.         <img src="pic/computer.png" width="350px">
  15.     </div>
  16.     <div class="login-dialog">
  17.         <h3>登陆</h3>
  18.         <div class="row">
  19.             <span>用户名</span>
  20.             <input type="text" name="userName" id="userName" class="form-control">
  21.         </div>
  22.         <div class="row">
  23.             <span>密码</span>
  24.             <input type="password" name="password" id="password" class="form-control">
  25.         </div>
  26.         <div class="row">
  27.             <button type="button" class="btn btn-info btn-lg" onclick="login()">登录</button>
  28.         </div>
  29.     </div>
  30. </div>
  31. <script src="js/jquery.min.js"></script>
  32. <script>
  33.     function login() {
  34.         //前端参数校验省略
  35.         $.ajax({
  36.             url:"/user/login",
  37.             type: "post",
  38.             data: {
  39.                 userName: $("#userName").val(),
  40.                 password: $("#password").val()
  41.             },
  42.             success: function(result){
  43.                 if(result==""){
  44.                     //登录成功
  45.                     location.href = "book_list.html";
  46.                 }else{
  47.                     alert(result);
  48.                 }
  49.             }
  50.         });
  51.         // location.href = "book_list.html";
  52.     }
  53. </script>
  54. </body>
  55. </html>
复制代码
上述代码的核心在这一块,如图:

这里的代码是和后端做交互的,后端的url为/user/login ,哀求的类型为post哀求,然后转达数据,后端再返回效果,如果登入成功就跳转到,“book_list.html”的界面,展示图书。

book_list.html

如代码:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>图书列表展示</title>
  7.     <link rel="stylesheet" href="css/bootstrap.min.css">
  8.     <link rel="stylesheet" href="css/list.css">
  9.     <script type="text/javascript" src="js/jquery.min.js"></script>
  10.     <script type="text/javascript" src="js/bootstrap.min.js"></script>
  11.     <script src="js/jq-paginator.js"></script>
  12. </head>
  13. <body>
  14. <div class="bookContainer">
  15.     <h2>图书列表展示</h2>
  16.     <div class="navbar-justify-between">
  17.         <div>
  18.             <button class="btn btn-outline-info" type="button" onclick="location.href='book_add.html'">添加图书</button>
  19.             <button class="btn btn-outline-info" type="button" onclick="batchDelete()">批量删除</button>
  20.         </div>
  21.     </div>
  22.     <table>
  23.         <thead>
  24.         <tr>
  25.             <td>选择</td>
  26.             <td class="width100">图书ID</td>
  27.             <td>书名</td>
  28.             <td>作者</td>
  29.             <td>数量</td>
  30.             <td>定价</td>
  31.             <td>出版社</td>
  32.             <td>状态</td>
  33.             <td class="width200">操作</td>
  34.         </tr>
  35.         </thead>
  36.         <tbody>
  37.         <!-- <tr>
  38.             <td><input type="checkbox" name="selectBook" value="1" id="selectBook" class="book-select"></td>
  39.             <td>1</td>
  40.             <td>大秦帝国第一册</td>
  41.             <td>我是作者</td>
  42.             <td>23</td>
  43.             <td>33.00</td>
  44.             <td>北京出版社</td>
  45.             <td>可借阅</td>
  46.             <td>
  47.                 <div class="op">
  48.                     <a href="book_update.html?bookId=1">修改</a>
  49.                     <a href="javascript:void(0)" onclick="deleteBook(1)">删除</a>
  50.                 </div>
  51.             </td>
  52.         </tr> -->
  53.         </tbody>
  54.     </table>
  55.     <div class="demo">
  56.         <ul id="pageContainer" class="pagination justify-content-center"></ul>
  57.     </div>
  58.     <script>
  59.         getBookList();
  60.         function getBookList() {
  61.             $.ajax({
  62.                 type: "get",
  63.                 url: "/book/getList",
  64.                 success: function(books){
  65.                     if(books==null){
  66.                         return;
  67.                     }
  68.                     var finalHtml = "";
  69.                     for(var book of books){
  70.                         //拼接HTML
  71.                         finalHtml +='<tr>';
  72.                         finalHtml +='<td><input type="checkbox" name="selectBook" value="'+book.bookId+'" id="selectBook" class="book-select"></td>';
  73.                         finalHtml +='<td>'+book.bookId+'</td>';
  74.                         finalHtml +='<td>'+book.bookName+'</td>';
  75.                         finalHtml +='<td>'+book.author+'</td>';
  76.                         finalHtml +='<td>'+book.num+'</td>';
  77.                         finalHtml +='<td>'+book.price+'</td>';
  78.                         finalHtml +='<td>'+book.publishName+'</td>';
  79.                         finalHtml +='<td>'+book.stateCN+'</td>';
  80.                         finalHtml +='<td>';
  81.                         finalHtml +='<div class="op">';
  82.                         finalHtml +='<a href="book_update.html?bookId='+book.bookId+'">修改</a>';
  83.                         finalHtml +='<a href="javascript:void(0)" onclick="deleteBook('+book.bookId+')">删除</a>';
  84.                         finalHtml +='</div>';
  85.                         finalHtml +='</td></tr>';
  86.                     }
  87.                     $("tbody").html(finalHtml);
  88.                 }
  89.             });
  90.         }
  91.         //翻页信息
  92.         $("#pageContainer").jqPaginator({
  93.             totalCounts: 100, //总记录数
  94.             pageSize: 10,    //每页的个数
  95.             visiblePages: 5, //可视页数
  96.             currentPage: 1,  //当前页码
  97.             first: '<li class="page-item"><a class="page-link">首页</a></li>',
  98.             prev: '<li class="page-item"><a class="page-link" href="javascript:void(0);">上一页<\/a><\/li>',
  99.             next: '<li class="page-item"><a class="page-link" href="javascript:void(0);">下一页<\/a><\/li>',
  100.             last: '<li class="page-item"><a class="page-link" href="javascript:void(0);">最后一页<\/a><\/li>',
  101.             page: '<li class="page-item"><a class="page-link" href="javascript:void(0);">{{page}}<\/a><\/li>',
  102.             //页面初始化和页码点击时都会执行
  103.             onPageChange: function (page, type) {
  104.                 console.log("第"+page+"页, 类型:"+type);
  105.             }
  106.         });
  107.         function deleteBook(id) {
  108.             var isDelete = confirm("确认删除?");
  109.             if (isDelete) {
  110.                 //删除图书
  111.                 alert("删除成功");
  112.             }
  113.         }
  114.         function batchDelete() {
  115.             var isDelete = confirm("确认批量删除?");
  116.             if (isDelete) {
  117.                 //获取复选框的id
  118.                 var ids = [];
  119.                 $("input:checkbox[name='selectBook']:checked").each(function () {
  120.                     ids.push($(this).val());
  121.                 });
  122.                 console.log(ids);
  123.                 alert("批量删除成功");
  124.             }
  125.         }
  126.     </script>
  127. </div>
  128. </body>
  129. </html>
复制代码
上述代码,不做先容了,我是主要写后端的代码的,关于这篇文章,仅仅展示图书即可,没涉及到增删改查。

后端代码


第一步:我们就先准备好图书的实体类

如代码:
  1. package com.bite.springbook.model;
  2. import lombok.Data;
  3. import java.math.BigDecimal;
  4. @Data
  5. public class BookInfo {
  6.     private Integer bookId;
  7.     private String bookName;
  8.     private String author;
  9.     private Integer num;
  10.     private BigDecimal price;
  11.     private String publishName;
  12.     private Integer state; //1- 可借阅   2- 不可借阅
  13.     private String stateCN;
  14. }
复制代码
这里我们必要学习,@Data这个注解的作用,这个注解是lombok这个工具内里的,这里他会主动封装好get和set方法,还会重写toStirng方法。
以上就是实体的属性。

第二步:这里我们先写登入功能

如代码:
  1. package com.bite.springbook.controller;
  2. import jakarta.servlet.http.HttpSession;
  3. import org.springframework.util.StringUtils;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. @RequestMapping("/user")
  7. @RestController
  8. public class UserController {
  9.     @RequestMapping("/login")
  10.     public String login(String userName , String password , HttpSession session){
  11.         if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){
  12.             return "用户不能为空";
  13.         }
  14.         if(!"zhangsan".equals(userName) || !"123456".equals(password)){
  15.             return "用户或密码错误";
  16.         }
  17.         session.setAttribute("username" , userName);
  18.         return "";
  19.     }
  20. }
复制代码
如上述所述,这里我们用StringUntils的haslength方法,判定输入是否为空,这样可以节省代码量,然后判定用户是否输入错误,其次存储session信息,最后返回效果,和前端校验。
登入代码这些就结束了。

第三步:誊写图书的展示功能

1)controller层
如代码:
  1. package com.bite.springbook.controller;
  2. import com.bite.springbook.model.BookInfo;
  3. import com.bite.springbook.Service.BookService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.util.List;
  8. @RequestMapping("/book")
  9. @RestController
  10. public class BookController {
  11.     @Autowired
  12.     private BookService bookService;
  13.     @RequestMapping("/getList")
  14.     public List<BookInfo> getList(){
  15.         List<BookInfo> bookInfos = bookService.getList();
  16.         return bookInfos;
  17.     }
  18. }
复制代码
这里我们主要是和前端响应数据用的,controller层调用service层,service层是用于处理业务数据的,这里我们用到了,依赖注入的属性注入来获取service层的对象,如代码中的@Autowired注解。
2)service层
如代码:
  1. package com.bite.springbook.Service;
  2. import com.bite.springbook.dao.BookDao;
  3. import com.bite.springbook.model.BookInfo;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class BookService {
  9.     @Autowired
  10.     private BookDao bookDao;
  11.     public List<BookInfo> getList(){
  12.         List<BookInfo> bookInfos = bookDao.mockData();
  13.         for(BookInfo bookInfo : bookInfos){
  14.             if (bookInfo.getState()==1){
  15.                 bookInfo.setStateCN("可借阅");
  16.             }else {
  17.                 bookInfo.setStateCN("不可借阅");
  18.             }
  19.         }
  20.         return bookInfos;
  21.     }
  22. }
复制代码
如图这里通过调用dao层的数据,来举行处理,也用到了对属性注入依赖,在这里我们用到了@Service注解,为了把对象交给Spring管理,通过依赖注入就可以取到对象。
3)dao层
如代码:
  1. package com.bite.springbook.dao;
  2. import com.bite.springbook.model.BookInfo;
  3. import org.springframework.stereotype.Repository;
  4. import java.math.BigDecimal;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. @Repository
  8. public class BookDao {
  9.     public List<BookInfo> mockData() {
  10.         List<BookInfo> bookInfos = new ArrayList<>();
  11.         for (int i = 0; i < 15; i++) {
  12.             BookInfo bookInfo = new BookInfo();
  13.             bookInfo.setBookId(i);
  14.             bookInfo.setBookName("图书"+i);
  15.             bookInfo.setAuthor("作者"+i);
  16.             bookInfo.setNum(15*i+1);
  17.             bookInfo.setPrice(new BigDecimal(22*i+5-0.5*i));
  18.             bookInfo.setPublishName("出版社"+i);
  19.             bookInfo.setState(i%5==0?2:1);
  20.             bookInfos.add(bookInfo);
  21.         }
  22.         return bookInfos;
  23.     }
  24. }
复制代码
如图上述是主动生成的数据,到后面我会运用mybatis写一个完整的图书系统。这里的@Repository注解和service层的@Service作用一样。
如图运行效果:


等到后面,我会写一个完整的图书管理系统。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表