这里已经准备好了前端的代码,这里仅仅简单的介绍登入功能,和展示图书列表的功能。
如图:
如上图所示,这里的前端代码还是比较多的,在这里我介绍,login.html还有book_list.html这两个。
login.html
如代码:
Document
登陆
用户名 密码
上述代码的核心在这一块,如图:
这里的代码是和后端做交互的,后端的url为/user/login ,请求的类型为post请求,然后传递数据,后端再返回结果,如果登入成功就跳转到,“book_list.html”的界面,展示图书。
book_list.html
如代码:
图书列表展示 图书列表展示
选择 图书ID 书名 作者 数量 定价 出版社 状态 操作
上述代码,不做介绍了,我是主要写后端的代码的,关于这篇文章,仅仅展示图书即可,没涉及到增删改查。
第一步:我们就先准备好图书的实体类
如代码:
package com.bite.springbook.model; import lombok.Data; import java.math.BigDecimal; @Data public class BookInfo { private Integer bookId; private String bookName; private String author; private Integer num; private BigDecimal price; private String publishName; private Integer state; //1- 可借阅 2- 不可借阅 private String stateCN; }
这里我们需要学习,@Data这个注解的作用,这个注解是lombok这个工具里面的,这里他会自动封装好get和set方法,还会重写toStirng方法。
以上就是实体的属性。
第二步:这里我们先写登入功能
如代码:
package com.bite.springbook.controller; import jakarta.servlet.http.HttpSession; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/user") @RestController public class UserController { @RequestMapping("/login") public String login(String userName , String password , HttpSession session){ if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){ return "用户不能为空"; } if(!"zhangsan".equals(userName) || !"123456".equals(password)){ return "用户或密码错误"; } session.setAttribute("username" , userName); return ""; } }
如上述所述,这里我们用StringUntils的haslength方法,判断输入是否为空,这样可以节约代码量,然后判断用户是否输入错误,其次存储session信息,最后返回结果,和前端校验。
登入代码这些就结束了。
第三步:书写图书的展示功能
1)controller层
如代码:
package com.bite.springbook.controller; import com.bite.springbook.model.BookInfo; import com.bite.springbook.Service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RequestMapping("/book") @RestController public class BookController { @Autowired private BookService bookService; @RequestMapping("/getList") public List getList(){ List bookInfos = bookService.getList(); return bookInfos; } }
这里我们主要是和前端响应数据用的,controller层调用service层,service层是用于处理业务数据的,这里我们用到了,依赖注入的属性注入来获取service层的对象,如代码中的@Autowired注解。
2)service层
如代码:
package com.bite.springbook.Service; import com.bite.springbook.dao.BookDao; import com.bite.springbook.model.BookInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class BookService { @Autowired private BookDao bookDao; public List getList(){ List bookInfos = bookDao.mockData(); for(BookInfo bookInfo : bookInfos){ if (bookInfo.getState()==1){ bookInfo.setStateCN("可借阅"); }else { bookInfo.setStateCN("不可借阅"); } } return bookInfos; } }
如图这里通过调用dao层的数据,来进行处理,也用到了对属性注入依赖,在这里我们用到了@Service注解,为了把对象交给Spring管理,通过依赖注入就可以取到对象。
3)dao层
如代码:
package com.bite.springbook.dao; import com.bite.springbook.model.BookInfo; import org.springframework.stereotype.Repository; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Repository public class BookDao { public List mockData() { List bookInfos = new ArrayList<>(); for (int i = 0; i < 15; i++) { BookInfo bookInfo = new BookInfo(); bookInfo.setBookId(i); bookInfo.setBookName("图书"+i); bookInfo.setAuthor("作者"+i); bookInfo.setNum(15*i+1); bookInfo.setPrice(new BigDecimal(22*i+5-0.5*i)); bookInfo.setPublishName("出版社"+i); bookInfo.setState(i%5==0?2:1); bookInfos.add(bookInfo); } return bookInfos; } }
如图上述是自动生成的数据,到后面我会运用mybatis写一个完整的图书系统。这里的@Repository注解和service层的@Service作用一样。
如图运行结果:
等到后面,我会写一个完整的图书管理系统。