一、需求
使用 springmvc 和 mybatis 完成商品列表查询。
项目结构:
二、整合 mybatis
2.1 sqlMapConfig.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>
<typeAliases>
<package name="lxf.po"/>
</typeAliases>
<!-- 配置加载 mappers
由于使用 spring 和 mybatis 整合使用 MapperScannerConfigurer 扫描;
所以这里就不需要配置 mappers 了。 不过扫描的mapper.xml 和 mapper.java 需同名且在同一目录下。
-->
</configuration>
2.1 db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testMy**
jdbc.username=**
jdbc.password=**
2.3 applicationContext-dao.xml:
po 类和 mapper 接口类 可以用逆向工程生成,也可以自己创建。不过逆向工程生成的文件只是适用于 单表增删改查。
笔者这里的是逆向工程,可以参考下。
2.4 Products.java:
package lxf.po;
import java.util.Date;
public class Products {
private Integer id;
private String name;
private Float price;
private String pic;
private Date createtime;
private String detail;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic == null ? null : pic.trim();
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail == null ? null : detail.trim();
}
}
逆向工程还会生成 ProductsExample.java ,ProductsMapper.java ,ProductsMapper.xml 文件,这篇文章的重点是 整合 mybatis ,所以 没用到的文件 就不一一列举了,有兴趣的看官欢迎点击 文末的源码。
2.5 ProductsCustomMapper.xml:
上图的查询虽然 sql 语句很简单,但我们是为了模拟联合查询,这时候就必须使用 包装对象 和 扩展对象了。
2.6 ProductsCustom.java:
package lxf.po;
//商品信息扩展类
public class ProductsCustom extends Products{
//这里可以再 添加商品信息的扩展信息
}
2.7 ProductsQueryVo.java:
package lxf.po;
//商品包装对象(查询条件)
public class ProductsQueryVo {
private ProductsCustom productsCustom;
//这里可以添加 其他类 查询条件
public ProductsCustom getProductsCustom() {
return productsCustom;
}
public void setProductsCustom(ProductsCustom productsCustom) {
this.productsCustom = productsCustom;
}
}
三、整合 Service 层:
3.1 ProductsService.java:
3.2 ProductsServiceImpl.java:
3.3 applicationContext-service.xml:
3.4 事务管理:
applicationContext-transaction.xml:
四、整合 springMVC:
4.1 配置前端控制器
web.xml:
4.2 配置处理器映射器、适配器,视图解析器
springmvc.xml:
4.3 ProductsController.java:
4.4 productsList.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询商品列表</title>
</head>
<body>
<!-- <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查询"/></td>
</tr>
</table> -->
商品列表:
<table width="100%" border=1>
<tr>
<td>商品名称</td>
<td>商品价格</td>
<td>生产日期</td>
<td>商品描述</td>
<!-- <td>操作</td> -->
</tr>
<c:forEach items="${proList }" var="pro">
<tr>
<td width="18%">${pro.name }</td>
<td width="18%">${pro.price }</td>
<td width="18%"><fmt:formatDate value="${pro.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${pro.detail }</td>
<!-- <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td> -->
</tr>
</c:forEach>
</table>
</form>
</body>
</html>
五、加载 spring 容器
5.1 web.xml:
六、测试
测试地址:http://localhost:8080/springMVCAndMybatis/queryProducts.action
结果: