一、我的项目形容
实现品牌数据的增删改查操作
二、环境筹备
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>