Mybatis實現頁面增刪改查

一、改變路由警告

二、實現新增數據

1.UserMapper.xml

2.Controller層

注意:前端傳的是json對象,所以后臺也需要使用JSON

3.設置提交的表單

<el-dialog title="信息" v-model="data.formVisible" width="30%" destroy-on-close><el-form ref="formRef" :model="data.form" :rules="data.rules" label-width="80px" style="padding: 20px 30px 10px 0"><el-form-item prop="username" label="賬號"><el-input v-model="data.form.username" autocomplete="off" /></el-form-item><el-form-item prop="birthday" label="生日"><el-date-pickerv-model="data.form.birthday"type="datetime"placeholder="選擇日期時間"></el-date-picker></el-form-item><el-form-item prop="sex" label="性別"><el-select v-model="data.form.sex" placeholder="請選擇性別" style="width: 100%"><el-option label="男" value="男"></el-option><el-option label="女" value="女"></el-option></el-select></el-form-item><el-form-item prop="address" label="地址"><el-input v-model="data.form.address" autocomplete="off" /></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="data.formVisible = false">取 消</el-button><el-button type="primary" @click="save">保 存</el-button></div></template>
</el-dialog>

4.點擊新增按鈕實現彈框打開

4.script數據提交(注意點) 通過在??中設置?ref?屬性,將?formRef?與表單組件關聯

<script setup>
import { reactive,ref } from "vue";
import {Search} from "@element-plus/icons-vue";
import request from "@/utils/request.js";
import {ElMessage} from "element-plus";const data = reactive({name: null,pageNum: 1,pageSize: 5,total:0,tableData: [],formVisible: false, // 表單是否顯示form: {}, //表單數據rules: {username: [{ required: true, message: '請填寫用戶名', trigger: 'blur' }],birthday: [{ required: false, message: '請填寫生日', trigger: 'blur' }],sex: [{ required: true, message: '請填寫性別', trigger: 'blur' }],address: [{ required: true, message: '請填寫地址', trigger: 'blur' }]},rows: []
})const formRef = ref() //表單實例const load = () => {request.get('/user/selectPage', {//入參params: {pageNum: data.pageNum,pageSize: data.pageSize,username:data.username,address:data.address}}).then(res => {if (res.code === '200') {data.tableData = res.data.listdata.total = res.data.total} else {ElMessage.error(res.msg)}})
}
load()//搜索重置
const reset = () => {data.username = nulldata.address = nullload()
}//點擊新增按鈕觸發的方法
const handleAdd = () => {data.formVisible = true //顯示彈框data.form = {}  //清空表單
}const add = () => {console.log(data.form);// formRef 是表單的引用formRef.value.validate((valid) => {if (valid) {   // 驗證通過的情況下request.post('/user/add', data.form).then(res => {if (res.code === '200') {data.formVisible = false //隱藏彈框ElMessage.success('新增成功')load() //重新加載數據} else {ElMessage.error(res.msg)}})}})
}//點擊保存觸發的方法
const save = () => {add()
}</script>

三、實現修改數據

mapper.xml

<update id="update" parameterType="com.qcby.springboot.entity.User">update user<set><if test="username!=null">username=#{username},</if><if test="birthday!=null">birthday=#{birthday},</if><if test="sex!=null">sex=#{sex},</if><if test="address!=null">address=#{address},</if></set>where id = #{id}
</update>

controller層

3.設置vue的修改和刪除按鈕

<el-table-column label="操作" width="100"><template #default="scope"><el-button type="primary" icon="Edit" circle @click="handleEdit(scope.row)"></el-button><el-button type="danger" icon="Delete" circle @click="del(scope.row.id)"></el-button></template>
</el-table-column>

4.設置vue的數據提交

 //打開修改的彈框const handleEdit = (row)=>{data.form = JSON.parse(JSON.stringify(row))  // 深度拷貝數據data.formVisible = true
}//點擊保存觸發的方法
const save = () => {data.form.id ? update() : add()
}
//修改
const update = () => {// formRef 是表單的引用formRef.value.validate((valid) => {if (valid) {   // 驗證通過的情況下request.post('/user/update', data.form).then(res => {if (res.code === '200') {data.formVisible = falseElMessage.success('修改成功')load()} else {ElMessage.error(res.msg)}})}})
}

四、刪除數據

xml配置

controller層

刪除數據

注意這里需要導入 ElMessageBox ElMessageBox?是 Element Plus UI 庫提供的一個彈出框組件,主要用于顯示各種類型的確認對話框、提示信息等。

import {ElMessage, ElMessageBox } from "element-plus";
//刪除數據
const del = (id) => {ElMessageBox.confirm('刪除后無法恢復,您確認刪除嗎?', '刪除確認', { type: 'warning' }).then(res => {request.post('/user/delete/' + id).then(res => {if (res.code === '200') {ElMessage.success('刪除成功')load()} else {ElMessage.error(res.msg)}})}).catch(err => {})
}

五、批量刪除

table 的多選事件?@selection-change="handleSelectionChange"

添加批量刪除按鈕

<el-button type="danger" @click="deleteBatch">批量刪除</el-button>

前端實現批量刪除功能

const handleSelectionChange = (rows) => {  // rows 就是實際選擇的數組data.rows = rows
}const deleteBatch = () => {if (data.rows.length === 0) {ElMessage.warning('請選擇數據')return}ElMessageBox.confirm('刪除后無法恢復,您確認刪除嗎?', '刪除確認', { type: 'warning' }).then(res => {request.delete('/admin/deleteBatch', { data: data.rows }).then(res => {if (res.code === '200') {ElMessage.success('批量刪除成功')load()} else {ElMessage.error(res.msg)}})}).catch(err => {})
}

六、前端全部代碼

<template><div><div class="card" style="margin-bottom: 5px"><el-input clearable @clear="load" style="width: 260px; margin-right: 5px" v-model="data.username" placeholder="請輸入用戶名查詢" :prefix-icon="Search"></el-input><el-input clearable @clear="load" style="width: 260px; margin-right: 5px" v-model="data.address" placeholder="請輸入地址查詢" :prefix-icon="Search"></el-input><el-button type="primary" @click="load">查 詢</el-button><el-button @click="reset">重 置</el-button></div><div class="card" style="margin-bottom: 5px"><el-button type="primary" @click="handleAdd">新 增</el-button><el-button type="danger"@click="deleteBatch" >批量刪除</el-button></div><div class="card" style="margin-bottom: 5px"><el-table :data="data.tableData" style="width: 100%" @selection-change="handleSelectionChange"  :header-cell-style="{ color: '#333', backgroundColor: '#eaf4ff' }"><!-- type="selection":這指定該列將包含用于行選擇的復選框。它允許用戶在表格中選擇一行或多行。 --><el-table-column type="selection" width="55" /><el-table-column prop="username" label="用戶名" width="180" /><el-table-column prop="birthday" label="生日" width="180"  :formatter="dateFormat" /><el-table-column prop="sex" label="性別" width="80" /><el-table-column prop="address" label="地址" width="180" /><el-table-column label="操作" width="100"><template #default="scope"><el-button type="primary" icon="Edit" circle @click="handleEdit(scope.row)"></el-button><el-button type="danger" icon="Delete" circle @click="del(scope.row.id)"></el-button></template></el-table-column></el-table></div><div class="card"><el-paginationv-model:current-page="data.pageNum":page-size="data.pageSize"layout="total, prev, pager, next":total="data.total"@current-change="load"@size-change="load"/></div></div><el-dialog title="信息" v-model="data.formVisible" width="30%" destroy-on-close><el-form ref="formRef" :model="data.form" :rules="data.rules" label-width="80px" style="padding: 20px 30px 10px 0"><el-form-item prop="username" label="賬號"><el-input v-model="data.form.username" autocomplete="off" /></el-form-item><el-form-item prop="birthday" label="生日"><el-date-pickerv-model="data.form.birthday"type="date"placeholder="選擇日期時間"></el-date-picker></el-form-item><el-form-item prop="sex" label="性別"><el-select v-model="data.form.sex" placeholder="請選擇性別" style="width: 100%"><el-option label="男" value="男"></el-option><el-option label="女" value="女"></el-option></el-select></el-form-item><el-form-item prop="address" label="地址"><el-input v-model="data.form.address" autocomplete="off" /></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="data.formVisible = false">取 消</el-button><el-button type="primary" @click="save">保 存</el-button></div></template>
</el-dialog></template><script setup>
import { reactive,ref } from "vue";
import {Search} from "@element-plus/icons-vue";
import request from "@/utils/request.js";
import {ElMessage, ElMessageBox } from "element-plus";const formRef = ref() //表單實例const data = reactive({name: null,pageNum: 1,pageSize: 5,total:0,tableData: [],rules: {username: [{ required: true, message: '請填寫用戶名', trigger: 'blur' }],birthday: [{ required: true, message: '請填寫生日', trigger: 'blur' }],sex: [{ required: true, message: '請填寫性別', trigger: 'blur' }],address: [{ required: true, message: '請填寫地址', trigger: 'blur' }]},rows: []
})const load = () => {request.get('/user/findAll', {params: {pageNum: data.pageNum,pageSize: data.pageSize,username: data.username,address: data.address}}).then(res => {if (res.code === '200') {data.tableData = res.data.listdata.total = res.data.total} else {ElMessage.error(res.msg)}})
}
load()//搜索重置
const reset = () => {data.username = nulldata.address = nullload()
}// 添加日期格式化函數
const dateFormat = (row, column, cellValue) => {if (!cellValue) return ''const date = new Date(cellValue)const year = date.getFullYear()const month = String(date.getMonth() + 1).padStart(2, '0')const day = String(date.getDate()).padStart(2, '0')return `${year}-${month}-${day}`
}//點擊新增按鈕觸發的方法
const handleAdd = () => {data.formVisible = true //顯示彈框data.form = {}  //清空表單
}const add = () => {console.log(data.form);// formRef 是表單的引用formRef.value.validate((valid) => {if (valid) {   // 驗證通過的情況下request.post('/user/add', data.form).then(res => {if (res.code === '200') {data.formVisible = false //隱藏彈框ElMessage.success('新增成功')load() //重新加載數據} else {ElMessage.error(res.msg)}})}})
}//打開修改的彈框
const handleEdit = (row)=>{data.form = JSON.parse(JSON.stringify(row))  // 深度拷貝數據data.formVisible = true  
}// //點擊保存觸發的方法
const save = () => {data.form.id ? update() : add()
}
//修改
const update = () => {// formRef 是表單的引用formRef.value.validate((valid) => {if (valid) {   // 驗證通過的情況下request.post('/user/update', data.form).then(res => {if (res.code === '200') {data.formVisible = falseElMessage.success('修改成功')load()} else {ElMessage.error(res.msg)}})}})
}//刪除數據
const del = (id) => {ElMessageBox.confirm('刪除后無法恢復,您確認刪除嗎?', '刪除確認', { type: 'warning' }).then(res => {request.post('/user/delete/' + id).then(res => {if (res.code === '200') {ElMessage.success('刪除成功')load()} else {ElMessage.error(res.msg)}})}).catch(err => {})
}const handleSelectionChange = (rows) => {  // rows 就是實際選擇的數組data.rows = rows
}const deleteBatch = () => {if (data.rows.length === 0) {ElMessage.warning('請選擇數據')return}ElMessageBox.confirm('刪除后無法恢復,您確認刪除嗎?', '刪除確認', { type: 'warning' }).then(res => {request.delete('/user/deleteBatch', { data: data.rows }).then(res => {if (res.code === '200') {ElMessage.success('批量刪除成功')load()} else {ElMessage.error(res.msg)}})}).catch(err => {})
}
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rabbitmq+STS+discovery_k8s +localpv部署排坑詳解

#作者&#xff1a;朱雷 文章目錄一、部署排坑1.1. configmap配置文件1.2. pv文件1.3. sc文件1.4. serviceAccount文件1.5. headless-service文件1.6. sts文件二、RabbitMQ集群部署關鍵問題總結一、部署排坑 1.1. configmap配置文件 編輯cm.yaml 文件 apiVersion: v1 kind: C…

8.14 模擬

lc658. deque 定長滑窗class Solution { public:vector<int> findClosestElements(vector<int>& arr, int k, int x) {int n arr.size();int l 0, r 0;deque<int> dq;while (r < n) {dq.push_back(arr[r]);if (dq.size() > k) {// 核心&#xf…

JavaScript 核心語法與實戰筆記:從基礎到面試高頻題

一、面試高頻:apply 與 call 調用模式的區別 apply 和 call 的核心作用一致——改變函數內 this 的指向并立即執行函數,唯一區別是參數傳遞方式不同: apply:第二個參數需以數組形式傳入,格式為 函數名.apply(this指向, [參數1, 參數2, ...]) 示例:test.apply(param, [1,…

自動駕駛系統“測試”的“要求”與“規范體系”

讓數據真正閉環的&#xff0c;L4級自動駕駛仿真工具鏈-杭州千岑智能科技有限公司&#xff1a;RSim。 自動駕駛系統測試的要求與規范體系 自動駕駛技術作為汽車產業智能化轉型的核心領域&#xff0c;其測試驗證環節直接關系到技術的安全性和可靠性。隨著自動駕駛等級的提高&…

人工智能——CNN基礎:卷積和池化

一、CNN入門介紹1、卷積神經網絡&#xff08;Convolutional Neural Network&#xff0c;簡稱 CNN&#xff09;是一種專門為處理具有網格結構數據&#xff08;如圖像、音頻&#xff09;而設計的深度學習模型。在傳統的全連接神經網絡&#xff08;FNN&#xff09;中&#xff0c;輸…

適用監測農作物長勢和病蟲害的高光譜/多光譜相機有哪些?

面對農作物長勢分析和病蟲害監測&#xff0c;光譜技術在農業中得到了有效的應用。本篇文章給大家介紹下適合監測農作物長勢和病蟲害的高光譜/多光譜相機。農作物在遭受病蟲害侵襲時&#xff0c;其葉片的細胞結構、水分含量、色素組成會發生變化&#xff0c;從而導致農作物對不同…

深度學習——03 神經網絡(4)-正則化方法價格分類案例

4 正則化 4.1 概述模型擬合的3種狀態左邊&#xff08;Underfitting 欠擬合&#xff09;&#xff1a;模型太簡單&#xff0c;沒抓住數據規律。比如用直線硬套彎曲的數據&#xff0c;預測效果差&#xff0c;訓練誤差和測試誤差都大&#xff1b;中間&#xff08;Just right 擬合合…

java16學習筆記

Java16是一個重要的特性發布&#xff0c;它為JAVA帶來了許多JVM特定的更改和語言特定的更改。它遵循了自JavaJava10以來引入的Java發布步調&#xff0c;并于2021年3月發布&#xff0c;僅在Java15發布后的六個月內發布。 Java 16是一個非LTS版本。 338:Vector API (Incubator)…

useCallback 的陷阱:當 React Hooks 反而拖了后腿

我有一支技術全面、經驗豐富的小型團隊&#xff0c;專注高效交付中等規模外包項目&#xff0c;有需要外包項目的可以聯系我很多代碼庫到處都是 useCallback / useMemo。初衷是好的&#xff1a;減少不必要的重新渲染、穩定引用、提速。然而&#xff0c;用錯場景或鋪天蓋地地包一…

【IntelliJ IDEA】如何在pom.xml中去除maven中未使用的依賴

pom.xml中去除maven中未使用的依賴主要解決的問題一、怎么做&#xff1f;二、重點依賴類型解析說明三、什么時候做&#xff1f;四、有什么風險要注意的&#xff1f;五、補充一個快捷方法使用六、IDEA的terminal中如何才能使用命令mvn呢&#xff1f;主要解決的問題 你的項目中p…

安卓9.0系統修改定制化____關于自啟腳本的規律、編寫與實戰示例 推薦收藏【二】

在定制化ROM服務中,許多功能都需要通過自啟腳本來實現。上期博文詳細解析了腳本編寫的規律、權限設置以及常見錯誤踩坑的排查與修復方法,并逐行解釋了腳本代碼的含義。掌握這些基礎知識后,這期再以實例演示的過程來使我們使用更得心應手。。 通過博文了解?????? 1?…

選擇gpt-5還是claude-4-sonnect

了解我的朋友都知道&#xff0c;我是一個偽全棧工程師&#xff0c;一個人加AI編程工具打天下。 最近&#xff0c;gpt-5已經出來有一段時間了&#xff0c;cursor第一時間就支持了gpt-5模型&#xff0c;我第一時間就嘗試了gpt-5效果。說實話&#xff0c;gpt-5和claude-4-sonnect都…

自動化運維實驗(二)---自動識別設備,并導出配置

目錄 一、實驗拓撲 二、實驗目的 三、實驗步驟 實驗思路&#xff1a; 代碼部分&#xff1a; 四、實驗結果&#xff1a; 一、實驗拓撲 二、實驗目的 ssh遠程登錄后&#xff0c;識別設備類型&#xff08;華三、華為、銳捷、山石、飛塔、深信服等&#xff09;&#xff0c;再…

Matlab(4)初階繪圖

一、Basic plotting1.plot&#xff08;&#xff09;plot(x,y) &#xff1a;x圖片中點的橫坐標&#xff0c;y圖片中點的縱坐標plot(y) &#xff1a;y圖片中點的縱坐標&#xff0c;x圖片中點的橫坐標默認為1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5........plot(co…

服務器硬件電路設計之 I2C 問答(五):I2C 總線數據傳輸方向如何確定、信號線上的串聯電阻有什么作用?

在服務器硬件電路設計中&#xff0c;I2C 總線作為常用的串行通信總線&#xff0c;其數據傳輸方向的確定和信號線上串聯電阻的作用是關鍵知識點。?I2C 總線數據傳輸方向由主設備和從設備的角色以及讀寫位共同確定。主設備是發起通信的一方&#xff0c;從設備則是被尋址的對象。…

OpenBMC中C++策略模式架構、原理與應用

1. 策略模式概述 策略模式&#xff08;Strategy Pattern&#xff09;是一種行為型設計模式&#xff0c;它允許在運行時動態選擇算法或行為&#xff0c;而無需修改客戶端代碼。 核心思想&#xff1a;封裝可互換的算法族&#xff0c;使它們可以獨立于使用它們的客戶端變化。 1.…

【python實用小腳本-187】Python一鍵批量改PDF文字:拖進來秒出新文件——再也不用Acrobat來回導

Python一鍵批量改PDF文字&#xff1a;拖進來秒出新文件——再也不用Acrobat來回導 PDF文字替換, 批量導出, 零依賴轉檔, 一鍵完成, 瑞士軍刀 故事開場&#xff1a;一把瑞士軍刀救了周五下班的你 周五 18:00&#xff0c;老板甩來 50 份合同 PDF&#xff1a; “把里面的‘2023’全…

汽車后霧燈色度難達標?OAS 軟件精準解決破瓶頸

汽車后霧燈案例分析簡介汽車后霧燈是車輛在能見度較低的霧、雨、雪等惡劣天氣條件下行駛時&#xff0c;向后方車輛傳遞警示信號的重要裝置&#xff0c;其性能直接關系到車輛的后方安全。根據規定&#xff0c;紅色信號燈需符合 CIE1931 標準&#xff0c;其色度坐標 X 值應在 0.6…

[系統架構設計師]架構設計專業知識(二)

[系統架構設計師]架構設計專業知識&#xff08;二&#xff09; 一.信息系統基礎知識 1.信息系統概述 信息系統功能&#xff1a;輸入&#xff0c;存儲&#xff0c;處理&#xff0c;輸出&#xff0c;控制 理查德.諾蘭&#xff1a; 初始&#xff0c;傳播&#xff0c;控制&#xff…

如果用ApiFox調用Kubernetes API,需要怎么設置證書?

針對Docker Desktop中Kubernetes訪問報SSL/TLS信任關系錯誤的問題&#xff0c;以下是綜合解決方案&#xff1a;要在Postman中調用Kubernetes API并設置證書&#xff0c;需按以下步驟操作&#xff1a;&#x1f510; 證書設置步驟?提取證書文件?從kubeconfig文件&#xff08;~/…