JavaWeb学习——Servlet&JSP实现用户查询案例(19)

准备环境

1.创建新的模块brand_demo引入坐标
2.创建三层架构的包结构
先新建一个maven项目
在这里插入图片描述然后修改pom文件,将打包方式改为war,并且刷新
在这里插入图片描述然后补全Web的文件夹
在这里插入图片描述

选择web.xml为3.0以上的都可以

在这里插入图片描述然后把web-info拖到webapp下面
在这里插入图片描述
最终变成这样的结构

在这里插入图片描述

这样模块便创建完了,再来引入对应的坐标

<!--    tomcat-plugin-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>
<dependencies>
        <!--        mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--        mysql-connector-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!--        servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--        jsp-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <!--        jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--        standard-->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>

3.创建数据库表tb_brand,创建过程不再赘述
在这里插入图片描述

4.把实体类Brand放在pojo层下面
由于实体类Brand可以用alt+ins来选择setter和getter以及tostring来解决便不再赘述

在这里插入图片描述

5.搭建MyBatis基础环境

  • MyBatis-config.xml
  • BrandMapper.xml
  • BrandMapper接口

将mybatis-config.xml放在resources下面,作为mybatis的核心配置文件
并修改url与名字密码、文件夹名称、数据库名等,以及修改字符&amp;useUnicode=true&amp;characterEncoding=utf8
在这里插入图片描述接下来是brandmapper映射文件
在resources下面创建对应文件夹,再把brandmapper放进去
在这里插入图片描述这时候BrandMapper会报红,因为我们没有对应的映射接口,因此只要创建一个接口即可
在这里插入图片描述

制作功能

查询所有

分析:有个页面叫index.html里面有个按钮,点击就会查询到数据表tb_brand里面所有的数据
在Dao层,我们创建sql语句,并把结果封装成一个List集合,在Service层,我们调用brandmapper去返回这个结果,封装成一个方法来保证这些方法能复用,在Web层,我们将调用Service层的selectAll方法把数据库存到request并转发给jsp来遍历,而jsp执行遍历输出即可

在这里插入图片描述
首先,在mapper里面创建一个selectAll的方法
在这里插入图片描述由于我们是把这个selectAll放到service层去重复调用的,所以我们需要在service文件夹里面创建一个service层,里面再写个selectAll方法来接收在dao层里面的selectAll方法
在这里插入图片描述这时候我们还需要调用sqlsessionfactory,由于它是一个固定的配置,并且提供了一个叫做sqlSessionFactory的方法来获取sqlSessionFactory对象的,因此我们复制粘贴到util文件夹下即可
在这里插入图片描述

package com.hoorus.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

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;
    }
}

因此我们在service里面通过factory来获取sqlSessionFactory对象以及对方法进行调用
在这里插入图片描述接下来写controller(web)层的代码
由于我们需要一个按钮来触发selectAll,因此需要写一个静态页面index.html
在这里插入图片描述
然后在java/web目录下创建一个servlet来接收来自刚刚index.html里那个按钮的响应
在这里插入图片描述
servlet的模板可以在设置中改
在这里插入图片描述
那么在这个servlet里面我们需要完成:

@WebServlet(name = "selectAllServlet", value = "/selectAllServlet")
public class selectAllServlet extends HttpServlet {
    //1.调用BrandService完成查询
    private BrandService service = new BrandService();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        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) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

这时存入request的数据就会被转发到brand.jsp中,这时我们写一个brand.jsp放在与index同级的目录下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ 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="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
    <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="#">修改</a> <a href="#">删除</a></td>
        </tr>
    </c:forEach>
</table>
<hr>
</body>
</html>

然后我们启动项目,访问index页面

在这里插入图片描述在这里插入图片描述发现访问成功,但是我们品牌名称与企业名称没有值,想想也知道是因为数据库里的字段值与Dao层调用时候的名称不一样,解决办法:用一个resultmap映射一下,在resource包下面的mapper包里面的BrandMapper配置映射

在这里插入图片描述

然后就需要在对应的brandMapper映射里面来使用
加一句:@ResultMap("brandResultMap")
在这里插入图片描述
然后重启项目发现显示了名称
在这里插入图片描述查询成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值