一、项目描述
完成品牌数据的增删改查操作
二、环境准备
2.1、创建新的模块 brand_demo,在pom.xml中引入项目需要坐标
2.1.1、依赖:mybatis、mysql、servlet、jsp-api、
2.2.2、插件:tomcat7-maven-plugin
2.2、创建三层架构的包结构:三层架构是将我们的项目分成了三个层面,分别是:表现层 、业务逻辑层 、数据访问层。
1、数据访问层(web/controller):对数据库的CRUD基本操作
2、业务逻辑层(service):对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业务逻辑功能。
例如注册业务功能 ,我们会先调用数据访问层的 selectByName() 方法判断该用户名是否存在,如果不存在再调用数据访问层的insert()方法进行数据的添加操作
3、表现层(mapper/dao):接收请求,封装数据,调用业务逻辑层,响应数据
2.3、数据库表 tb_brand
2.4、实体类 Brand
2.5、MyBatis 基础环境
Mybatis-config.xml
BrandMapper.xml
BrandMapper接口
三、增删改查
3.1、查询所有操作
3.1.1、流程图
3.1.2、编写BrandMapper:在mapper包下创建创建BrandMapper接口,在接口中定义 selectAll()方法
/**
* 查询所有
* @return
*/
@Select("select * from tb_brand")
List<Brand> selectAll();
3.1.3、编写工具类:在 com.itheima 包下创建 utils 包,并在该包下创建名为 SqlSessionFactoryUtils 工具类
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//静态代码块会随着类的加载而自动执行,且只执行一次
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
3.1.4、 编写BrandService:在service包下创建BrandService类
public class BrandService {
SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
/**
* 查询所有
* @return
*/
public List<Brand> selectAll(){
//调用BrandMapper.selectAll()
//2. 获取SqlSession
SqlSession sqlSession = factory.openSession();
//3. 获取BrandMapper
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
//4. 调用方法
List<Brand> brands = mapper.selectAll();
sqlSession.close();
return brands;
}
}
3.1.5、 编写Servlet
在 web 包下创建名为 SelectAllServlet 的 servlet ,该 servlet 的逻辑如下:
1、调用 BrandService 的 selectAll() 方法进行业务逻辑处理,并接收返回的结果
2、将上一步返回的结果存储到 request 域对象中
3、跳转到 brand.jsp 页面进行数据的展示
@WebServlet("/selectAllServlet")
public class SelectAllServlet extends HttpServlet {
private BrandService service = new BrandService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
//1. 调用BrandService完成查询
List<Brand> brands = service.selectAll();
//2. 存入request域中
request.setAttribute("brands",brands);
//3. 转发到brand.jsp
request.getRequestDispatcher("/brand.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
this.doGet(request, response);
}
}
3.1.6、 编写brand.jsp页面
<%--有坑,要设置isELIgnored="false" 不然无法解析brands,${brands}只会被当成字符输出--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="button" value="新增" id = "add"><br>
<hr>
<table border="1" cellspacing="0" width="80%">
<tr>
<th>序号</th>
<th>品牌名称</th>
<th>企业名称</th>
<th>排序</th>
<th>品牌介绍</th>
<th>状态</th>
<th>操作</th>
</tr>
<c:forEach items="${brands}" var="brand" varStatus="status ">
<tr align="center">
<td>${brand.id}</td>
<%--<td>${status.count}</td>--%>
<td>${brand.brandName}</td>
<td>${brand.companyName}</td>
<td>${brand.ordered}</td>
<td>${brand.description}</td>
<c:if test="${brand.status == 1}">
<td>启用</td>
</c:if>
<c:if test="${brand.status != 1}">
<td>禁用</td>
</c:if>
<td><a href="/brand_demo/selectByIdServlet?id=${brand.id}">修改</a> <a href="#">删除</a></td>
</tr>
</c:forEach>
</table>
<script>
document.getElementById("add").onclick = function (){
location.href = "/brand_demo/addBrand.jsp";
}
</script>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。