按要求创建新数据库并添加表格,分别是:图书表、借出表、归还表、购买记录表、用户表以及用户类型表,并使用Mybatis完成图书馆用户登录、图书查询、以及图书馆进销存相关功能。
#创建数据库
DELETE DATABASE `book`;
#图书表
CREATE TABLE IF NOT EXISTS `book_info`(
`book_id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '图书id',
`book_name` VARCHAR(20) COMMENT'图书名',
`price` DOUBLE(11,2) COMMENT'图书价格',
`store` INT(20) COMMENT'图书库存',
`des` VARCHAR(20) COMMENT'图书描述',
`book_type` INT(11) COMMENT'图书类型'
);
#借出表
CREATE TABLE IF NOT EXISTS `borrow_info`(
`borrow_id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '借出id',
`user_id` INT(11) COMMENT'用户id',
`book_id` INT(11) COMMENT'图书id',
`borrow_date` DATETIME COMMENT '借出时间',
`back_date` DATETIME COMMENT '归还时间',
`delay_money` DOUBLE(11,2) COMMENT '延迟滞纳金'
);
#归还表
CREATE TABLE IF NOT EXISTS `back_info`(
`back_id` INT(11 )PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '归还id',
`user_id` INT(11) COMMENT '用户id',
`book_id` INT(11) COMMENT '图书id',
`back_date` DATETIME COMMENT'归还日期',
`delay_money` DOUBLE(11,2) COMMENT'延迟滞纳金'
);
#购买记录表
CREATE TABLE IF NOT EXISTS `buy_history_info`(
`buy_id` INT(11)PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '购买id',
`user_id` INT(11) COMMENT'用户id',
`book_id` INT(11) COMMENT'图书id',
`buy_date` DATETIME COMMENT '购买日期',
`buy_num` INT(11) COMMENT '购买数量',
`total_price` DOUBLE(11,2) COMMENT'总价'
);
#用户表
CREATE TABLE IF NOT EXISTS `user_info` (
`user_id` INT(11)PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT'用户id',
`user_name` VARCHAR(20) COMMENT'用户名称',
`grade` INT(11) COMMENT'用户年级',
`phone` INT(20) COMMENT'电话号码',
`user_type` VARCHAR(11) COMMENT'用户类型'
);
#图书类型表
CREATE TABLE IF NOT EXISTS `book_type_info`(
`type_id` INT(11) PRIMARY KEY COMMENT'类型id',
`type_name` VARCHAR(11) COMMENT'类型名称',
`default_date` INT(11) COMMENT'默认归还天数',
`delay_money_per_day` DOUBLE(11,2) COMMENT'延期每天滞纳金'
);
*导入jar包,配置Tomcat,创建配置文件
偷懒把jar包文件夹里的包都导进来了
----创建数据库连接的属性文件
----导入日志输出属性文件 log4j.properties
----创建mybatis配置文件
以上配置文件都在resources文件夹下创建
user实现类:
package cn.kgc.kb07.entity;
/**
* @Author 常瀚文
* @Date 2020/6/15
* @Description
*/
public class User {
private int user_id;
private String user_name;
private int grade;
private String phone;
private String user_type;
public User() {
}
public User(int user_id, String user_name, int grade, String phone, String user_type) {
this.user_id = user_id;
this.user_name = user_name;
this.grade = grade;
this.phone = phone;
this.user_type = user_type;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getUser_type() {
return user_type;
}
public void setUser_type(String user_type) {
this.user_type = user_type;
}
@Override
public String toString() {
return "User{" +
"user_id=" + user_id +
", user_name='" + user_name + '\'' +
", grade=" + grade +
", phone='" + phone + '\'' +
", user_type='" + user_type + '\'' +
'}';
}
}
book实现类:
package cn.kgc.kb07.entity;
import java.util.Date;
/**
* @Author 常瀚文
* @Date 2020/6/15
* @Description
*/
public class Book {
private int book_id;
private String book_name;
private double price;
private int store;
private String book_des;
private String type_name;
private int default_date;
private double delay_money_per_day;
private String user_name;
private Date borrow_date;
private Date back_date;
private double delay_money;
// public Book() {
// }
//
// public Book(int book_id, String book_name, double price, int store, String book_des, String type_name, int default_date, double delay_money_per_day, String user_name, Date borrow_date, Date back_date, double delay_money) {
// this.book_id = book_id;
// this.book_name = book_name;
// this.price = price;
// this.store = store;
// this.book_des = book_des;
// this.type_name = type_name;
// this.default_date = default_date;
// this.delay_money_per_day = delay_money_per_day;
// this.user_name = user_name;
// this.borrow_date = borrow_date;
// this.back_date = back_date;
// this.delay_money = delay_money;
// }
public Date getBorrow_date() {
return borrow_date;
}
public void setBorrow_date(Date borrow_date) {
this.borrow_date = borrow_date;
}
public Date getBack_date() {
return back_date;
}
public void setBack_date(Date back_date) {
this.back_date = back_date;
}
public double getDelay_money() {
return delay_money;
}
public void setDelay_money(double delay_money) {
this.delay_money = delay_money;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getBook_id() {
return book_id;
}
public void setBook_id(int book_id) {
this.book_id = book_id;
}
public String getBook_name() {
return book_name;
}
public void setBook_name(String book_name) {
this.book_name = book_name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getStore() {
return store;
}
public void setStore(int store) {
this.store = store;
}
public String getBook_des() {
return book_des;
}
public void setBook_des(String book_des) {
this.book_des = book_des;
}
public String getType_name() {
return type_name;
}
public void setType_name(String type_name) {
this.type_name = type_name;
}
public int getDefault_date() {
return default_date;
}
public void setDefault_date(int default_date) {
this.default_date = default_date;
}
public double getDelay_money_per_day() {
return delay_money_per_day;
}
public void setDelay_money_per_day(double delay_money_per_day) {
this.delay_money_per_day = delay_money_per_day;
}
}
dao层接口:
import cn.kgc.kb07.entity.Book;
import cn.kgc.kb07.entity.User;
import java.util.List;
import java.util.Map;
public interface BookMapper {
User queryUserByName(String username);
List<Book> queryAllBooks();
List<Book> queryBooksByName(Map<String,String> map);
}
映射文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kgc.kb07.dao.BookMapper">
<select id="queryUserByName" parameterType="string" resultType="user">
select * from user_info where user_name=#{username};
</select>
<select id="queryAllBooks" resultType="Book">
select * from book_info join book_type_info on type_id=book_type;
</select>
<select id="queryBooksByName" parameterType="map" resultType="book">
select * from book_info join borrow_info on book_info.book_id=borrow_id
join book_type_info on book_info.book_type=book_type_info.type_id
join user_info on borrow_info.user_id=user_info.user_id
<where>
<if test="bookname!=null and bookname!=''">
book_name like concat("%",#{bookname},"%");
</if>
<if test="username!=null and username!=''">
and user_name like concat("%",#{username},"%");
</if>
<!--<if test="type!=null and type!=''">-->
<!--and type_name like concat("%",#{type},"%");-->
<!--</if>-->
</where>
</select>
</mapper>
登录servlet:
package cn.kgc.kb07.servlet;
import cn.kgc.kb07.entity.User;
import cn.kgc.kb07.service.UserService;
import cn.kgc.kb07.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author 常瀚文
* @Date 2020/6/15
* @Description
*/
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uname=req.getParameter("user_name");
UserService service=new UserServiceImpl();
User user=service.login(uname);
if (user==null){
//查询失败,不能登录,并返回主页提示用户名或密码不正确
req.getSession().setAttribute("msg","用户名或者密码不正确");
resp.sendRedirect("index.jsp");
}else {
//查询成功,可以登录,把用户名塞入session中
req.getSession().setAttribute("msg","登录成功");
req.getSession().setAttribute("user",user);
resp.sendRedirect("index.jsp");
}
}
}
查看所有书籍servlet:
package cn.kgc.kb07.servlet;
import cn.kgc.kb07.dao.BookMapper;
import cn.kgc.kb07.entity.Book;
import cn.kgc.kb07.util.MapperConfig;
import org.apache.ibatis.session.SqlSession;
import org.springframework.web.servlet.tags.HtmlEscapeTag;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
/**
* @Author 常瀚文
* @Date 2020/6/15
* @Description
*/
public class GetAllBooks extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session= req.getSession();
SqlSession sqlSession= MapperConfig.getSession();
List<Book> list=sqlSession.getMapper(BookMapper.class).queryAllBooks();
if (list!=null){
session.setAttribute("bookList",list);
resp.sendRedirect("showBooks.jsp");
}
}
}
模糊查询servlet:
package cn.kgc.kb07.servlet;
import cn.kgc.kb07.dao.BookMapper;
import cn.kgc.kb07.entity.Book;
import cn.kgc.kb07.util.MapperConfig;
import org.apache.ibatis.session.SqlSession;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author 常瀚文
* @Date 2020/6/15
* @Description
*/
public class GetBookByNameServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session=req.getSession();
String bookname=req.getParameter("bookname");
String username=req.getParameter("username");
String type=req.getParameter("type");
Map<String,String> map=new HashMap();
map.put("bookname",bookname);
map.put("username",username);
map.put("type",type);
SqlSession sqlSession= MapperConfig.getSession();
System.out.println(bookname);
List<Book> list=sqlSession.getMapper(BookMapper.class).queryBooksByName(map);
System.out.println(list.get(0).getBook_name());
if (list==null){
session.setAttribute("msg","信息查询失败");
}else {
session.setAttribute("msg","信息查询成功");
session.setAttribute("list",list);
resp.sendRedirect("showBorrowList.jsp");
}
}
}
web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--登录-->
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>cn.kgc.kb07.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<!--查看所有存书-->
<servlet>
<servlet-name>GetAllBooks</servlet-name>
<servlet-class>cn.kgc.kb07.servlet.GetAllBooks</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetAllBooks</servlet-name>
<url-pattern>/getAllBooks.do</url-pattern>
</servlet-mapping>
<!--查询-->
<servlet>
<servlet-name>GetBookByNameServlet</servlet-name>
<servlet-class>cn.kgc.kb07.servlet.GetBookByNameServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetBookByNameServlet</servlet-name>
<url-pattern>/getBookByName.do</url-pattern>
</servlet-mapping>
</web-app>
前端登录:
<%@ page import="cn.kgc.kb07.entity.User" %><%--
Created by IntelliJ IDEA.
User: 邮票票
Date: 2020/6/15
Time: 12:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>图书馆首页</title>
</head>
<body>
<%
Object msg=session.getAttribute("msg");
Object o=session.getAttribute("user");
if (msg!=null &&msg.equals("登录成功")&& o!=null) {
User u= (User) o;
%>
<h1>${msg}:${user.user_name}
${user.user_type.equals("超级管理员")?"超级管理员":""}</h1>
<%session.setAttribute("uid",u.getUser_id());%>
<form action="logout.do" method="get">
<input type="submit" value="注销">
</form>
<form action="bookList.jsp" method="get">
<input type="submit" value="点击进入图书管理页面">
</form>
<%
}else {
%>
${msg}
<form action="login.do" method="post">
<p><input type="text" name="user_name"></p>
<p><input type="submit"></p>
<p><input type="button" value="点击注册" onclick="window.location.href='createUser.jsp'"></p>
</form>
<%
session.removeAttribute("msg");
}%>
</body>
</body>
</html>
前端查询所有书籍:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 邮票票
Date: 2020/6/15
Time: 21:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>书本展示页面</title>
</head>
<body>
<form action="getBookByName.do">
<p>图书名称:<input type="text" name="bookname">
借书人姓名:<input type="text" name="username">
图书类型:
<select name="type">
<option value="漫画书">漫画书</option>
<option value="教科书">教科书</option>
<option value="杂志">杂志</option>
</select>
</p>
<p><input type="submit" value="查询"></p>
</form>
<table border="1">
<tr>
<th>图书ID</th>
<th>书名</th>
<th>单价</th>
<th>库存</th>
<th>详情</th>
<th>类型</th>
<th>默认还书时间(天)</th>
<th>延时缴费(/天)</th>
</tr>
<c:forEach items="${bookList}" var="book">
<tr>
<td>${book.book_id}</td>
<td>${book.book_name}</td>
<td>${book.price}</td>
<td>${book.store}</td>
<td>${book.book_des}</td>
<td>${book.type_name}</td>
<td>${book.default_date}</td>
<td>${book.delay_money_per_day}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
前端查询借书记录及模糊查询书本:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 邮票票
Date: 2020/6/15
Time: 22:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>查询</title>
</head>
<body>
<c:if test="${list!=null}">
<table border="1">
<tr>
<th>图书ID</th>
<th>图书名称</th>
<th>单价</th>
<th>图书类型</th>
<th>借书人姓名</th>
<th>借书起始日期</th>
<th>还书日期</th>
<th>延迟应缴费</th>
</tr>
<c:forEach items="${list}" var="info">
<tr>
<td>${info.book_id}</td>
<td>${info.book_name}</td>
<td>${info.price}</td>
<td>${info.type_name}</td>
<td>${info.user_name}</td>
<td>${info.borrow_date}</td>
<td>${info.back_date}</td>
<td>${info.delay_money}</td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
</html>