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