使用Mybatis完善图书馆管理项目

图书馆图书管理项目

使用Mybatis完善图书馆管理项目_第1张图片
按要求创建新数据库并添加表格,分别是:图书表、借出表、归还表、购买记录表、用户表以及用户类型表,并使用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'延期每天滞纳金'
);

idea中搭建环境

*导入jar包,配置Tomcat,创建配置文件
使用Mybatis完善图书馆管理项目_第2张图片
偷懒把jar包文件夹里的包都导进来了

----创建数据库连接的属性文件
使用Mybatis完善图书馆管理项目_第3张图片
----导入日志输出属性文件 log4j.properties
使用Mybatis完善图书馆管理项目_第4张图片
----创建mybatis配置文件
使用Mybatis完善图书馆管理项目_第5张图片
以上配置文件都在resources文件夹下创建
使用Mybatis完善图书馆管理项目_第6张图片

功能一:根据用户名实现用户登录

功能二:展示所有书籍

功能三:根据用户名、书名、类型模糊查询

以下为代码:

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}&nbsp;
    ${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>

你可能感兴趣的:(使用Mybatis完善图书馆管理项目)