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

news/2024/10/18 14:27:48/

一、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.ppmy.cn/news/1165547.html

相关文章

工程中的SOVD——从ECU到车辆

SOVD标准正在改变诊断方式&#xff0c;特别是在互联网上当多个合作方进行交互时&#xff0c;其提供了很大的优势。在开发的早期阶段&#xff0c;需要使用附加的方法来利用这个标准&#xff0c;因为该标准并不是专为ECU诊断而开发的&#xff0c;而且还需格外注意数据的处理&…

简单谈谈我参加数据分析省赛的感受与体会

数据分析省赛的感受与体会 概要考试前的感受与体会考试注意事项小结 概要 大数据分析省赛指的是在省级范围内举办的大数据分析竞赛活动。该竞赛旨在鼓励和推动大数据分析领域的技术创新和人才培养&#xff0c;促进大数据技术与应用的深度融合&#xff0c;切实解决实际问题。参…

思维决定行为,行为决定未来

富人思维第一条&#x1f447; 富人思维第二条&#x1f447; 富人思维第三条&#x1f447; 富人思维第四条&#x1f447; 富人思维第五条&#x1f447; 富人思维第六条&#x1f447; 富人思维第七条&#x1f447; 富人思维第八条&#x1f447; 富人思维第九条&#x1f447; 富人…

【数据结构】线性表(三)循环链表的各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间)

目录 线性表的定义及其基本操作&#xff08;顺序表插入、删除、查找、修改&#xff09; 四、线性表的链接存储结构 1. 单链表 2. 循环链表 a. 循环链表节点结构体 b. 创建新节点 c. 在循环链表末尾插入节点 d. 删除循环链表中指定值的节点 e. 在循环链表中查找指定值的…

【Java 进阶篇】JavaScript 表格全选案例详解

在网页开发中&#xff0c;表格&#xff08;Table&#xff09;是一种常用的HTML元素&#xff0c;用于以表格形式展示数据。对于包含大量数据的表格&#xff0c;提供一个全选复选框可以极大地提高用户体验&#xff0c;方便用户一次性选择或取消选择所有项目。本篇博客将详细介绍如…

FPGA片上RAM、片上ROM Nios 程序不起作用的解决方法

ctrl B 编译Nios工程 将 Nios software 的 meminit.qip onchip_rom.hex onchip_ram.hex meminit.spd 文件拷贝到FPGA目录下&#xff0c;再编译FPGA能起作用 Nios设置&#xff1a; reset 设置为 ROM 异常设置为 RAM 无优化

Git 安装和基础命令、IDEA 基础操作

目录 总结命令&#xff1a;1、安装&#xff1a;1、安装2、配置环境变量&#xff1a; 2、Git操作&#xff1a;1、初始化&#xff1a;1、姓名邮箱&#xff1a;2、初始化仓库&#xff1a;3、工作区和暂存区分析 2、提交文件3、查看版本库状态4、安装小乌龟git不显示图标 5、查看提…

WINCC趋势画面模板

加载按钮 Sub OnClick(Byval Item) Dim Chart,tag,ctrl,objTrendWnd,objTimeAxis,objValAxis,objTrendSet ChartScreenItems("组合框2")Chart tagChart.SelTextSet ctrl ScreenItems("控件1")threadSet objTrend…