一、项目描述

完成品牌数据的增删改查操作

image.png

二、环境准备

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):接收请求,封装数据,调用业务逻辑层,响应数据

image.png
image.png


2.3、数据库表 tb_brand

image.png


2.4、实体类 Brand

image.png


2.5、MyBatis 基础环境
        Mybatis-config.xml
        BrandMapper.xml
        BrandMapper接口

三、增删改查

3.1、查询所有操作
    3.1.1、流程图

image.png


    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>


红星哥哥
1 声望0 粉丝

努力学习的打工人