图书管理系统模块,通过模糊查询实现查找图书的功能
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"); } }
相关文章推荐
- 模块管理常规功能自己定义系统的设计与实现(36--终级阶段 综合查询[3])
- 模块管理常规功能自定义系统的设计与实现(36--终级阶段 综合查询[3])
- 设计与实现模块管理系统的基本功能定义自己的(38--终极阶段 综合查询[5])
- json数组实现图书管理系统——图书管理、查询、前台分页功能
- 模块管理常规功能自定义系统的设计与实现(39--终级阶段 综合查询[6])
- 模块管理常规功能自定义系统的设计与实现(41--终级阶段 综合查询[8]分类汇总)
- 模块管理常规功能自定义系统的设计与实现(37--终级阶段 综合查询[4])
- 模块管理常规功能自定义系统的设计与实现(34--终级阶段 综合查询[1])
- 模块管理常规功能自定义系统的设计与实现(35--终级阶段 综合查询[2])
- 模块管理常规功能自定义系统的设计与实现(23--二个模块之间的关联[1])
- 模块管理常规功能自定义系统的设计与实现(15--进一步完善"省份"模块)
- JavaWeb实现学生管理系统(增删改查、登陆注册、分页显示、模糊查询)
- 模块管理常规功能自定义系统的设计与实现(17--模块数据的导出和打印[2])
- 模块管理常规功能自定义系统的设计与实现(54--视频讲解更新高清 )
- 模块管理常规功能自定义系统的设计与实现(22--第二个模块的加入)
- 模块管理常规功能自定义系统的设计与实现(33--权限设计[3])
- 模块管理常规功能自己定义系统的设计与实现(22--第二个模块的增加)
- Servlet+JSP+JDBC设计实现图书系统——管理功能实现
- 图书管理系统读写功能实现
- 模块管理常规功能自定义系统的设计与实现(11--Grid导航设计初步[1])