使用mybatis做图书馆管理的小项目
要求如上图所示,建表也按照图中的来,过程就不附上0.0
- 简单分析一下怎么去完成要求
1.实现用户登录
前端页面通过表单提交用户名信息
servlet接收前端用户名数据,将其作为参数调用dao层对应接口到数据库的用户表中查询相关信息,并返回用户对象(若不存在该用户则返回null)
servlet根据返回的对象用户对象是否为null分别设置对应的session属性,并通过重定向跳转到前端页面进行进行信息展示
2.查看图书信息
前端用户通过表单提交请求,并跳转到servlet进行处理
servlet调用dao层相关接口进行查询,返回一个图书实体类集合
servlet对集合进行判断,若为null则向前端提交查询失败会话,否则将集合通过session传递到前端
通过jsp的标签对集合进行遍历,显示所有图书信息
展示图书信息的同时给用户提供查询借书信息选项,提交的信息包括用户姓名,书名,图书类),并通过模糊查询到后端进行数据查询
3.模糊查询
servlet接收前端传入的字符属性
由于接收的属性为String类型,可能会存在空值,这时需要使用mybatis的动态SQL技术从而避免SQL异常
由于参数为多个,所以采用map集合的方式进行参数传递
查询后返回一个借书信息对象,在servlet对此对象进行判断是否为空
若为空,则提示用户未查询到相关信息,否则展示相关借书记录
- 接下来就是代码时间 因为实力有限没办法讲的很清晰易懂 请各位大佬见谅 大家一起成长 ^ o ^
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://169.254.72.103:3306/book
username=kb07
password=ok
package cn.kgc.book.entity;
import java.util.Date;
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 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;
}
}
package cn.kgc.book.entity;
public class User {
private int user_id;
private String user_name;
private String user_grade;
private String 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 String getUser_grade() {
return user_grade;
}
public void setUser_grade(String user_grade) {
this.user_grade = user_grade;
}
public String getUser_type() {
return user_type;
}
public void setUser_type(String user_type) {
this.user_type = user_type;
}
}
package cn.kgc.book.dao;
import cn.kgc.book.entity.Book;
import cn.kgc.book.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.book.dao.BookMapper">
<select id="queryUserByName" parameterType="string" resultType="user">
select * from tb_user where user_name=#{username};
</select>
<select id="queryAllBooks" resultType="Book">
select * from tb_book join book_type on type_id=book_type;
</select>
<select id="queryBooksByName" parameterType="map" resultType="book">
select * from tb_book join tb_borrow on tb_book.book_id=borrow_id
join book_type on tb_book.book_type=book_type.type_id
join tb_user on tb_borrow.user_id=tb_user.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>
</where>
</select>
</mapper>
package cn.kgc.book.servlet;
import cn.kgc.book.dao.BookMapper;
import cn.kgc.book.entity.Book;
import cn.kgc.book.util.MapperConfig;
import com.sun.org.apache.regexp.internal.RE;
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.List;
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");
}
}
}
package cn.kgc.book.servlet;
import cn.kgc.book.dao.BookMapper;
import cn.kgc.book.entity.Book;
import cn.kgc.book.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;
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");
}
}
}
package cn.kgc.book.servlet;
import cn.kgc.book.dao.BookMapper;
import cn.kgc.book.entity.User;
import cn.kgc.book.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;
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session=req.getSession();
String username=req.getParameter("username");
User user=null;
//判空
if (username==null || username.equals("")){
session.setAttribute("msg","用户不存在");
resp.sendRedirect("index.jsp");
}else {
SqlSession sqlSession= MapperConfig.getSession();
user=sqlSession.getMapper(BookMapper.class).queryUserByName(username);
if (user!=null){
session.setAttribute("msg","登录成功");
session.setAttribute("user",user);
resp.sendRedirect("loginSuccess.jsp");
}else {
session.setAttribute("msg","用户不存在");
resp.sendRedirect("index.jsp");
}
}
}
}
package cn.kgc.book.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;
public class MapperConfig {
private static SqlSessionFactory factory;
static {
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
factory=builder.build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
return factory.openSession(true);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<%
Object msg=session.getAttribute("msg");
if (msg==null || msg.equals("")){
%>
<form action="login.do" method="get">
<p>用户名:<input type="text" name="username"></p>
<p><input type="submit" value="点我登录"></p>
</form>
<%
}else {
out.print(msg);
%>
<form action="login.do" method="get">
<p>用户名:<input type="text" name="username"></p>
<p><input type="submit" value="点我登录"></p>
</form>
<%
}
session.removeAttribute("msg");
%>
</body>
</html>
<?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.book.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.book.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.book.servlet.GetBookByNameServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetBookByNameServlet</servlet-name>
<url-pattern>/getBookByName.do</url-pattern>
</servlet-mapping>
</web-app>
或有错误 仅供参考 见谅~~~~~~~~~