中国建设银行网站企业网银,运营推广seo招聘,做一个自己的免费网站吗,用群晖nas做网站JSP案例8 案例8.1 环境准备8.1.1 创建工程8.1.2 创建包8.1.3 创建表8.1.4 创建实体类8.1.5 准备mybatis环境8.2 查询所有8.2.1 编写BrandMapper8.2.2 编写工具类8.2.3 编写BrandService8.2.4 编写Servlet8.2.5 编写brand.jsp页面8.2.6 测试8.3 添加8.3.1 编写BrandMapper方法8.…
JSP案例8 案例8.1 环境准备8.1.1 创建工程8.1.2 创建包8.1.3 创建表8.1.4 创建实体类8.1.5 准备mybatis环境8.2 查询所有8.2.1 编写BrandMapper8.2.2 编写工具类8.2.3 编写BrandService8.2.4 编写Servlet8.2.5 编写brand.jsp页面8.2.6 测试8.3 添加8.3.1 编写BrandMapper方法8.3.2 编写BrandService方法8.3.3 改进brand.jsp页面8.3.4 编写addBrand.jsp页面8.3.5 编写servlet8.3.6 测试8.4 修改8.4.1 回显数据8.4.1.1 编写BrandMapper方法8.4.1.2 编写BrandService方法8.4.1.3 编写servlet8.4.1.4 编写update.jsp页面8.4.2 修改数据8.4.2.1 编写BrandMapper方法8.4.2.2 编写BrandService方法8.4.2.3 编写servlet8.4.3 测试8.5 删除8.5.1 编写BrandMapper方法8.5.2 编写BrandService方法8.5.3 编写Servlet8.5.4 修改brand.jsp页面8.5.5 测试目标 理解 JSP 及 JSP 原理能在 JSP中使用 EL表达式 和 JSTL标签理解 MVC模式 和 三层架构能完成品牌数据的增删改查功能 8 案例 需求完成品牌数据的增删改查操作
这个功能我们之前一直在做而这个案例是将今天学习的所有的内容包含 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 xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdbrand-demo/artifactIdpackagingwar/packagingversion1.0-SNAPSHOT/versionnamebrand-demo Maven Webapp/nameurlhttp://maven.apache.org/urldependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependency!--mybatis--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.5/version/dependency!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.29/version/dependency!--servlet--dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency!--jsp--dependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.2.1-b03/versionscopeprovided/scope/dependency!--jstl--dependencygroupIdjstl/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion1.1.2/version/dependency/dependenciesbuildfinalNamebrand-demo/finalName/build
/project
tomcat在configuration中部署。 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 的类。
package com.suki.pojo;public class Brand {private Integer id; //id 主键private String brandName; //品牌名称private String companyName; //企业名称private Integer ordered; //排序字段private String description; //描述信息private Integer status; //状态0-禁用 1-启用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;}Overridepublic String toString() {return Brand{ id id , brandName brandName \ , companyName companyName \ , ordered ordered , description description \ , status status };}
} 8.1.5 准备mybatis环境 定义核心配置文件 Mybatis-config.xml 并将该文件放置在 resources 下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--起别名--typeAliasespackage namecom.suki.pojo//typeAliasesenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql:///db1?useSSLfalseamp;useServerPrepStmtstrue/property nameusername valueroot/property namepassword value121121//dataSource/environment/environmentsmappers!--扫描mapper--package namecom.suki.mapper//mappers
/configuration在 resources 下创建放置映射配置文件的目录结构 com/suki/mapper并在该目录下创建映射配置文件 BrandMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.suki.mapper.BrandMapper/mapper8.2 查询所有 当我们点击 index.html 页面中的 查询所有 这个超链接时就能查询到上图右半部分的数据。
对于上述的功能点击 查询所有 超链接是需要先请后端的 servlet 由 servlet 跳转到对应的页面进行数据的动态展示。而整个流程如下图 8.2.1 编写BrandMapper 在 mapper 包下创建创建 BrandMapper 接口在接口中定义 selectAll() 方法
Select(select * from tb_brand) //查询所有
ListBrand selectAll();8.2.2 编写工具类
在 com.suki 包下创建 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;}
}8.2.3 编写BrandService 在 service 包下创建 BrandService 类
public class BrandService {SqlSessionFactory factory SqlSessionFactoryUtils.getSqlSessionFactory();/*** 查询所有* return*/public ListBrand selectAll(){//调用BrandMapper.selectAll()//2. 获取SqlSessionSqlSession sqlSession factory.openSession();//3. 获取BrandMapperBrandMapper mapper sqlSession.getMapper(BrandMapper.class);//4. 调用方法ListBrand brands mapper.selectAll();sqlSession.close();return brands;}
}8.2.4 编写Servlet 在 web 包下创建名为 SelectAllServlet 的 servlet该 servlet 的逻辑如下
调用 BrandService 的 selectAll() 方法进行业务逻辑处理并接收返回的结果将上一步返回的结果存储到 request 域对象中跳转到 brand.jsp 页面进行数据的展示
具体的代码如下
WebServlet(/selectAllServlet)
public class SelectAllServlet extends HttpServlet {private BrandService service new BrandService();Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.调用BrandService完成查询ListBrand brands service.selectAll();//2.存入request域中request.setAttribute(brands,brands);//3.转发到brand.jsprequest.getRequestDispatcher(/brand.jsp).forward(request,response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}8.2.5 编写brand.jsp页面 将资料 资料\2. 品牌增删改查案例\静态页面 下的 brand.html 页面拷贝到项目的 webapp 目录下并将该页面改成 brand.jsp 页面而 brand.jsp 页面在表格中使用 JSTL 和 EL表达式 从request域对象中获取名为 brands 的集合数据并展示出来。页面内容如下
% page contentTypetext/html;charsetUTF-8 languagejava isELIgnoredfalse %
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
hr
table border1 cellspacing0 width80%trth序号/thth品牌名称/thth企业名称/thth排序/thth品牌介绍/thth状态/thth操作/th/trc:forEach items${brands} varbrand varStatusstatustr aligncenter%--td${brand.id}/td--%td${status.count}/tdtd${brand.brandName}/tdtd${brand.companyName}/tdtd${brand.ordered}/tdtd${brand.description}/tdc:if test${brand.status 1}td启用/td/c:ifc:if test${brand.status ! 1}td禁用/td/c:iftda href/brand-demo/selectByIdServlet?id${brand.id}修改/a a href#删除/a/td/tr/c:forEach
/table
/body
/html注意在第一行要加上 isELIgnoredfalse不然无法正常显示
index.html中
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
bodya href/brand-demo/selectAllServlet查询所有/a
/body
/html 8.2.6 测试 启动服务器并在浏览器输入 http://localhost:8080/brand-demo/index.html看到如下 查询所有 的超链接点击该链接就可以查询出所有的品牌数据 为什么出现这个问题呢是因为查询到的字段名和实体类对象的属性名没有一一对应。相比看到这大家一定会解决了就是在映射配置文件中使用 resultMap 标签定义映射关系。映射配置文件内容如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.suki.mapper.BrandMapperresultMap idbrandResultMap typebrandresult columnbrand_name propertybrandName/resultresult columncompany_name propertycompanyName/result/resultMap
/mapper并且在 BrandMapper 接口中的 selectAll() 上使用 ResuleMap 注解指定使用该映射
/*** 查询所有* return*/
Select(select * from tb_brand)
ResultMap(brandResultMap)
ListBrand selectAll();重启服务器再次访问就能看到我们想要的数据了 8.3 添加 上图是做 添加 功能流程。点击 新增 按钮后会先跳转到 addBrand.jsp 新增页面在该页面输入要添加的数据输入完毕后点击 提交 按钮需要将数据提交到后端而后端进行数据添加操作并重新将所有的数据查询出来。整个流程如下 接下来我们根据流程来实现功能 8.3.1 编写BrandMapper方法 在 BrandMapper 接口在接口中定义 add(Brand brand) 方法
Insert(insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status}))
void add(Brand brand);8.3.2 编写BrandService方法 在 BrandService 类中定义添加品牌数据方法 add(Brand brand) /*** 添加* param brand*/public void add(Brand brand){//2. 获取SqlSessionSqlSession sqlSession factory.openSession();//3. 获取BrandMapperBrandMapper mapper sqlSession.getMapper(BrandMapper.class);//4. 调用方法mapper.add(brand);//提交事务sqlSession.commit();//释放资源sqlSession.close();}8.3.3 改进brand.jsp页面 我们需要在该页面表格的上面添加 新增 按钮
input typebutton value新增 idaddbr并给该按钮绑定单击事件当点击了该按钮需要跳转到 brand.jsp 添加品牌数据的页面
scriptdocument.getElementById(add).onclick function (){location.href /brand-demo/addBrand.jsp;}
/script注意该 script 标签建议放在 body 结束标签前面。 8.3.4 编写addBrand.jsp页面
从资料 资料\2. 品牌增删改查案例\静态页面 中将 addBrand.html 页面拷贝到项目的 webapp 下并改成 addBrand.jsp 动态页面
% page contentTypetext/html;charsetUTF-8 languagejava isELIgnoredfalse %
html
headmeta charsetUTF-8title添加品牌/title
/head
body
h3添加品牌/h3
form action/brand-demo/addServlet methodpost品牌名称input namebrandNamebr企业名称input namecompanyNamebr排序input nameorderedbr描述信息textarea rows5 cols20 namedescription/textareabr状态input typeradio namestatus value0禁用input typeradio namestatus value1启用brinput typesubmit value提交
/form
/body
/html8.3.5 编写servlet
在 web 包下创建 AddServlet 的 servlet该 servlet 的逻辑如下:
设置处理post请求乱码的字符集接收客户端提交的数据将接收到的数据封装到 Brand 对象中调用 BrandService 的add() 方法进行添加的业务逻辑处理跳转到 selectAllServlet 资源重新查询数据
具体的代码如下
WebServlet(/addServlet)
public class AddServlet extends HttpServlet {private BrandService service new BrandService();Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理POST请求的乱码问题request.setCharacterEncoding(utf-8);//1. 接收表单提交的数据封装为一个Brand对象String brandName request.getParameter(brandName);String companyName request.getParameter(companyName);String ordered request.getParameter(ordered);String description request.getParameter(description);String status request.getParameter(status);//封装为一个Brand对象Brand brand new Brand();brand.setBrandName(brandName);brand.setCompanyName(companyName);brand.setOrdered(Integer.parseInt(ordered));brand.setDescription(description);brand.setStatus(Integer.parseInt(status));//2. 调用service 完成添加service.add(brand);//3. 转发到查询所有Servletrequest.getRequestDispatcher(/selectAllServlet).forward(request,response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}8.3.6 测试
点击 brand.jsp 页面的 新增 按钮会跳转到 addBrand.jsp页面
点击 提交 按钮就能看到如下页面里面就包含我们刚添加的数据 8.4 修改 点击每条数据后面的 编辑 按钮会跳转到修改页面如下图
在该修改页面我们可以看到将 编辑 按钮所在行的数据 回显 到表单然后需要修改那个数据在表单中进行修改然后点击 提交 的按钮将数据提交到后端后端再将数据存储到数据库中。
从上面的例子我们知道 修改 功能需要从两方面进行实现数据回显和修改操作。 8.4.1 回显数据 上图就是回显数据的效果。要实现这个效果那当点击 修改 按钮时不能直接跳转到 update.jsp 页面而是需要先带着当前行数据的 id 请求后端程序后端程序根据 id 查询数据将数据存储到域对象中跳转到 update.jsp 页面进行数据展示。整体流程如下 8.4.1.1 编写BrandMapper方法
在 BrandMapper 接口在接口中定义 selectById(int id) 方法 /*** 根据id查询* param id* return*/Select(select * from tb_brand where id #{id})ResultMap(brandResultMap)Brand selectById(int id);8.4.1.2 编写BrandService方法
在 BrandService 类中定义根据id查询数据方法 selectById(int id) /*** 根据id查询* return*/public Brand selectById(int id){//调用BrandMapper.selectAll()//2. 获取SqlSessionSqlSession sqlSession factory.openSession();//3. 获取BrandMapperBrandMapper mapper sqlSession.getMapper(BrandMapper.class);//4. 调用方法Brand brand mapper.selectById(id);sqlSession.close();return brand;}8.4.1.3 编写servlet
在 web 包下创建 SelectByIdServlet 的 servlet该 servlet 的逻辑如下:
获取请求数据 id调用 BrandService 的 selectById() 方法进行数据查询的业务逻辑将查询到的数据存储到 request 域对象中跳转到 update.jsp 页面进行数据真实
具体代码如下
WebServlet(/selectByIdServlet)
public class SelectByIdServlet extends HttpServlet {private BrandService service new BrandService();Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 接收idString id request.getParameter(id);//2. 调用service查询Brand brand service.selectById(Integer.parseInt(id));//3. 存储到request中request.setAttribute(brand,brand);//4. 转发到update.jsprequest.getRequestDispatcher(/update.jsp).forward(request,response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}8.4.1.4 编写update.jsp页面
拷贝 addBrand.jsp 页面改名为 update.jsp 并做出以下修改 title 标签内容改为 修改品牌 form 标签的 action 属性值改为 /brand-demo/updateServlet input 标签要进行数据回显需要设置 value 属性 品牌名称input namebrandName value${brand.brandName}br
企业名称input namecompanyName value${brand.companyName}br
排序input nameordered value${brand.ordered}brtextarea 标签要进行数据回显需要在标签体中使用 EL表达式 描述信息textarea rows5 cols20 namedescription${brand.description} /textareabr单选框使用 if 标签需要判断 brand.status 的值是 1 还是 0 在指定的单选框上使用 checked 属性表示被选中状态 状态
c:if test${brand.status 0}input typeradio namestatus value0 checked禁用input typeradio namestatus value1启用br
/c:ifc:if test${brand.status 1}input typeradio namestatus value0 禁用input typeradio namestatus value1 checked启用br
/c:if综上update.jsp 代码如下
% page contentTypetext/html;charsetUTF-8 languagejava %
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %
!DOCTYPE html
html langen
headmeta charsetUTF-8title修改品牌/title
/head
body
h3修改品牌/h3
form action/brand-demo/updateServlet methodpost品牌名称input namebrandName value${brand.brandName}br企业名称input namecompanyName value${brand.companyName}br排序input nameordered value${brand.ordered}br描述信息textarea rows5 cols20 namedescription${brand.description} /textareabr状态c:if test${brand.status 0}input typeradio namestatus value0 checked禁用input typeradio namestatus value1启用br/c:ifc:if test${brand.status 1}input typeradio namestatus value0 禁用input typeradio namestatus value1 checked启用br/c:ifinput typesubmit value提交
/form
/body
/html8.4.2 修改数据
做完回显数据后接下来我们要做修改数据了而下图是修改数据的效果 在修改页面进行数据修改点击 提交 按钮会将数据提交到后端程序后端程序会对表中的数据进行修改操作然后重新进行数据的查询操作。整体流程如下 8.4.2.1 编写BrandMapper方法
在 BrandMapper 接口在接口中定义 update(Brand brand) 方法
/*** 修改* param brand*/
Update(update tb_brand set brand_name #{brandName},company_name #{companyName},ordered #{ordered},description #{description},status #{status} where id #{id})
void update(Brand brand);8.4.2.2 编写BrandService方法
在 BrandService 类中定义根据id查询数据方法 update(Brand brand) /*** 修改* param brand*/public void update(Brand brand){//2. 获取SqlSessionSqlSession sqlSession factory.openSession();//3. 获取BrandMapperBrandMapper mapper sqlSession.getMapper(BrandMapper.class);//4. 调用方法mapper.update(brand);//提交事务sqlSession.commit();//释放资源sqlSession.close();}8.4.2.3 编写servlet
在 web 包下创建 UpdateServlet 的 servlet该 servlet 的逻辑如下:
设置处理post请求乱码的字符集接收客户端提交的数据将接收到的数据封装到 Brand 对象中调用 BrandService 的update() 方法进行添加的业务逻辑处理跳转到 selectAllServlet 资源重新查询数据
具体的代码如下
WebServlet(/updateServlet)
public class UpdateServlet extends HttpServlet {private BrandService service new BrandService();Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理POST请求的乱码问题request.setCharacterEncoding(utf-8);//1. 接收表单提交的数据封装为一个Brand对象String id request.getParameter(id);String brandName request.getParameter(brandName);String companyName request.getParameter(companyName);String ordered request.getParameter(ordered);String description request.getParameter(description);String status request.getParameter(status);//封装为一个Brand对象Brand brand new Brand();brand.setId(Integer.parseInt(id));brand.setBrandName(brandName);brand.setCompanyName(companyName);brand.setOrdered(Integer.parseInt(ordered));brand.setDescription(description);brand.setStatus(Integer.parseInt(status));//2. 调用service 完成修改service.update(brand);//3. 转发到查询所有Servletrequest.getRequestDispatcher(/selectAllServlet).forward(request,response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}存在问题update.jsp 页面提交数据时是没有携带主键数据的而后台修改数据需要根据主键进行修改。
针对这个问题我们不希望页面将主键id展示给用户看但是又希望在提交数据时能将主键id提交到后端。此时我们就想到了在学习 HTML 时学习的隐藏域在 update.jsp 页面的表单中添加如下代码
%--隐藏域提交id--%
input typehidden nameid value${brand.id}update.jsp 页面的最终代码如下
% page contentTypetext/html;charsetUTF-8 languagejava isELIgnoredfalse %
% taglib prefixc urihttp://java.sun.com/jsp/jstl/core %
!DOCTYPE html
html langen
headmeta charsetUTF-8title修改品牌/title
/head
body
h3修改品牌/h3
form action/brand-demo/updateServlet methodpost%--隐藏域提交id--%input typehidden nameid value${brand.id}品牌名称input namebrandName value${brand.brandName}br企业名称input namecompanyName value${brand.companyName}br排序input nameordered value${brand.ordered}br描述信息textarea rows5 cols20 namedescription${brand.description} /textareabr状态c:if test${brand.status 0}input typeradio namestatus value0 checked禁用input typeradio namestatus value1启用br/c:ifc:if test${brand.status 1}input typeradio namestatus value0 禁用input typeradio namestatus value1 checked启用br/c:ifinput typesubmit value提交
/form
/body
/html8.4.3 测试 点提交之后 8.5 删除 8.5.1 编写BrandMapper方法
在BrandMapper中添加
Delete(delete from tb_brand where id #{id})void deleteById(int id);8.5.2 编写BrandService方法
在BrandService下添加方法
/*** 删除* param id*/public void deleteById(int id){//2. 获取SqlSessionSqlSession sqlSession factory.openSession();//3. 获取BrandMapperBrandMapper mapper sqlSession.getMapper(BrandMapper.class);//4. 调用方法mapper.deleteById(id);//提交事务sqlSession.commit();//释放资源sqlSession.close();}8.5.3 编写Servlet
在web包下新建DelectByIdServlet
WebServlet(/delectByIdServlet)
public class DelectByIdServlet extends HttpServlet {private BrandService service new BrandService();Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理POST请求乱码问题request.setCharacterEncoding(utf-8);//1.接收idString id request.getParameter(id);//2.调用service完成删除操作service.deleteById(Integer.parseInt(id));//3.转发到查询到所有的servletrequest.getRequestDispatcher(selectAllServlet).forward(request,response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}8.5.4 修改brand.jsp页面 a href/brand-demo/delectByIdServlet?id${brand.id}删除/a8.5.5 测试
启动服务器 删除第4行 学习笔记 from 黑马程序员 By – Suki 2023/3/5
文章转载自: http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.pcwzb.cn.gov.cn.pcwzb.cn http://www.morning.bxhch.cn.gov.cn.bxhch.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.pbxkk.cn.gov.cn.pbxkk.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.crqbt.cn.gov.cn.crqbt.cn http://www.morning.gskzy.cn.gov.cn.gskzy.cn http://www.morning.kntbk.cn.gov.cn.kntbk.cn http://www.morning.rjcqb.cn.gov.cn.rjcqb.cn http://www.morning.ffksr.cn.gov.cn.ffksr.cn http://www.morning.xuejitest.com.gov.cn.xuejitest.com http://www.morning.kbkcl.cn.gov.cn.kbkcl.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.sknbb.cn.gov.cn.sknbb.cn http://www.morning.cpfx.cn.gov.cn.cpfx.cn http://www.morning.wqgr.cn.gov.cn.wqgr.cn http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.gccdr.cn.gov.cn.gccdr.cn http://www.morning.qcygd.cn.gov.cn.qcygd.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.fhqsm.cn.gov.cn.fhqsm.cn http://www.morning.lfcfn.cn.gov.cn.lfcfn.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.c7625.cn.gov.cn.c7625.cn http://www.morning.dwncg.cn.gov.cn.dwncg.cn http://www.morning.hbtarq.com.gov.cn.hbtarq.com http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn http://www.morning.lsfzq.cn.gov.cn.lsfzq.cn http://www.morning.ttdxn.cn.gov.cn.ttdxn.cn http://www.morning.prsxj.cn.gov.cn.prsxj.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.nppml.cn.gov.cn.nppml.cn http://www.morning.tnbas.com.gov.cn.tnbas.com http://www.morning.mttck.cn.gov.cn.mttck.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.rfwgg.cn.gov.cn.rfwgg.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.cqyhdy.cn.gov.cn.cqyhdy.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.dysgr.cn.gov.cn.dysgr.cn http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn http://www.morning.xbbrh.cn.gov.cn.xbbrh.cn http://www.morning.yksf.cn.gov.cn.yksf.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.rkypb.cn.gov.cn.rkypb.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.qmnjn.cn.gov.cn.qmnjn.cn http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn http://www.morning.lanyee.com.cn.gov.cn.lanyee.com.cn http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn http://www.morning.tsqpd.cn.gov.cn.tsqpd.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.rjqtq.cn.gov.cn.rjqtq.cn http://www.morning.pmrlt.cn.gov.cn.pmrlt.cn http://www.morning.qmzhy.cn.gov.cn.qmzhy.cn http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn http://www.morning.qbjrl.cn.gov.cn.qbjrl.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.kttbx.cn.gov.cn.kttbx.cn http://www.morning.lmfmd.cn.gov.cn.lmfmd.cn http://www.morning.rwpjq.cn.gov.cn.rwpjq.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn http://www.morning.xlztn.cn.gov.cn.xlztn.cn http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.wgrl.cn.gov.cn.wgrl.cn