黑马程序员Java Web--14.综合案例--修改功能实现

一、BrandMapper包

首先,在BrandMapper包中定义用来修改的方法,和使用注解的sql语句。

BrandMapper包所在路径:
package com.itheima.mapper;

   /**** 修改* **/@Update("update tb_brand set brand_name = #{brandName},company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status} where id = #{id}")void upDate(Brand brand);

二、BrandService

BrandService中定义一个提供修改的方法接口,用来给BrandServiceImpl进行具体方法的实现。

BrandService包所在路径:
package com.itheima.service;

 void upDate(Brand brand);

三、BrandServiceImpl

在BrandServiceImpl重写BrandService接口中提供的upDate方法。

BrandServiceImpl包所在路径:
package com.itheima.service.impl;

@Overridepublic void upDate(Brand brand){//2.获取sqlsession对象SqlSession sqlSession = factory.openSession();//3.获取MapperBrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//调用upDate方法mapper.upDate(brand);//sql事务提交sqlSession.commit();//关闭sqlsqlSession.close();}

四、BrandServlet

在BrandServlet中实现upDate Servlet的功能。

BrandServlet路径:
package com.itheima.web.servlet;

 public void upDate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 接收品牌数据BufferedReader br = request.getReader();String params = br.readLine();//json字符串System.out.println("par:"+params);//转为Brand对象Brand brand = JSON.parseObject(params, Brand.class);System.out.println("brand:"+brand);//2. 调用service添加brandService.upDate(brand);//3. 设置编码方式response.setContentType("text/json;charset=utf-8");//4. 响应成功的标识response.getWriter().write("success");}

五、前端代码

首先,添加一个修改数据的表单。这段代码位置可以放在网页数据表单的上方。

 <!--update表单--><el-dialogtitle="修改品牌":visible.sync="updateDialogVisible"width="30%"><el-form ref="form" :model="brand" label-width="80px"><el-input v-model="brand.id" type="hidden"></el-input><el-form-item label="品牌名称"><el-input v-model="brand.brandName"></el-input></el-form-item><el-form-item label="企业名称"><el-input v-model="brand.companyName"></el-input></el-form-item><el-form-item label="排序"><el-input v-model="brand.ordered"></el-input></el-form-item><el-form-item label="备注"><el-input type="textarea" v-model="brand.description"></el-input></el-form-item><el-form-item label="状态"><el-switch v-model="brand.status"active-value="1"inactive-value="0"></el-switch></el-form-item><el-form-item><el-button type="primary" @click="edit">提交</el-button><el-button @click="updateDialogVisible = false">取消</el-button></el-form-item></el-form></el-dialog>

这段代码中定义了一个判定是否显示表单的变量:updateDialogVisible
我们需要在script中的data中进行定义:

data(){return{updateDialogVisible: false,}}  

在你自己项目中只复制updateDialogVisible: false, 就可以了。

在methods里面添加如下方法

 //修改updateBrand(index,row){this.brand.id=row.id;this.updateDialogVisible=true;this.brand = JSON.parse(JSON.stringify(row));},edit(){var _this=this;axios({method:"post",url:"http://localhost:8098/brand-case/brand/upDate",data:_this.brand}).then(response =>{if (response.data == "success") {//添加成功_this.updateDialogVisible = false//刷新_this.selectAll();_this.$message({message: '修改成功',type: 'success'});}})},

其中updateBrand函数是我们点击修改按钮时绑定的click方法

在网页显示数据的表单代码段中,找到修改button所在位置,给@click添加点击事件的函数updateBrand。
以及这里需要获取表单中某行的id值用来获得需要修改行现有的值,所以使用:slot-scope
(ps:这段代码直接复制替换原来修改删除的位置就好)

 <template slot-scope="scope"><el-row><el-button type="primary" @click="updateBrand(scope.$index,scope.row)">修改</el-button><el-button type="danger">删除</el-button></el-row></template>

六、brand.html 全部代码展示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>.el-table .warning-row {background: oldlace;}.el-table .success-row {background: #f0f9eb;}</style></head>
<body>
<div id="app"><!--搜索表单--><el-form :inline="true" :model="brand" class="demo-form-inline"><el-form-item label="当前状态"><el-select v-model="brand.status" placeholder="当前状态"><el-option label="启用" value="1"></el-option><el-option label="禁用" value="0"></el-option></el-select></el-form-item><el-form-item label="企业名称"><el-input v-model="brand.companyName" placeholder="企业名称"></el-input></el-form-item><el-form-item label="品牌名称"><el-input v-model="brand.brandName" placeholder="品牌名称"></el-input></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item></el-form><!--按钮--><el-row><el-button type="danger" plain @click="deleteByIds">批量删除</el-button><el-button type="primary" plain @click="dialogVisible = true">新增</el-button></el-row><!--添加数据对话框表单--><el-dialogtitle="编辑品牌":visible.sync="dialogVisible"width="30%"><el-form ref="form" :model="brand" label-width="80px"><el-form-item label="品牌名称"><el-input v-model="brand.brandName"></el-input></el-form-item><el-form-item label="企业名称"><el-input v-model="brand.companyName"></el-input></el-form-item><el-form-item label="排序"><el-input v-model="brand.ordered"></el-input></el-form-item><el-form-item label="备注"><el-input type="textarea" v-model="brand.description"></el-input></el-form-item><el-form-item label="状态"><el-switch v-model="brand.status"active-value="1"inactive-value="0"></el-switch></el-form-item><el-form-item><el-button type="primary" @click="addBrand">提交</el-button><el-button @click="dialogVisible = false">取消</el-button></el-form-item></el-form></el-dialog><!--update表单--><el-dialogtitle="修改品牌":visible.sync="updateDialogVisible"width="30%"><el-form ref="form" :model="brand" label-width="80px"><el-input v-model="brand.id" type="hidden"></el-input><el-form-item label="品牌名称"><el-input v-model="brand.brandName"></el-input></el-form-item><el-form-item label="企业名称"><el-input v-model="brand.companyName"></el-input></el-form-item><el-form-item label="排序"><el-input v-model="brand.ordered"></el-input></el-form-item><el-form-item label="备注"><el-input type="textarea" v-model="brand.description"></el-input></el-form-item><el-form-item label="状态"><el-switch v-model="brand.status"active-value="1"inactive-value="0"></el-switch></el-form-item><el-form-item><el-button type="primary" @click="edit">提交</el-button><el-button @click="updateDialogVisible = false">取消</el-button></el-form-item></el-form></el-dialog><!--表格--><template><el-table:data="tableData"style="width: 100%":row-class-name="tableRowClassName"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55"></el-table-column><el-table-columntype="index"width="50"></el-table-column><el-table-columnprop="brandName"label="品牌名称"align="center"></el-table-column><el-table-columnprop="companyName"label="企业名称"align="center"></el-table-column><el-table-columnprop="ordered"align="center"label="排序"></el-table-column><el-table-columnprop="status"align="center"label="当前状态"></el-table-column><el-table-columnalign="center"label="操作"><template slot-scope="scope"><el-row><el-button type="primary" @click="updateBrand(scope.$index,scope.row)">修改</el-button><el-button type="danger">删除</el-button></el-row></template></el-table-column></el-table></template><!--分页工具条--><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="currentPage":page-sizes="[5, 10, 15, 20]":page-size="5"layout="total, sizes, prev, pager, next, jumper":total="400"></el-pagination></div><script src="js/vue.js"></script>
<script src="element-ui/lib/index.js"></script>
<script src="js/axios-0.18.0.js"></script>
<link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css"><script>new Vue({el: "#app",mounted() {this.selectAll()},methods: {selectAll() {//页面加载完成后,获取数据var _this = this;axios({method: "get",url: "http://localhost:8098/brand-case/brand/selectAll",}).then(response => {this.tableData = response.data;console.log(_this.tableData)})},tableRowClassName({row, rowIndex}) {if (rowIndex === 1) {return 'warning-row';} else if (rowIndex === 3) {return 'success-row';}return '';},//修改updateBrand(index,row){this.brand.id=row.id;this.updateDialogVisible=true;this.brand = JSON.parse(JSON.stringify(row));},edit(){var _this=this;axios({method:"post",url:"http://localhost:8098/brand-case/brand/upDate",data:_this.brand}).then(response =>{if (response.data == "success") {//添加成功_this.updateDialogVisible = false//刷新_this.selectAll();_this.$message({message: '修改成功',type: 'success'});}})},// axios({//     method:"post",//     url:"http://localhost:8098/brand-case/brand/upDate",// }).then(response => {//     if (response.data == "success") {//         //添加成功//         _this.updateDialogVisible = false//         //刷新//         _this.selectAll();////         _this.$message({//             message: '修改成功',//             type: 'success'//         });////     }// })//点击修改后唤起修改框startUpdate(row) {// 获取改行已经有的数据,以供填入修改框// var _this = thisthis.brand = JSON.parse(JSON.stringify(row));// 弹出修改框this.updateDialogVisible = true;},// 复选框选中后执行的方法handleSelectionChange(val) {this.multipleSelection = val;console.log(this.multipleSelection)},// 查询方法onSubmit() {console.log(this.brand);},// 添加数据addBrand() {var _this = this;axios({method: "post",url: "http://localhost:8098/brand-case/brand/add",data: _this.brand}).then(function (resp) {if (resp.data == "success") {//添加成功_this.dialogVisible = false//刷新_this.selectAll();_this.$message({message: '添加成功',type: 'success'});}})},//批量删除deleteByIds() {// 弹出确认提示框this.$confirm('此操作将删除该数据, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {//用户点击确认按钮//1. 创建id数组 [1,2,3], 从 this.multipleSelection 获取即可for (let i = 0; i < this.multipleSelection.length; i++) {let selectionElement = this.multipleSelection[i];this.selectedIds[i] = selectionElement.id;}//2. 发送AJAX请求var _this = this;// 发送ajax请求,添加数据axios({method: "post",url: "http://localhost:8098/brand-case/brand/deleteByIds",data: _this.selectedIds}).then(function (resp) {if (resp.data == "success") {//删除成功// 重新查询数据_this.selectAll();// 弹出消息提示_this.$message({message: '恭喜你,删除成功',type: 'success'});}})}).catch(() => {//用户点击取消按钮this.$message({type: 'info',message: '已取消删除'});});},    //分页handleSizeChange(val) {console.log(`每页 ${val}`);},handleCurrentChange(val) {console.log(`当前页: ${val}`);}},data() {return {// 当前页码currentPage: 4,// 添加数据对话框是否展示的标记dialogVisible: false,updateDialogVisible: false,// 品牌模型数据brand: {status: '',brandName: '',companyName: '',id: "",ordered: "",description: ""},// 被选中的id数组selectedIds:[],// 复选框选中数据集合multipleSelection: [],// 表格数据tableData: [{}]}},})</script></body>
</html>

七、解决修改、添加中文字符显示问号

在mybatis-config.xml中,在数据库配置路径后添加:
characterEncoding=utf-8

jdbc:mysql:///db1?useSSL=false&amp;characterEncoding=utf-8

参考文章:
https://blog.csdn.net/qq_42078934/article/details/125436314
https://blog.csdn.net/qq_51272114/article/details/127039314

能力有限,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XTU-OJ 1339-Interprime

题目描述 n是两个连续的奇素数的平均值&#xff0c;且n不是素数&#xff0c;那么我们称这样的数是"内部素数"。求区间[a,b]内"内部素数"的个数。比如&#xff0c;前5个"内部素数"是4,6,9,12,15。 输入 第一行是样例数T(1≤T≤1000)。 每个样例一…

站外引流之道:跨境电商如何吸引更多流量?

随着跨境电商行业的蓬勃发展&#xff0c;站外引流成为卖家们必须掌握的关键技能。站外引流不仅有助于扩大产品曝光度&#xff0c;还能吸引更多潜在客户&#xff0c;提高销售额。 然而&#xff0c;站外引流并非易事&#xff0c;需要精心策划和执行。本文将探讨站外引流的策略&a…

外置告警蜂鸣器使用小坑

告警蜂鸣器调试小坑 昨天调试新产品&#xff0c;由于IMO、MSC组织和IEC标准规定&#xff0c;不能使用带红色指示灯的蜂鸣器&#xff0c;于是更换了个不带灯。然而奇怪的现象出现了两次短响的程序在有的页面正常&#xff0c;有的页面就变成一声了。搞了一天&#xff0c;把各种寄…

服务器数据恢复-linux+raid+VMwave ESX数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌x3950 X6型号服务器&#xff0c;linux操作系统&#xff0c;12块硬盘组建了一组raid阵列&#xff0c;上层运行VMwave ESX虚拟化平台。 服务器故障&#xff1a; 在服务器运行过程中&#xff0c;该raid阵列中有硬盘掉线&#xff0c;linu…

SAP VA02R批量修改销售订单拒绝原因的BAPI:BAPI_SALESORDER_CHANGE

VA02修改销售订单拒绝原因的BAPI&#xff1a;BAPI_SALESORDER_CHANGE *&---------------------------------------------------------------------* *& Form rechazar *&---------------------------------------------------------------------* FORM rech…

TDengine 签约中石化,支撑八大油田 PCS 系统

近日&#xff0c;TDengine 成功签约中国石化 PCS 一级部署时序数据库项目。未来&#xff0c;TDengine 将作为中国石化 PCS 系统的时序数据库&#xff0c;为石化总部、胜利油田、西北油田、中原油田、河南油田、华北油田、江苏油田、华东油田、江汉油田等油田 PCS 系统提供高效、…

在Spring中,标签管理的Bean中,为什么使用@Autowired自动装配修饰引用类(前提条件该引用类也是标签管理的Bean)

Autowired是Spring框架的一个注解&#xff0c;它可以用来完成自动装配。 自动装配是Spring框架的一个特性&#xff0c;它可以避免手动去注入依赖&#xff0c;而是由框架自动注入。这样可以减少代码的重复性和提高开发效率。 在使用Autowired注解时&#xff0c;Spring会自动搜…

C# 开发工具包 – 现已正式发布

作者&#xff1a;Wendy Breiding 排版&#xff1a;Alan Wang 今天&#xff0c;我们很高兴地宣布 C# 开发工具包正式发布&#xff0c;C# 开发工具包是一个 Visual Studio Code 扩展&#xff0c;为 Linux、macOS 和 Windows 带来了改进的编辑器优先 C# 开发体验。 谢谢社区的努…

vscode提示扩展主机在过去5分钟内意外终止了3次,解决方法

参考链接&#xff1a; https://code.visualstudio.com/blogs/2021/02/16/extension-bisect https://code.visualstudio.com/docs/setup/uninstall#_clean-uninstall 使用vscode打开jupyter notebook记事本时&#xff0c;窗口右下角提示扩展主机在过去5分钟内意外终止了3次 而…

条款33、避免遮掩继承而来的名称

核心 基类的成员函数和派生类的成员函数不会构成重载&#xff0c;如果派生类有同名函数&#xff0c;那么就会遮蔽基类中的所有(意味着所有重载的都会被遮蔽)同名函数。 解决方案 使用using using Base::func; //会释放出所有的函数名为func的函数

C++初阶--C++入门(1)

文章目录 C语言与C命名空间命名空间的定义和使用 C的输入输出缺省参数函数重载引用赋值与引用引用在参数上的使用以及注意事项函数返回值的引用引用与值的时间效率比较常引用 C语言与C 很多初学者都会把这两门语言进行混淆&#xff0c;但其实这是两种不同的语言&#xff0c;C相…

HTML5播放 M3U8的hls流地址

在HTML5页面上播放M3U8的hls流地址 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>视频播放</title> <script src"https://cdn.jsdelivr.net/npm/hls.jslatest"></script> &…

Apache Doris 2.0.2 版本正式发布!

峰会官网已上线&#xff0c;最新议程请关注&#xff1a;doris-summit.org.cn 点击报名 亲爱的社区小伙伴们&#xff0c;Apache Doris 2.0.2 版本已于 2023 年 10 月 6 日正式发布&#xff0c;该版本对多个功能进行了更新优化&#xff0c;旨在更好地满足用户的需求。有 92 位贡献…

CSS3 渐变

CSS3 渐变可以让你在两个或多个指定的颜色之间显示平稳的过渡。 CSS3渐变有两种类型&#xff1a;线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial Gradients&#xff09;。 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a; 线性…

看了我项目中购物车、订单、支付一整套设计,同事也开始悄悄模仿了...

在我的mall电商实战项目中&#xff0c;有着从商品加入购物车到订单支付成功的一整套功能&#xff0c;这套功能的设计与实现对于有购物需求的网站来说&#xff0c;应该是一套通用设计了。今天给大家介绍下这套功能设计&#xff0c;涵盖购物车、生成确认单、生成订单、取消订单以…

VScode折叠代码

问题现状 代码看的我很烦&#xff0c; 有大段大段好像没有逻辑意义的部分&#xff0c;像大量的print语句&#xff0c; 想能不能折叠起来 在设置里面找 搜索Folding&#xff0c;找到Show Folding Controls&#xff0c; 换成always吧&#xff0c;一般默认是mouseover&#x…

解决js return返回结果依赖耗时操作而返回空值或undefined问题

如果js一个代码块中有耗时操作&#xff0c;但是return的结果可能会依赖这个耗时操作的返回&#xff0c;怎么解决&#xff1f; 一般人可能想到的方法就是async/await。 没错&#xff0c;正常情况下是这样的&#xff0c;伪代码如下&#xff1a; async OuterFun() { const resul…

Kotlin中循环语句

在Kotlin中&#xff0c;循环语句有多种形式&#xff0c;包括while循环、do-while循环、for循环等。下面将逐个说明每种形式的使用。 while循环&#xff1a; var n: Int 5 while (n > 0) {println("n$n")n-- }上述代码中&#xff0c;使用while循环打印n的值&…

pytorch_神经网络构建4

文章目录 循环神经网络LSTM词嵌入skip-Gram模型N-Gram模型词性预测RNN循环神经网络的基础模块实现RNN识别图片RNN时间序列预测词向量模块词向量运用N-Gram模型lstm词性预测 循环神经网络 这个网络主要用来处理序列信息,之前处理图片时大部分是分析图片的结构信息, 什么是序列信…

uniapp(uncloud) 使用生态开发接口详情(1简单的创建)

开发接口对比时间: 用java开发接口周期太长, 大概5-6个月左右 用php 开发接口周期同样太长, 大概3-4个月左右 用node.js 开发接口周期相对短一点, 大概1-2个月左右 用uniapp 开发接口, 可以不到 1-2周的时间 这里我使用 uniapp 开发接口, 废话不多说了,直接开干 HBuilder官网(…