2.后端
Book
package com.sjsq.po; import java.io.Serializable; /** * @author shuijianshiqing * @date 2020/5/19 22:40 */ public class Book implements Serializable { private static final long serialVersionUID = 1L; private Integer bookid; private String bookname; private Double price; private String author; private String picture; private String publish; public static long getSerialVersionUID() { return serialVersionUID; } public Integer getBookid() { return bookid; } public void setBookid(Integer bookid) { this.bookid = bookid; } public String getBookname() { return bookname; } public void setBookname(String bookname) { this.bookname = bookname; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } public String getPublish() { return publish; } public void setPublish(String publish) { this.publish = publish; } @Override public String toString() { return "Book{" + "bookid=" + bookid + ", bookname='" + bookname + '\'' + ", price=" + price + ", author='" + author + '\'' + ", picture='" + picture + '\'' + ", publish='" + publish + '\'' + '}'; } }
Card
package com.sjsq.po; /** * @author shuijianshiqing * @date 2020/5/29 19:34 */ public class Card { // 主键 private Integer id; // 用户Id private Integer userid; // 用户名 private String username; // 书名 private Integer bookid; // 书本的数量 private int booknum; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserid() { return userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getBookid() { return bookid; } public void setBookid(Integer bookid) { this.bookid = bookid; } public int getBooknum() { return booknum; } public void setBooknum(int booknum) { this.booknum = booknum; } @Override public String toString() { return "Card{" + "id=" + id + ", userid=" + userid + ", username='" + username + '\'' + ", bookid=" + bookid + ", booknum=" + booknum + '}'; } }
User
package com.sjsq.po; import java.io.Serializable; /** * @author shuijianshiqing * @date 2020/5/19 22:19 * 用户的实体类 */ public class User implements Serializable { // 增加序列号,作用是反序列化的时候不会报错,切能进行IO的持久化 public static final long serialVersionUID = 1L; private Integer id; private String name; private String password; private String email; private String phone; public static long getSerialVersionUID() { return serialVersionUID; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + ", phone='" + phone + '\'' + '}'; } }
BookDao
package com.sjsq.dao; import com.sjsq.po.Book; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/20 23:13 * 图书信息接口 */ public interface BookDao { /** * 查询图书信息 * @param sql * @param arr * @return */ public List<Book> select(String sql,Object[] arr); /** * 根据图书编号进行查询 * @param id * @return */ public Book getBook(Integer id); }
CardDao
package com.sjsq.dao; import com.sjsq.po.Book; import com.sjsq.po.Card; import com.sjsq.po.User; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/29 19:42 */ public interface CardDao { /** * 通过用户Id获取用户的购物车 * @param id * @return */ public List<Card> getCard(Integer id); /** * 添加用户信息和图书信息到用户的购物车 * @param user * @param book * @param booknum * @return */ public boolean addCard(User user, Book book,Integer booknum); /** * 使用Book来获取booknum * @param book * @return */ public Integer getBookNum(Book book); }
UserDao
package com.sjsq.dao; import com.sjsq.po.User; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/20 22:10 * 创建一个接口用于声明用户登录注册的方法 */ public interface UserDao { /** * 用户登录 * @param user * @return */ public User login(User user); /** * 用户注册 * @param user * @return */ public boolean register(User user); /** * 查询用户信息 * @param sql * @param arr * @return */ public List<User> selectUser(String sql,Object arr[]); }
BookService
package com.sjsq.service; import com.sjsq.po.Book; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/20 23:37 * Book的Service层 */ public interface BookService { /** * 查询图书信息 * @param book * @return */ public List<Book> select(Book book); /** * 根据编号来查询 * @param book * @return */ public Book getBook(Book book); }
CardService
package com.sjsq.service; import com.sjsq.po.Book; import com.sjsq.po.Card; import com.sjsq.po.User; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/29 23:00 */ public interface CardService { /** * 获取用户的购物车 * @param id * @return */ public List<Card> getCard(Integer id); /** * 添加用户信息和图书信息到用户的购物车 * @param user * @param book * @param booknum * @return */ public boolean addCard(User user, Book book, Integer booknum); /** * 根据Book获取booknum * @param book * @return */ public Integer getBookNum(Book book); }
UserService
package com.sjsq.service; import com.sjsq.po.User; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/20 22:54 * Service层 */ public interface UserService { /** * 用户查询的信息 * @param user * @return */ public List<User> selectUser(User user); }
BookServiceImpl
package com.sjsq.service.impl; import com.sjsq.dao.BookDao; import com.sjsq.dao.impl.BookDaoImpl; import com.sjsq.po.Book; import com.sjsq.service.BookService; import java.util.ArrayList; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/20 23:42 * Book的Service实现层 */ public class BookServiceImpl implements BookService { private BookDao dao = new BookDaoImpl(); /** * 查询所有图书信息 * @param book * @return */ @Override public List<Book> select(Book book) { StringBuffer sql = new StringBuffer("select * from book where 1 = 1 "); List<Object> list = new ArrayList<Object>(); if(book != null){ // 根据bookid来查找对应的书籍 if(book.getBookid() != null && book.getBookid() != 0){ sql.append(" and bookid = ?"); list.add(book.getBookid()); } } return dao.select(sql.toString(),list.toArray()); } /** * 根据图书编号查询信息 * @param book * @return */ @Override public Book getBook(Book book) { if(book.getBookid() != null && book.getBookid() != 0){ return dao.getBook(book.getBookid()); } return null; } }
CardServiceImpl
package com.sjsq.service.impl; import com.sjsq.dao.CardDao; import com.sjsq.dao.impl.CardDaoImpl; import com.sjsq.po.Book; import com.sjsq.po.Card; import com.sjsq.po.User; import com.sjsq.service.CardService; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/29 23:01 */ public class CardServiceImpl implements CardService { private CardDao dao = new CardDaoImpl(); @Override public List<Card> getCard(Integer id) { if(id != null){ return dao.getCard(id); } return null; } /** * 添加信息到购物车 * @param user * @param book * @param booknum * @return */ @Override public boolean addCard(User user, Book book, Integer booknum) { return dao.addCard(user,book,booknum); } /** * 根据Book查询booknum * @param book * @return */ @Override public Integer getBookNum(Book book) { if(dao.getBookNum(book) == null){ return 0; } return dao.getBookNum(book); } }
UserServiceImpl
package com.sjsq.service.impl; import com.sjsq.dao.UserDao; import com.sjsq.dao.impl.UserDaoImpl; import com.sjsq.po.User; import com.sjsq.service.UserService; import java.util.ArrayList; import java.util.List; /** * @author shuijianshiqing * @date 2020/5/20 22:56 */ public class UserServiceImpl implements UserService { // 定义dao对象 private UserDao dao = new UserDaoImpl(); /** * 查询用户信息 * @param user * @return */ @Override public List<User> selectUser(User user) { StringBuffer sql = new StringBuffer("select * from user where 1 = 1 "); List<Object> list = new ArrayList<Object>(); if(user != null){ // 按照姓名查询 if(user.getName() != null && !user.getName().equals("")){ sql.append(" and name = ?"); list.add(user.getName()); } // 按照email查询 if(user.getEmail() != null && !user.getEmail().equals("")){ sql.append(" and email = ?"); list.add(user.getEmail()); } } // 交给dao层处理逻辑 return dao.selectUser(sql.toString(),list.toArray()); } }
BaseDao
package com.sjsq.utils; import java.sql.*; /** * @author shuijianshiqing * @date 2020/5/19 23:08 * 数据交互层dao层 */ public class BaseDao { private static String driver = "com.mysql.cj.jdbc.Driver"; private static String url = "jdbc:mysql://localhost/book_management?serverTimezone=UTC"; private static String user = "root"; private static String password = "admin"; /** * 连接数据库的方法 * @return * @throws ClassNotFoundException * @throws SQLException */ public static Connection getConnection() throws ClassNotFoundException, SQLException { // 加载数据库驱动 Class.forName(driver); Connection con = DriverManager.getConnection(url,user,password); return con; } /** * 关闭数据库的方法 * @param con * @param ps * @param rs */ public static void close(Connection con, PreparedStatement ps, ResultSet rs){ // 关闭资源,避免出现异常 if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(ps != null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 设置增删改的方法 * @param sql * @param arr * @return */ public static boolean addUpdateDelete(String sql,Object[] arr){ Connection con = null; PreparedStatement ps = null; try { // 第一步:连接数据库 con = BaseDao.getConnection(); // 第二步:预编译 ps = con.prepareStatement(sql); // 第三步:设置值 if(arr != null && arr.length !=0){ for (int i = 0; i < arr.length; i++) { ps.setObject(i+1,arr[i]); } } int count = ps.executeUpdate(); if(count > 0){ return true; }else{ return false; } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return false; } public static void main(String[] args){ try { BaseDao.getConnection(); System.out.println("---测试数据库链接成功---"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
3.所用到的包
jquery-3.4.1.min.js
mysql-connector-java-8.0.15.jar
四、数据库
SQL
/* Navicat Premium Data Transfer Source Server : MySQL Source Server Type : MySQL Source Server Version : 80013 Source Host : localhost:3306 Source Schema : book_management Target Server Type : MySQL Target Server Version : 80013 File Encoding : 65001 Date: 01/06/2020 21:45:17 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for book -- ---------------------------- DROP TABLE IF EXISTS `book`; CREATE TABLE `book` ( `bookid` int(11) NOT NULL AUTO_INCREMENT, `bookname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `price` decimal(10, 2) NULL DEFAULT NULL, `author` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `picture` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `publish` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, PRIMARY KEY (`bookid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of book -- ---------------------------- INSERT INTO `book` VALUES (1, '水浒传', 23.00, '施耐庵', NULL, '人民文学出版社'); INSERT INTO `book` VALUES (2, '西游记', 25.00, '吴承恩', NULL, '人民文学出版社'); INSERT INTO `book` VALUES (3, '红楼梦', 35.00, '曹雪芹', NULL, '人民文学出版社'); INSERT INTO `book` VALUES (4, '三国演义', 28.00, '罗贯中', NULL, '人民文学出版社'); -- ---------------------------- -- Table structure for card -- ---------------------------- DROP TABLE IF EXISTS `card`; CREATE TABLE `card` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `bookid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `booknum` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of card -- ---------------------------- INSERT INTO `card` VALUES (11, '1', '2001', '1', 2); INSERT INTO `card` VALUES (12, '1', '2001', '3', 1); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `email` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, '2001', '111111', '312321@qq.com', '31321'); INSERT INTO `user` VALUES (53, '张三', '1', '', ''); SET FOREIGN_KEY_CHECKS = 1;
五、感悟及商务合作
1.感悟
手写日志太麻烦,所以后来出现了Log4j,Jsp中Java代码和Html混在一起,太不方便了,所以后来有了Servlet和各种框架,所以这也就是框架的意义。简单的事情重复做,做到一定的熟练度,把它抽象出来,形成公用的方法,就有了框架。还要数据连接,JDBC里面有很多重复性代码,后续就有了Mybatis等等。
2.项目参考及搭建
备注1:关于如何搭建项目之前文章里面已经写过,请移步:
IDEA创建Web项目详细说明
备注2:若您想添加管理员增删改查功能,请移步:
图书管理系统-添加管理员增删改查功能
备注3:感谢别先生的博客,是参照他的博客实现的。
别先生的博客地址
备注4:要是侵犯到您的权益,请通知我删除此文章。
六、其他
1.其他系统实现
Java+JSP系统系列实现
Java+JSP实现学生图书管理系统
Java+JSP实现学生信息管理系统
Java+JSP实现用户信息管理系统
Java+Servlet+JSP系统系列实现
Java+Servlet+JSP实现航空订票系统
Java+Servlet+JSP实现新闻发布系统
Java+Servlet+JSP实现图书管理系统
Java+Servlet+JSP实现停车场管理系统
Java+Servlet+JSP实现房屋租赁管理系统
Java+Servlet+JSP实现学生选课管理系统
Java+Servlet+JSP实现宠物诊所管理系统
Java+Servlet+JSP实现学生宿舍管理系统
Java+Servlet+JSP实现学生信息管理系统
Java+Servlet+JSP实现学生成绩管理系统1
Java+Servlet+JSP实现学生成绩管理系统2
Java+SSM系统系列实现
Java+SSM+JSP实现宠物商城系统
Java+SSM+Easyui实现网上考试系统
Java+SSM+Layui实现学生成绩管理系统
Java+SSM+Bootstrap实现学生信息管理系统
Java+SSH系统系列实现
Java+SSH+Bootstrap实现在线考试系统
Java+SSH+JSP实现医院在线挂号系统
Java+Springboot系统系列实现
Java+Springboot+H-ui实现营销管理系统
Java+Springboot+Bootstrap实现网上商城系统
JavaSwing+Mysql系统系列实现
Java+Swing实现斗地主游戏
Java+Swing实现图书管理系统
Java+Swing实现医院管理系统
Java+Swing实现考试管理系统
Java+Swing实现酒店管理系统
Java+Swing实现超市管理系统
Java+Swing实现网上订餐系统
Java+Swing实现电影购票系统
Java+Swing实现仓库管理系统1
Java+Swing实现仓库管理系统2
Java+Swing实现进销存管理系统
Java+Swing实现通讯录管理系统
Java+Swing实现停车场管理系统
Java+Swing实现学生宿舍管理系统
Java+Swing实现学生选课管理系统
Java+Swing实现学生成绩管理系统
Java+Swing实现学校教材管理系统
Java+Swing实现学校教务管理系统
Java+Swing实现企业人事管理系统
Java+Swing实现电子相册管理系统
Java+Swing实现学生信息管理系统1
Java+Swing实现学生信息管理系统2
Java+Swing实现自助取款机(ATM)系统
JavaSwing+Txt系统系列实现
Java+Swing实现超市管理系统-TXT存储信息
Java+Swing实现宠物商店管理系统-TXT存储信息
Java+Swing实现自助取款机(ATM)系统-TXT存储信息
2.获取源码
源码包含管理员对用户的增删改查
Java+JSP+Mysql实现Web图书管理系统
3.部署项目
请点击以下链接,部署你的项目。
IDEA如何导入JavaWeb项目超详细教程
4.备注
如有侵权请联系我删除。
5.鸡汤
牛奶会有的,面包会有的,技术都是千锤百炼出来的。