100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【JAVA项目实战】【图书管理系统】书籍管理功能【Servlet】+【JSP】+【MySql】+【Ajax】

【JAVA项目实战】【图书管理系统】书籍管理功能【Servlet】+【JSP】+【MySql】+【Ajax】

时间:2021-11-28 18:10:11

相关推荐

【JAVA项目实战】【图书管理系统】书籍管理功能【Servlet】+【JSP】+【MySql】+【Ajax】

🚀个人主页:欢迎访问Ali.s的首页

⏰ 最近更新:9月20日

⛽ Java框架学习系列:【Spring】【SpringMVC】【Mybatis】

🔥 Java项目实战系列:【飞机大战】【图书管理系统】

🍭 Java算法21天系列:【查找】【排序】【递归】

⛳ Java基础学习系列:【继承】【封装】【多态】

🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】

🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂

💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯

文章目录

前言一、需求分析二、功能实现1.Book实体的创建2.数据持久层接口3.业务逻辑层实现4.Controller控制层 三、功能测试总结

前言

这里是【JAVASE】项目实战的第六节课,前面完成了登录和注销功能,在未登录的状态下,无法访问数据信息。今天做的是书籍管理功能,使用【Servlet】【JSP】【MySql】【Ajax】来实现书籍的管理功能。

一、需求分析

在前面用户功能实现后,可以清楚的看到用户直接进入了后台的主界面,,通过登录模块来达到数据安全。进入系统后首先看到的是用户管理,接着就是书籍管理,书籍管理其实跟用户管理大同小异,主要也是增删改查的操作,有一点不同的是,书籍管理需要与后面的学生管理做绑定。

二、功能实现

dao层和service层中创建接口。这里与用户模块类似,首先完成前端页面的信息,然后进行后端的校验逻辑的判断,到层处理sql语句,需要准备Book实体类,便于关系的映射和值的获取与传递。

1.Book实体的创建

结合数据库字段信息,完成书籍实体类的创建,也可以使用相关工具创建,但是使用工具创建容易导致字段类型不匹配,刚开始做项目,建议手动写实体类,对每个字段的类型有一个基本的了解,还要注意自己手动添加下toString()方法。

import java.util.Date;import java.io.Serializable;/*** (TBook)实体类** @author Ali.S* @since -08-11 21:41:49*/public class Book implements Serializable {private static final long serialVersionUID = 429249063538036947L;/*** 书籍id*/private Integer id;/*** 书籍名称*/private String bookName;/*** 作者*/private String author;/*** 出版社*/private String publish;/*** 书籍编码*/private String isbn;/*** 书籍介绍*/private String introduction;/*** 书籍语言*/private String language;/*** 书籍售价*/private Double price;/*** 发布日期*/private Date pubdate;/*** 书架号*/private String pressmark;/*** 书籍状态 0 空闲 1借阅 2下架 3 其他*/private Integer state;/*** 删除状态 0 删除 1未删除*/private Integer isDeleted;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getPublish() {return publish;}public void setPublish(String publish) {this.publish = publish;}public String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}public String getIntroduction() {return introduction;}public void setIntroduction(String introduction) {this.introduction = introduction;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Date getPubdate() {return pubdate;}public void setPubdate(Date pubdate) {this.pubdate = pubdate;}public String getPressmark() {return pressmark;}public void setPressmark(String pressmark) {this.pressmark = pressmark;}public Integer getState() {return state;}public void setState(Integer state) {this.state = state;}public Integer getIsDeleted() {return isDeleted;}public void setIsDeleted(Integer isDeleted) {this.isDeleted = isDeleted;}@Overridepublic String toString() {return "Book{" +"id=" + id +", bookName='" + bookName + '\'' +", author='" + author + '\'' +", publish='" + publish + '\'' +", isbn='" + isbn + '\'' +", introduction='" + introduction + '\'' +", language='" + language + '\'' +", price=" + price +", pubdate=" + pubdate +", pressmark='" + pressmark + '\'' +", state=" + state +", isDeleted=" + isDeleted +'}';}}

2.数据持久层接口

创建数据持久层的接口与实现,并完成增删改查的相关方法,为业务逻辑层做准备。

public interface BookDao{public List<Book> list(Book book);public Integer saveBook(Book book);public Integer updateBook(Book book);public Integer deleteBook(Integer id);public Book queryBookById(Integer id);List<Book> queryBookState(int code);}

在完成接口的时候,在实现接口的类中完成相关的方法,注意添加和更新可以在同一个方法中,在具体的方法中通过Ajax是否拿到当前的数据的id作为判断标准,进而将两个功能进行单独的处理,这里是单独完成的,代码显得有些冗余,但是逻辑思路更加清晰。

public class BookDaoImpl implements BookDao {String sql;QueryRunner queryRunner;//查询图书@Overridepublic List<Book> list(Book book) {queryRunner = DBUtils.getQueryRunner();sql = "select * from t_book where is_deleted=?";try {return queryRunner.query(sql, new ResultSetHandler<List<Book>>() {@Overridepublic List<Book> handle(ResultSet resultSet) throws SQLException {List<Book> list = new ArrayList<>();while (resultSet.next()) {Book b = new Book();b.setId(resultSet.getInt("id"));b.setBookName(resultSet.getString("book_name"));b.setAuthor(resultSet.getString("author"));b.setPublish(resultSet.getString("publish"));b.setIsbn(resultSet.getString("isbn"));String introduction = resultSet.getString("introduction");if (introduction != null && !"".equals(introduction) && introduction.length() > 20) {introduction = resultSet.getString("introduction").substring(0, 20);b.setIntroduction(introduction + "...");} else {b.setIntroduction(introduction);}b.setLanguage(resultSet.getString("language"));b.setPrice(resultSet.getDouble("price"));b.setPubdate(resultSet.getDate("pubdate"));b.setPressmark(resultSet.getString("pressmark"));b.setIsDeleted(resultSet.getInt("is_deleted"));b.setState(resultSet.getInt("state"));list.add(b);}return list;}}, DelFlag.No.code);} catch (SQLException e) {e.printStackTrace();}return null;}//新增图书@Overridepublic Integer saveBook(Book book) {queryRunner = DBUtils.getQueryRunner();sql = "insert into t_book (book_name,author,publish,isbn,introduction,language,price,pubdate,pressmark,state,is_deleted) values (?,?,?,?,?,?,?,?,?,?,?)";try {return submitInfo(book);} catch (SQLException e) {e.printStackTrace();}return -1;}//更新图书@Overridepublic Integer updateBook(Book book) {queryRunner = DBUtils.getQueryRunner();if (book.getIsDeleted() == null || "".equals(book.getIsDeleted())) {book.setIsDeleted(DelFlag.No.code);}if (book.getState() == null || "".equals(book.getState())) {book.setState(0);}sql = "update t_book set book_name=?,author=?,publish=?,isbn=?,introduction=?,language=?,price=?,pubdate=?,pressmark=?,state=?,is_deleted=? where id=?";try {return updateInfo(book);} catch (SQLException e) {e.printStackTrace();}return -1;}//删除图书@Overridepublic Integer deleteBook(Integer id) {queryRunner = DBUtils.getQueryRunner();sql = "update t_book set is_deleted=? where id=?";try {return queryRunner.update(sql, DelFlag.YES.code, id);} catch (SQLException e) {e.printStackTrace();}return -1;}//查询单条信息@Overridepublic Book queryBookById(Integer id) {queryRunner = DBUtils.getQueryRunner();sql = "select * from t_book where is_deleted=? and id=?";try {return queryRunner.query(sql, new ResultSetHandler<Book>() {@Overridepublic Book handle(ResultSet resultSet) throws SQLException {if (resultSet.next()) {Book b = new Book();b.setId(resultSet.getInt("id"));b.setBookName(resultSet.getString("book_name"));b.setAuthor(resultSet.getString("author"));b.setPublish(resultSet.getString("publish"));b.setIsbn(resultSet.getString("isbn"));b.setIntroduction(resultSet.getString("introduction"));b.setLanguage(resultSet.getString("language"));b.setPrice(resultSet.getDouble("price"));b.setPubdate(resultSet.getDate("pubdate"));b.setPressmark(resultSet.getString("pressmark"));b.setIsDeleted(resultSet.getInt("is_deleted"));b.setState(resultSet.getInt("state"));return b;}return null;}}, DelFlag.No.code,id);} catch (SQLException e) {e.printStackTrace();}return null;}//查询是否上架@Overridepublic List<Book> queryBookState(int code) {queryRunner = DBUtils.getQueryRunner();sql = "select * from t_book where is_deleted=? and state=?";try {return queryRunner.query(sql, new ResultSetHandler<List<Book>>() {@Overridepublic List<Book> handle(ResultSet resultSet) throws SQLException {List<Book> list = new ArrayList<>();while (resultSet.next()) {Book b = new Book();b.setId(resultSet.getInt("id"));b.setBookName(resultSet.getString("book_name"));b.setAuthor(resultSet.getString("author"));b.setPublish(resultSet.getString("publish"));b.setIsbn(resultSet.getString("isbn"));String introduction = resultSet.getString("introduction");if (introduction != null && !"".equals(introduction) && introduction.length() > 20) {introduction = resultSet.getString("introduction").substring(0, 20);b.setIntroduction(introduction + "...");} else {b.setIntroduction(introduction);}b.setLanguage(resultSet.getString("language"));b.setPrice(resultSet.getDouble("price"));b.setPubdate(resultSet.getDate("pubdate"));b.setPressmark(resultSet.getString("pressmark"));b.setIsDeleted(resultSet.getInt("is_deleted"));b.setState(resultSet.getInt("state"));list.add(b);}return list;}}, DelFlag.No.code,code);} catch (SQLException e) {e.printStackTrace();}return null;}

3.业务逻辑层实现

与数据持久层类似的操作,创建相应的接口并实现,调用数据持久层的方法获取数据信息。

public interface BookService {public List<Book> list(Book book);public Integer saveBook(Book book);public Integer updateBook(Book book);public Integer deleteBook(Integer id);public Book queryBookById(Integer id);List<Book> queryBooksState(int code);}

4.Controller控制层

Servlet层中创建BookServlet通过处理查询所有书籍的方法。同时将处理POST请求字符编码问题单独放在了过滤器中。

public class BookServlet extends HttpServlet {private BookService bookService=new BookServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {//获取提交的数据String type=req.getParameter(Constant.SERVLET_TYPE_SQLTYPE);if (type != null && !"".equals(type)) {//对请求进行判断,针对不同的请求进行不同的处理if (Constant.SERVLET_TYPE_QUERY.equals(type)) {//进行查询操作queryBook(req, resp);}else if (Constant.SERVLET_TYPE_SAVE.equals(type)){//新增提交操作saveOrUpdateBook(req, resp);}else if (Constant.SERVLET_TYPE_QUERYBYID.equals(type)){//获取单条信息,便于修改queryBookById(req, resp);} else if (Constant.SERVLET_TYPE_UPDATE.equals(type)){//进行更新操作saveOrUpdateBook(req,resp);}else if (Constant.SERVLET_TYPE_DELETE.equals(type)){deleteBook(req, resp);}else{queryBook(req, resp);}}}//删除private void deleteBook(HttpServletRequest req, HttpServletResponse resp) throws IOException {String id= req.getParameter("id");bookService.deleteBook(Integer.parseInt(id));resp.sendRedirect("/bookServlet?sqltype=query");}//更新private void queryBookById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String id= req.getParameter("id");Book book=bookService.queryBookById(Integer.parseInt(id));req.setAttribute("book",book);req.getRequestDispatcher("/book/bookUpdate.jsp").forward(req, resp);}//添加private void saveOrUpdateBook(HttpServletRequest req, HttpServletResponse resp) {//进行添加try {//使用反射机制,快速提取表单中的信息到book对象中Book book = RequestParameterUntil.getRequestParameterForReflect(req, Book.class);int count=-1;if (book.getId()!=null && book.getId()>0){//表示更新count= bookService.updateBook(book);} else{//表示添加count = bookService.saveBook(book);}if (count>0){//添加成功,进行重定向resp.sendRedirect("/bookServlet?sqltype=query");}} catch (Exception e) {e.printStackTrace();}}}

三、功能测试

启动服务器,让项目在服务器中运行,进入登录页面,输入账号密码后进行书籍的查询功能的测试:

与数据库对比后可以发现所有的书都可以被查询到,并且可以在前端页面进行渲染。下面进行新增图书的功能测试,在点击添加按钮后,跳转到表单页面,输入需要新增的图书信息:

确认信息无误后,进行表单提交,页面进行重定向,自动完成所有图书的查询,看到新的图书添加成功。

接着对刚才新增的书,进行修改操作,看是否能完成修改功能,将图书的名称和价格都修改一下:

最后对图书的删除功能进行测试,这里是非物理删除,在点击图书删除按钮时,改变图书的状态码,使其前端无法完成显示,但数据信息还是依旧保留在数据库中:

总结

以上就是今天要讲的内容,使用【Servlet】【JSP】【MySql】【Ajax】来实现书籍的管理功能,为后续学生管理和借阅管理做准备。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。