您的位置:首页 > 其它

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

2020-06-16 17:37 190 查看

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

在数据库中建库建表


建立相关外键,画出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");

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐