图书管理系统模块,通过模糊查询实现查找图书的功能

图书管理系统模块,通过模糊查询实现查找图书的功能

在数据库中建库建表

在这里插入图片描述
建立相关外键,画出er图。

使用代码实现过程(重点)

配置tomcat,导入相关jar包资源,配置resources环境,配置测试用的log4jproperties

### 设置###
log4j.rootLogger = debug,stdout,D,E

 输出信息到控制抬
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

输出DEBUG 级别以上的日志到=E://logs/error.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

 输出ERROR 级别以上的日志到=E://logs/error.log
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

配置database和mybatis-cfg.xml

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.56.101:3306/library
user=kb07
pwd=ok
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
        "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="database.properties"/>
    <typeAliases>
        <typeAlias type="cn.kgc.kb07.entity.User" alias="user"/>
        <typeAlias type="cn.kgc.kb07.entity.Books" alias="books"/>
    </typeAliases>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="cn.kgc.kb07.dao.UserDao"/>
        <mapper class="cn.kgc.kb07.dao.BooksDao"/>
    </mappers>
</configuration>

在src中分层处理,创建和数据库对应的实体类:

package cn.kgc.kb07.entity;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class Books {
    private int book_id;
    private String book_name;
    private double price;
    private int store;
    private String des;
    private int book_type;
    private String type_name;

    public String getType_name() {
        return type_name;
    }

    public void setType_name(String type_name) {
        this.type_name = type_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 getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    public int getBook_type() {
        return book_type;
    }

    public void setBook_type(int book_type) {
        this.book_type = book_type;
    }

    @Override
    public String toString() {
        return "Books{" +
                "book_id=" + book_id +
                ", book_name='" + book_name + '\'' +
                ", price=" + price +
                ", store=" + store +
                ", des='" + des + '\'' +
                ", book_type=" + book_type +
                '}';
    }

    public Books() {
    }

    public Books(int book_id, String book_name, double price, int store, String des, int book_type) {
        this.book_id = book_id;
        this.book_name = book_name;
        this.price = price;
        this.store = store;
        this.des = des;
        this.book_type = book_type;
    }
}

package cn.kgc.kb07.entity;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class User {
    private int user_id;
    private String user_name;
    private String user_type;
    private String user_phone;

    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 String getUser_type() {
        return user_type;
    }

    public void setUser_type(String user_type) {
        this.user_type = user_type;
    }

    public String getUser_phone() {
        return user_phone;
    }

    public void setUser_phone(String user_phone) {
        this.user_phone = user_phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_type='" + user_type + '\'' +
                ", user_phone='" + user_phone + '\'' +
                '}';
    }

}

创建BooksDao和他的映射文件

package cn.kgc.kb07.dao;

import cn.kgc.kb07.entity.Books;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BooksDao {
    List<Books> quaryBooks(@Param("book_name") String book_name, @Param("type_name")String type_name);
}
<?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.BooksDao">
    <select id="quaryBooks" resultType="books">
        select b.*,t.type_name from books b ,books_type t where 1=1
        <if test="book_name!=null and book_name!='' ">
            and book_name like concat("%",#{book_name},"%")
        </if>
        <if test="type_name!=null and type_name!=''">
            and type_name=#{type_name}
        </if>
        ;
    </select>
</mapper>

创建工具类,将getSQLSession的方法提炼出来,实现代码的可重用性

package cn.kgc.kb07.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class MapperConfg {
    public SqlSession getSession(){
        SqlSession session=null;
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
            SqlSessionFactory factory=builder.build(is);
             session=factory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return session;
    }
}

在service中调用dao层的方法,实现业务逻辑

package cn.kgc.kb07.service;

import cn.kgc.kb07.dao.BooksDao;
import cn.kgc.kb07.entity.Books;
import cn.kgc.kb07.util.MapperConfg;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class BooksServices {
    public List<Books> queryBooks(String book_name, String type_name) {
        MapperConfg mapperConfg=new MapperConfg();
        SqlSession session=mapperConfg.getSession();
        return session.getMapper(BooksDao.class).quaryBooks(book_name,type_name);
    }
}

package cn.kgc.kb07.service;

import cn.kgc.kb07.dao.UserDao;
import cn.kgc.kb07.entity.User;
import cn.kgc.kb07.util.MapperConfg;
import org.apache.ibatis.session.SqlSession;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class UserServices {
    public User getUser(String name){
        MapperConfg m=new MapperConfg();
        SqlSession session=m.getSession();
        User user=session.getMapper(UserDao.class).getUserType(name);
        return user;

    }
}

java部分写完之后,因为涉及与页面的交互,所以需要一个中转站servlet,接收页面传递来的请求,然后返回出去

在web里先设计一个index.jsp 接收请求,这边就是一个简单的表单,实现的逻辑就是,通过表单把数据上传,之后根据对应的业务逻辑,返回相应的结果

<%--
  Created by IntelliJ IDEA.
  User: 86185
  Date: 2020/6/15
  Time: 11:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>登录页面</title>
  </head>
  <body>
  <p><h1>欢迎登录图书馆系统</h1></p>
  <%
    Object o=session.getAttribute("msg");
    if(o!=null){
      out.print(o);
    }
  %>


  <form action="login.do" method="post">
    <p>姓名 <input type="text" name="name"></p>
    <input type="submit" value="登录">
  </form>
  </body>
</html>

<%--
  Created by IntelliJ IDEA.
  User: 86185
  Date: 2020/6/15
  Time: 11:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<p><h1>欢迎学生登录</h1></p>
<form action="querybooks.do" method="get">
    图书名:<input type="text" name="book_name">图书类型:<input type="text" name="type_name">
    <input type="submit" value="点击查询">
</form>
<hr/>
<table>
    <tr>
        <th>编号</th>
        <th>书名</th>
        <th>价格</th>
        <th>库存</th>
        <th>简介</th>
        <th>类型</th>
    </tr>

    <c:if test="${books!=null}">
    <c:forEach items="${books}" var="user">
        <tr>
            <td>${user.book_id}</td>
            <td>${user.book_name}</td>
            <td>${user.price}</td>
            <td>${user.store}</td>
            <td>${user.des}</td>
            <td>${user.type_name}</td>
        </tr>
    </c:forEach>
    </c:if>

</table>

</body>
</html>

在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>login</servlet-name>
        <servlet-class>cn.kgc.kb07.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login.do</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>purchase</servlet-name>
        <servlet-class>cn.kgc.kb07.servlet.PurchaseServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>purchase</servlet-name>
        <url-pattern>/purchase.do</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>query</servlet-name>
        <servlet-class>cn.kgc.kb07.servlet.QueryBooksServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>query</servlet-name>
        <url-pattern>/querybooks.do</url-pattern>
    </servlet-mapping>
</web-app>

用servlet连接前端和后端

package cn.kgc.kb07.servlet;

import cn.kgc.kb07.entity.Books;
import cn.kgc.kb07.entity.User;
import cn.kgc.kb07.service.BooksServices;
import cn.kgc.kb07.service.UserServices;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class UserServlet 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 {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        String name=req.getParameter("name");
        UserServices services=new UserServices();
        User user=services.getUser(name);
        if(user!=null){
            if(user.getUser_type().equals("管理员")){
                req.getSession().setAttribute("user",user);
                resp.sendRedirect("adminlogin.jsp");
            }else if(user.getUser_type().equals("学生")){
                req.getSession().setAttribute("user",user);

                String book_name=req.getParameter("book_name");
                String type_name=req.getParameter("type_name");
                BooksServices service=new BooksServices();
                List<Books> booksList= service.queryBooks(book_name,type_name);
                    req.getSession().setAttribute("books", booksList);
                    resp.sendRedirect("studentlogin.jsp");


            }else{
                req.getSession().setAttribute("msg","没有该用户信息,请重新确认后登录");
                resp.sendRedirect("index.jsp");
            }
        }else{
            req.getSession().setAttribute("msg","没有该用户信息,请重新确认后登录");
            resp.sendRedirect("index.jsp");
        }



    }
}

package cn.kgc.kb07.servlet;

import cn.kgc.kb07.entity.Books;
import cn.kgc.kb07.service.BooksServices;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @Author yanglitian
 * @Date 2020/6/15
 * @Description
 */
public class QueryBooksServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String book_name=req.getParameter("book_name");
        String type_name=req.getParameter("type_name");
        BooksServices services=new BooksServices();
        List<Books> booksList= services.queryBooks(book_name,type_name);

            req.getSession().setAttribute("books",booksList);
            resp.sendRedirect("studentlogin.jsp");

    }
}

猜你喜欢

转载自blog.csdn.net/yanglitian_123/article/details/106791805