mybatis:图书管理项目
一、连接数据库,建立数据库及
二、使用mybatis连接数据库,查询
1)、搭建mybatis环境
jar包引入
mysql-connect-java-5.x.jar
mybatis-3.2.2.jar
tomcat
工具包
junit(单元测试)4.12+hamcrest-core-1.3
log4j
jstl+standard
配置tomcat
2)、mybatis配置文件
<!--xml头的配置-->
<?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="db.properties"></properties>
<!--alias配置别名-->
<typeAliases>
<typeAlias type="cn.kgc.kb07.entity.User" alias="user"/>
<typeAlias type="cn.kgc.kb07.entity.Book" alias="book"/>
</typeAliases>
<!--连接配置,环境,与数据库进行连接-->
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!--这边name固定-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
<!--mapper映射文件配置-->
<mappers>
<mapper resource="cn/kgc/kb07/dao/UserMapper.xml"></mapper>
<mapper resource="cn/kgc/kb07/dao/BookMapper.xml"></mapper>
</mappers>
</configuration>
数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.56.109:3306/library
user=kb07-9
pwd=ok
3)、开发dao层(创建接口、及映射文件、 创建实体类)
src下的目录如下:
1)、创建UserMapper、BookMapper接口
例:
public interface BookMapper {
public List<Book> query(Map map);
}
2)、配置UserMappe.xml、BookMapper.xml映射文件(为mybatis配置文件中mapper映射文件相关联)
例:
<?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">
<!--上面部分主要是将mybatis中相对应的config改为mapper-->
<!--namespace不可少,映射对应路径-->
<mapper namespace="cn.kgc.kb07.dao.BookMapper">
<!--sql语句及动态语句编写-->
<select id="query" resultType="book" parameterType="map">
select a.book_id,a.book_name,a.price,a.store,a.des,b.type_name,c.buy_date,d.delay_money
from tb_books a
join tb_book_type b on a.book_type=b.type_id
join tb_buy c on c.book_id=a.book_id
join tb_borrow d on d.book_id=a.book_id
join tb_user e on e.user_id=d.uid
where 1=1
<if test="bookName!=null and bookName!=''">
and a.book_name like concat("%",#{bookName},"%")
</if>
<if test="username!=null and username!=''">
and e.user_name like concat("%",#{username},"%")
</if>
<if test="bookType!=null and bookType!=''">
and b.type_name=#{bookType}
</if>
</select>
</mapper>
3)、在entity层中编写Book类
public class Book {
private int book_id;
private String book_name;
private double price;
private int store;
private String des;
private String type_name;
private Date buy_date;
private double delay_money;
...
//以下get,set方法不可省略
//构造方法,toString方法需要则加
}
4)、在编写services层前先提取一个Mapperconfig类
public class Mapperconfig {
//SqlSessionFactory的对象创建
private static SqlSessionFactory factory;
static {
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
try {
InputStream is= Resources.getResourceAsStream("mybatis-cnf.xml");
factory=builder.build(is);//配置文件加载
} catch (IOException e) {
e.printStackTrace();
}
}
//确认事务是否需要开启,非事务的情况下,请把自动提交开启
public static SqlSession getSession(boolean autoCommit){
return factory.openSession(autoCommit);
}
//私有,不给其他类调用
private Mapperconfig(){}
}
5)、services层中编写接口及相关实现类
BookService接口
public interface BookService {
List<Book> query(String bookName,String username,String bookType);
}
BookServiceImpl实现类
//接受前端页面传入的数据
public List<Book> query(String bookName, String username, String bookType) {
SqlSession session= Mapperconfig.getSession(true);
Map map =new HashMap();
map.put("bookName",bookName);
map.put("username",username);
map.put("bookType",bookType);
//通过反射方式来调用BookMapper中的方法
List<Book> bookList=
session.getMapper(BookMapper.class).query(map);
System.out.println(bookList);
//SqlSession使用结束后就要进行关闭,防止占用资源
session.close();
return bookList;
}
6)、servlet层重写方法
//与前端进行连接,获取数据,返回数据
public class BookListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码格式,防止乱码,会导致数据为空
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//获取数据
String bookName=req.getParameter("bookName");
String username=req.getParameter("username");
String bookType=req.getParameter("bookType");
// System.out.println(bookName);
// System.out.println(username);
// System.out.println(bookType);
//调用方法
BookService service=new BookServiceImpl();
List<Book> bookList=service.query(bookName,username,bookType);
System.out.println(bookList);
//进行重定向,返回数据
req.getSession().setAttribute("bookList",bookList);
resp.sendRedirect("bookList.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
三、 前端页面
1)、web.xml配置(中转站)
<servlet>
<servlet-name>bookList</servlet-name>
<servlet-class>
cn.kgc.kb07.servlet.BookListServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bookList</servlet-name>
<url-pattern>/bookList.do</url-pattern>
</servlet-mapping>
<!--servlet-name取名要相同-->
<!--servlet-class,相关servlet类的路径-->
<!--url-pattern,页面传来路径-->
2)、编写bookList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!--c标签引入-->
<html>
<head>
<title>图书列表</title>
</head>
<body>
<!--建表-->
<form action="bookList.do" method="get">
<p>
图书名称:<input type="text" name="bookName">
借书人姓名:<input type="text" name="username">
图书类型:<input type="text" name="bookType">
<input type="submit" value="查询">
<a href="bookadd.jsp">添加订单</a>
</p>
</form>
<table border="1">
<tr>
<th>图书编号</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.des}</td>
<td>${book.type_name}</td>
<td>${book.buy_date}</td>
<td>${book.delay_money}</td>
</tr>
</c:forEach>
<%session.invalidate();%>
<!--session使用完记得销毁-->
</table>
</body>
</html>