最后
其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)
《前端开发四大模块核心知识笔记》
最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
2.2 导入 JSP 依赖
在 dependencies
标签中导入 JSP 的依赖,如下
javax.servlet.jsp
jsp-api
2.2
provided
该依赖的 scope
必须设置为 provided
,因为 tomcat 中有这个jar包了,所以在打包时我们是不希望将该依赖打进到我们工程的war包中。
2.3 创建 jsp 页面
在项目的 webapp
下创建jsp页面
通过上面方式创建一个名为 hello.jsp
的页面。
2.4 编写代码
在 hello.jsp
页面中书写 HTML
标签和 Java
代码,如下
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
hello jsp
<%
System.out.println(“hello,jsp~”);
%>
2.5 测试
启动服务器并在浏览器地址栏输入 http://localhost:8080/jsp-demo/hello.jsp
,我们可以在页面上看到如下内容
同时也可以看到在 idea
的控制台看到输出的 hello,jsp~
内容。
我们之前说 JSP 就是一个页面,那么在 JSP 中写 html
标签,我们能理解,但是为什么还可以写 Java
代码呢?
因为 ==JSP 本质上就是一个 Servlet。==接下来我们聊聊访问jsp时的流程
-
浏览器第一次访问
hello.jsp
页面 -
tomcat
会将hello.jsp
转换为名为hello_jsp.java
的一个Servlet
-
tomcat
再将转换的servlet
编译成字节码文件hello_jsp.class
-
tomcat
会执行该字节码文件,向外提供服务
我们可以到项目所在磁盘目录下找 target\tomcat\work\Tomcat\localhost\jsp-demo\org\apache\jsp
目录,而这个目录下就能看到转换后的 servlet
打开 hello_jsp.java
文件,来查看里面的代码
由上面的类的继承关系可以看到继承了名为 HttpJspBase
这个类,那我们在看该类的继承关系。到资料中的找如下目录: 资料\tomcat源码\apache-tomcat-8.5.68-src\java\org\apache\jasper\runtime
,该目录下就有 HttpJspBase
类,查看该类的继承关系
可以看到该类继承了 HttpServlet
;那么 hello_jsp
这个类就间接的继承了 HttpServlet
,也就说明 hello_jsp
是一个 servlet
。
继续阅读 hello_jsp
类的代码,可以看到有一个名为 _jspService()
的方法,该方法就是每次访问 jsp
时自动执行的方法,和 servlet
中的 service
方法一样 。
而在 _jspService()
方法中可以看到往浏览器写标签的代码:
以前我们自己写 servlet
时,这部分代码是由我们自己来写,现在有了 jsp
后,由tomcat完成这部分功能。
JSP脚本用于在 JSP页面内定义 Java代码。在之前的入门案例中我们就在 JSP 页面定义的 Java 代码就是 JSP 脚本。
4.1 JSP 脚本分类
JSP 脚本有如下三个分类:
-
<%…%>:内容会直接放到_jspService()方法之中
-
<%=…%>:内容会放到out.print()中,作为out.print()的参数
-
<%!…%>:内容会放到_jspService()方法之外,被类直接包含
代码演示:
在 hello.jsp
中书写
<%
System.out.println(“hello,jsp~”);
int i = 3;
%>
通过浏览器访问 hello.jsp
后,查看转换的 hello_jsp.java
文件,i 变量定义在了 _jspService()
方法中
在 hello.jsp
中书写
<%=“hello”%>
<%=i%>
通过浏览器访问 hello.jsp
后,查看转换的 hello_jsp.java
文件,该脚本的内容被放在了 out.print()
中,作为参数
在 hello.jsp
中书写
<%!
void show(){}
String name = “zhangsan”;
%>
通过浏览器访问 hello.jsp
后,查看转换的 hello_jsp.java
文件,该脚本的内容被放在了成员位置
4.2 案例
4.2.1 需求
使用JSP脚本展示品牌数据
说明:
-
在资料
资料\1. JSP案例素材
中提供了brand.html
静态页面 -
在该案例中数据不从数据库中查询,而是在 JSP 页面上写死
4.2.2 实现
-
将资料
资料\1. JSP案例素材
中的Brand.java
文件放置到项目的com.itheima.pojo
包下 -
在项目的
webapp
中创建brand.jsp
,并将brand.html
页面中的内容拷贝过来。brand.jsp
内容如下
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
现在页面中的数据都是假数据。
- 在
brand.jsp
中准备一些数据
<%
// 查询数据库
List brands = new ArrayList();
brands.add(new Brand(1,“三只松鼠”,“三只松鼠”,100,“三只松鼠,好吃不上火”,1));
brands.add(new Brand(2,“优衣库”,“优衣库”,200,“优衣库,服适人生”,0));
brands.add(new Brand(3,“小米”,“小米科技有限公司”,1000,“为发烧而生”,1));
%>
==注意:==这里的类是需要导包的
- 将
brand.jsp
页面中的table
标签中的数据改为动态的
<%
for (int i = 0; i < brands.size(); i++) {
//获取集合中的 每一个 Brand 对象
Brand brand = brands.get(i);
}
%>
1 三只松鼠 三只松鼠 100 三只松鼠,好吃不上火 启用 修改 删除上面的for循环需要将 tr
标签包裹起来,这样才能实现循环的效果,代码改进为
<%
for (int i = 0; i < brands.size(); i++) {
//获取集合中的 每一个 Brand 对象
Brand brand = brands.get(i);
%>
1 三只松鼠 三只松鼠 100 三只松鼠,好吃不上火 启用 修改 删除<%
}
%>
注意:<%%> 里面写的是 Java 代码,而外边写的是 HTML 标签
上面代码中的 td
标签中的数据都需要是动态的,所以还需要改进
<%
for (int i = 0; i < brands.size(); i++) {
//获取集合中的 每一个 Brand 对象
Brand brand = brands.get(i);
%>
<%=brand.getId()%> <%=brand.getBrandName()%> <%=brand.getCompanyName()%> <%=brand.getOrdered()%> <%=brand.getDescription()%> <%=brand.getStatus() == 1 ? "启用":"禁用"%> 修改 删除<%
}
%>
4.2.3 成品代码
<%@ page import=“com.itheima.pojo.Brand” %>
<%@ page import=“java.util.List” %>
<%@ page import=“java.util.ArrayList” %>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<%
// 查询数据库
List brands = new ArrayList();
brands.add(new Brand(1,“三只松鼠”,“三只松鼠”,100,“三只松鼠,好吃不上火”,1));
brands.add(new Brand(2,“优衣库”,“优衣库”,200,“优衣库,服适人生”,0));
brands.add(new Brand(3,“小米”,“小米科技有限公司”,1000,“为发烧而生”,1));
%>
<%
for (int i = 0; i < brands.size(); i++) {
Brand brand = brands.get(i);
%>
<%=brand.getId()%> <%=brand.getBrandName()%> <%=brand.getCompanyName()%> <%=brand.getOrdered()%> <%=brand.getDescription()%> <%=brand.getStatus() == 1 ? "启用":"禁用"%> 修改 删除<%
}
%>
4.2.4 测试
在浏览器地址栏输入 http://localhost:8080/jsp-demo/brand.jsp
,页面展示效果如下
4.3 JSP 缺点
通过上面的案例,我们可以看到 JSP 的很多缺点。
由于 JSP页面内,既可以定义 HTML 标签,又可以定义 Java代码,造成了以下问题:
- 书写麻烦:特别是复杂的页面
既要写 HTML 标签,还要写 Java 代码
- 阅读麻烦
上面案例的代码,相信你后期再看这段代码时还需要花费很长的时间去梳理
-
复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE…
-
占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存
-
调试困难:出错后,需要找到自动生成的.java文件进行调试
-
不利于团队协作:前端人员不会 Java,后端人员不精 HTML
如果页面布局发生变化,前端工程师对静态页面进行修改,然后再交给后端工程师,由后端工程师再将该页面改为 JSP 页面
由于上述的问题, ==JSP 已逐渐退出历史舞台,==以后开发更多的是使用 HTML + Ajax 来替代。Ajax 是我们后续会重点学习的技术。有个这个技术后,前端工程师负责前端页面开发,而后端工程师只负责前端代码开发。下来对技术的发展进行简单的说明
-
第一阶段:使用
servlet
即实现逻辑代码编写,也对页面进行拼接。这种模式我们之前也接触过 -
第二阶段:随着技术的发展,出现了
JSP
,人们发现JSP
使用起来比Servlet
方便很多,但是还是要在JSP
中嵌套Java
代码,也不利于后期的维护 -
第三阶段:使用
Servlet
进行逻辑代码开发,而使用JSP
进行数据展示
- 第四阶段:使用
servlet
进行后端逻辑代码开发,而使用HTML
进行数据展示。而这里面就存在问题,HTML
是静态页面,怎么进行动态数据展示呢?这就是ajax
的作用了。
那既然 JSP 已经逐渐的退出历史舞台,那我们为什么还要学习 JSP
呢?原因有两点:
-
一些公司可能有些老项目还在用
JSP
,所以要求我们必须懂JSP
-
我们如果不经历这些复杂的过程,就不能体现后面阶段开发的简单
接下来我们来学习第三阶段,使用 EL表达式
和 JSTL
标签库替换 JSP
中的 Java
代码。
5.1 概述
EL(全称Expression Language )表达式语言,用于简化 JSP 页面内的 Java 代码。
EL 表达式的主要作用是 获取数据。其实就是从域对象中获取数据,然后将数据展示在页面上。
而 EL 表达式的语法也比较简单,== e x p r e s s i o n = = 。 例 如 : {expression}== 。例如: expression==。例如:{brands} 就是获取域中存储的 key 为 brands 的数据。
5.2 代码演示
- 定义servlet,在 servlet 中封装一些数据并存储到 request 域对象中并转发到
el-demo.jsp
页面。
@WebServlet(“/demo1”)
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 准备数据
List brands = new ArrayList();
brands.add(new Brand(1,“三只松鼠”,“三只松鼠”,100,“三只松鼠,好吃不上火”,1));
brands.add(new Brand(2,“优衣库”,“优衣库”,200,“优衣库,服适人生”,0));
brands.add(new Brand(3,“小米”,“小米科技有限公司”,1000,“为发烧而生”,1));
//2. 存储到request域中
request.setAttribute(“brands”,brands);
//3. 转发到 el-demo.jsp
request.getRequestDispatcher(“/el-demo.jsp”).forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
注意: 此处需要用转发,因为转发才可以使用 request 对象作为域对象进行数据共享
- 在
el-demo.jsp
中通过 EL表达式 获取数据
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
${brands}
- 在浏览器的地址栏输入
http://localhost:8080/jsp-demo/demo1
,页面效果如下:
5.3 域对象
JavaWeb中有四大域对象,分别是:
-
page:当前页面有效
-
request:当前请求有效
-
session:当前会话有效
-
application:当前应用有效
el 表达式获取数据,会依次从这4个域中寻找,直到找到为止。而这四个域对象的作用范围如下图所示
例如: ${brands},el 表达式获取数据,会先从page域对象中获取数据,如果没有再到 requet 域对象中获取数据,如果再没有再到 session 域对象中获取,如果还没有才会到 application 中获取数据。
6.1 概述
JSP标准标签库(Jsp Standarded Tag Library) ,使用标签取代JSP页面上的Java代码。如下代码就是JSTL标签
<c:if test=“${flag == 1}”>
男
</c:if>
<c:if test=“${flag == 2}”>
女
</c:if>
上面代码看起来是不是比 JSP 中嵌套 Java 代码看起来舒服好了。而且前端工程师对标签是特别敏感的,他们看到这段代码是能看懂的。
JSTL 提供了很多标签,如下图
我们只对两个最常用的标签进行讲解,<c:forEach>
标签和 <c:if>
标签。
JSTL 使用也是比较简单的,分为如下步骤:
- 导入坐标
jstl
jstl
1.2
taglibs
standard
1.1.2
- 在JSP页面上引入JSTL标签库
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
- 使用标签
6.2 if 标签
<c:if>
:相当于 if 判断
- 属性:test,用于定义条件表达式
<c:if test=“${flag == 1}”>
男
</c:if>
<c:if test=“${flag == 2}”>
女
</c:if>
代码演示:
- 定义一个
servlet
,在该servlet
中向 request 域对象中添加 键是status
,值为1
的数据
@WebServlet(“/demo2”)
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 存储数据到request域中
request.setAttribute(“status”,1);
//2. 转发到 jstl-if.jsp
数据request.getRequestDispatcher(“/jstl-if.jsp”).forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
- 定义
jstl-if.jsp
页面,在该页面使用<c:if>
标签
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%–
c:if:来完成逻辑判断,替换java if else
–%>
<c:if test=“${status ==1}”>
启用
</c:if>
<c:if test=“${status ==0}”>
禁用
</c:if>
注意: 在该页面已经要引入 JSTL核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
6.3 forEach 标签
<c:forEach>
:相当于 for 循环。java中有增强for循环和普通for循环,JSTL 中的 <c:forEach>
也有两种用法
6.3.1 用法一
类似于 Java 中的增强for循环。涉及到的 <c:forEach>
中的属性如下
-
items:被遍历的容器
-
var:遍历产生的临时变量
-
varStatus:遍历状态对象
如下代码,是从域对象中获取名为 brands 数据,该数据是一个集合;遍历遍历,并给该集合中的每一个元素起名为 brand
,是 Brand对象。在循环里面使用 EL表达式获取每一个Brand对象的属性值
<c:forEach items=“${brands}” var=“brand”>
${brand.id} ${brand.brandName} ${brand.companyName} ${brand.description}</c:forEach>
代码演示:
-
servlet
还是使用之前的名为ServletDemo1
。 -
定义名为
jstl-foreach.jsp
页面,内容如下:
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<c:forEach items=“${brands}” var=“brand” varStatus=“status”>
<%–${brand.id}–%>
${status.count} ${brand.brandName} ${brand.companyName} ${brand.ordered} ${brand.description}<c:if test=“${brand.status == 1}”>
启用</c:if>
<c:if test=“${brand.status != 1}”>
禁用</c:if>
修改 删除</c:forEach>
6.3.2 用法二
类似于 Java 中的普通for循环。涉及到的 <c:forEach>
中的属性如下
-
begin:开始数
-
end:结束数
-
step:步长
实例代码:
从0循环到10,变量名是 i
,每次自增1
<c:forEach begin=“0” end=“10” step=“1” var=“i”>
${i}
</c:forEach>
MVC 模式和三层架构是一些理论的知识,将来我们使用了它们进行代码开发会让我们代码维护性和扩展性更好。
7.1 MVC模式
MVC 是一种分层开发的模式,其中:
-
M:Model,业务模型,处理业务
-
V:View,视图,界面展示
-
C:Controller,控制器,处理请求,调用模型和视图
控制器(serlvlet)用来接收浏览器发送过来的请求,控制器调用模型(JavaBean)来获取数据,比如从数据库查询数据;控制器获取到数据后再交由视图(JSP)进行数据展示。
MVC 好处:
-
职责单一,互不影响。每个角色做它自己的事,各司其职。
-
有利于分工协作。
-
有利于组件重用
7.2 三层架构
三层架构是将我们的项目分成了三个层面,分别是 表现层
、业务逻辑层
、数据访问层
。
-
数据访问层:对数据库的CRUD基本操作
-
业务逻辑层:对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业务逻辑功能。例如
注册业务功能
,我们会先调用数据访问层
的selectByName()
方法判断该用户名是否存在,如果不存在再调用数据访问层
的insert()
方法进行数据的添加操作 -
表现层:接收请求,封装数据,调用业务逻辑层,响应数据
而整个流程是,浏览器发送请求,表现层的Servlet接收请求并调用业务逻辑层的方法进行业务逻辑处理,而业务逻辑层方法调用数据访问层方法进行数据的操作,依次返回到serlvet,然后servlet将数据交由 JSP 进行展示。
三层架构的每一层都有特有的包名称:
-
表现层:
com.itheima.controller
或者com.itheima.web
-
业务逻辑层:
com.itheima.service
-
数据访问层:
com.itheima.dao
或者com.itheima.mapper
后期我们还会学习一些框架,不同的框架是对不同层进行封装的
7.3 MVC 和 三层架构
通过 MVC 和 三层架构 的学习,有些人肯定混淆了。那他们有什么区别和联系?
如上图上半部分是 MVC 模式,上图下半部分是三层架构。 MVC 模式
中的 C(控制器)和 V(视图)就是 三层架构
中的表现层,而 MVC 模式
中的 M(模型)就是 三层架构
中的 业务逻辑层 和 数据访问层。
可以将 MVC 模式
理解成是一个大的概念,而 三层架构
是对 MVC 模式
实现架构的思想。 那么我们以后按照要求将不同层的代码写在不同的包下,每一层里功能职责做到单一,将来如果将表现层的技术换掉,而业务逻辑层和数据访问层的代码不需要发生变化。
需求:完成品牌数据的增删改查操作
这个功能我们之前一直在做,而这个案例是将今天学习的所有的内容(包含 MVC模式 和 三层架构)进行应用,并将整个流程贯穿起来。
8.1 环境准备
环境准备工作,我们分以下步骤实现:
-
创建新的模块 brand_demo,引入坐标
-
创建三层架构的包结构
-
数据库表 tb_brand
-
实体类 Brand
-
MyBatis 基础环境
-
Mybatis-config.xml
-
BrandMapper.xml
-
BrandMapper接口
8.1.1 创建工程
创建新的模块 brand_demo,引入坐标。我们只要分析出要用到哪儿些技术,那么需要哪儿些坐标也就明确了
-
需要操作数据库。mysql的驱动包
-
要使用mybatis框架。mybaits的依赖包
-
web项目需要用到servlet和jsp。servlet和jsp的依赖包
-
需要使用 jstl 进行数据展示。jstl的依赖包
pom.xml
内容如下:
<project xmlns=“http://maven.apache.org/POM/4.0.0”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.example
brand-demo
1.0-SNAPSHOT
war
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
org.mybatis
mybatis
3.5.5
mysql
mysql-connector-java
5.1.34
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
jsp-api
2.2
provided
jstl
jstl
1.2
taglibs
standard
1.1.2
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8.1.2 创建包
创建不同的包结构,用来存储不同的类。包结构如下
8.1.3 创建表
– 删除tb_brand表
drop table if exists tb_brand;
– 创建tb_brand表
create table tb_brand
(
– id 主键
id int primary key auto_increment,
– 品牌名称
brand_name varchar(20),
– 企业名称
company_name varchar(20),
– 排序字段
ordered int,
– 描述信息
description varchar(100),
– 状态:0:禁用 1:启用
status int
);
– 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values (‘三只松鼠’, ‘三只松鼠股份有限公司’, 5, ‘好吃不上火’, 0),
(‘华为’, ‘华为技术有限公司’, 100, ‘华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界’, 1),
(‘小米’, ‘小米科技有限公司’, 50, ‘are you ok’, 1);
8.1.4 创建实体类
在 pojo
包下创建名为 Brand
的类。
public class Brand {
// id 主键
private Integer id;
// 品牌名称
private String brandName;
// 企业名称
private String companyName;
// 排序字段
private Integer ordered;
// 描述信息
private String description;
// 状态:0:禁用 1:启用
private Integer status;
public Brand() {
}
public Brand(Integer id, String brandName, String companyName, String description) {
this.id = id;
this.brandName = brandName;
this.companyName = companyName;
this.description = description;
}
public Brand(Integer id, String brandName, String companyName, Integer ordered, String description, Integer status) {
this.id = id;
this.brandName = brandName;
this.companyName = companyName;
this.ordered = ordered;
this.description = description;
this.status = status;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getBrandName() {
return brandName;
}
public void setBrandName(String brandName) {
this.brandName = brandName;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public Integer getOrdered() {
return ordered;
}
public void setOrdered(Integer ordered) {
this.ordered = ordered;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
@Override
public String toString() {
return “Brand{” +
“id=” + id +
“, brandName='” + brandName + ‘’’ +
“, companyName='” + companyName + ‘’’ +
“, ordered=” + ordered +
“, description='” + description + ‘’’ +
“, status=” + status +
‘}’;
}
}
8.1.5 准备mybatis环境
定义核心配置文件 Mybatis-config.xml
,并将该文件放置在 resources
下
在 resources
下创建放置映射配置文件的目录结构 com/itheima/mapper
,并在该目录下创建映射配置文件 BrandMapper.xml
8.2 查询所有
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-818Vau8L-1642765224821)(assets/image-20210818174441917.png)]
当我们点击 index.html
页面中的 查询所有
这个超链接时,就能查询到上图右半部分的数据。
对于上述的功能,点击 查询所有
超链接是需要先请后端的 servlet
,由 servlet
跳转到对应的页面进行数据的动态展示。而整个流程如下图:
8.2.1 编写BrandMapper
在 mapper
包下创建创建 BrandMapper
接口,在接口中定义 selectAll()
方法
/**
- 查询所有
总结
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
rand{" +
“id=” + id +
“, brandName='” + brandName + ‘’’ +
“, companyName='” + companyName + ‘’’ +
“, ordered=” + ordered +
“, description='” + description + ‘’’ +
“, status=” + status +
‘}’;
}
}
8.1.5 准备mybatis环境
定义核心配置文件 Mybatis-config.xml
,并将该文件放置在 resources
下
在 resources
下创建放置映射配置文件的目录结构 com/itheima/mapper
,并在该目录下创建映射配置文件 BrandMapper.xml
8.2 查询所有
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-818Vau8L-1642765224821)(assets/image-20210818174441917.png)]
当我们点击 index.html
页面中的 查询所有
这个超链接时,就能查询到上图右半部分的数据。
对于上述的功能,点击 查询所有
超链接是需要先请后端的 servlet
,由 servlet
跳转到对应的页面进行数据的动态展示。而整个流程如下图:
[外链图片转存中…(img-c7VjA0CJ-1715873823098)]
8.2.1 编写BrandMapper
在 mapper
包下创建创建 BrandMapper
接口,在接口中定义 selectAll()
方法
/**
- 查询所有
总结
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。