0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring+Vue增刪改查實(shí)例

jf_96884364 ? 來源:jf_96884364 ? 作者:jf_96884364 ? 2023-01-13 09:16 ? 次閱讀

原文鏈接

代碼地址

前端地址:https://github.com/Snowstorm0/SpringAndVue-vue

后端地址:https://github.com/Snowstorm0/SpringAndVue-spring

1 數(shù)據(jù)庫

創(chuàng)建MySQL數(shù)據(jù)庫。

表名為user_data,人員信息有number、name。

效果如下:

2 前端

2.1 創(chuàng)建項(xiàng)目

打開cmd,輸入ui命令:

vue ui

若沒有反應(yīng),可能是版本太低,需要卸載后重裝:

npm uninstall vue-cli -g   #卸載
npm install @vue/cli -g    #安裝

執(zhí)行ui命令成功后,會出現(xiàn)提示:

正在啟動圖形用戶界面... 準(zhǔn)備就緒 http://localhost:8000

并會自動打開頁面:

創(chuàng)建名為SpringAndVue-vue的項(xiàng)目,預(yù)設(shè)選擇“手動”; 功能開啟 Babel、Router、Vuex、Linter/Formatter; 配置選擇“ESLint with error prevention only”; 版本建議使用 “vue2.0”。 創(chuàng)建新項(xiàng)目。

通過cd進(jìn)入目錄,啟動項(xiàng)目:

npm run serve

2.2 安裝插件

安裝 element-ui 插件。

打開cmd,輸入ui命令:

vue ui

在插件項(xiàng)搜索,并點(diǎn)擊安裝。

vue2.0 選擇安裝 “vue-cli-plugin-element”; vue3.0 選擇安裝 “vue-cli-plugin-element-plus”。

Terminal安裝axios,每個(gè)新項(xiàng)目都需要安裝:

# vue-cli2.0命令
npm install axios
# vue-cli3.0命令
npm add axios

2.3 添加模塊

2.3.1 主頁

在views文件夾下創(chuàng)建文件 HomePage.vue,內(nèi)容如下:

<template>
    <div>
    用戶列表
        <el-table
                :data="tableData"
                border
                style="width: 40%">
            <el-table-column
                    prop="number"
                    label="編號"
                    width="150">
            el-table-column>
            <el-table-column
                    prop="name"
                    label="姓名"
                    width="150">
            el-table-column>
            <el-table-column
                    fixed="right"
                    label="操作"
                    width="160">
                <template slot-scope="scope">
                    <el-button @click="handleClick(scope.row)" type="text" size="small">修改el-button>
                    <el-button @click="deleteClick(scope.row)" type="text" size="small">刪除el-button>
                template>
            el-table-column>
        el-table>


        <el-pagination
                background
                layout="prev, pager, next"
                :total="total"
                page-size="2"
                @current-change="page">
        el-pagination>

    div>
template>

<script>
    import axios from 'axios';
    export default {
        name: "HomePage",
        methods: {
            handleClick(row) {
                this.$router.push({
                    path: '/useredit',
                    query:{
                        number: row.number,
                        name: row.name
                    }
                })
            },
            deleteClick(row){
                // var that=this;
                axios.delete('http://localhost:8081/homepage/delete/'+row.number).then(function (response) {
                    console.log(response)
                })
            },
            //當(dāng)被點(diǎn)擊頁數(shù)的時(shí)候,跳轉(zhuǎn)
            page(currPage){
                var that=this;
                axios.get('http://localhost:8081/homepage/query/'+(currPage-1)*3+'/3').then(function (response) {
                    that.tableData=response.data;
                })
            }
        },
        //被創(chuàng)建的時(shí)候,顯示第一頁
        created() {
            var that=this;
            axios.get('http://localhost:8081/homepage/query/0/3').then(function (response) {
                //給數(shù)據(jù)
                that.tableData=response.data;
                // console.log(response.data)
            }),
                axios.get('http://localhost:8081/homepage/all').then(function (response) {
                    //獲得總長度
                    that.total=response.data.length ;
                })
        },
        data() {
            return {
                total: 10,
                tableData: [{
                    number: '編號',
                    name: '姓名'
                }]
            }
        }
    }
script>
<style scoped>
style>

2.3.2 查看用戶

在views文件夾下創(chuàng)建文件:UserView.vue,內(nèi)容如下:

<template>
    <div>
        <table>
            <tr>
                <td>編號td>
                <td>姓名td>
            tr>
            <tr v-for="user in users"  :key="user">
                <td>{{user.number}}td>
                <td>{{user.name}}td>
            tr>
        table>
    div>
template>

<script>
    import axios from 'axios';
    export default {
        name: "UserView",
        data(){
            return {
                users:[
                    {
                        number: 1003,
                        name: '張三',
                    },
                    {
                        number: 1004,
                        name: '李四',
                    }
                ]
            }
        },
        created() {
            var that=this;
            axios.get('http://localhost:8081/homepage/view').then(function (resp) {
                that.users=resp.data;
            })
        }
    }
script>
<style scoped>
style>

2.3.3 添加用戶

在views文件夾下創(chuàng)建文件:UserAdd.vue,內(nèi)容如下:

<template>
    <div>
        <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
            <el-form-item label="用戶編號" prop="number">
                <el-input  v-model="ruleForm.number" >el-input>
            el-form-item>
            <el-form-item label="用戶名" prop="name">
                <el-input v-model="ruleForm.name">el-input>
            el-form-item>
            <el-form-item>
                <el-button type="primary" @click="submitForm('ruleForm')">提交el-button>
                <el-button @click="resetForm('ruleForm')">重置el-button>
            el-form-item>
        el-form>
    div>
template>

<script>
    import axios from 'axios';
    export default {
        name: "UserAdd",
        data() {
            var validateNumber = (rule, value, callback) => {
                if (value === '') {
                    callback(new Error('請輸入用戶編號'));
                } else {
                    if (this.ruleForm.number !== '') {
                        //如果不為空
                    }
                    callback();
                }
            };
            var validateName = (rule, value, callback) => {
                if (value === '') {
                    callback(new Error('請輸入用戶名'));
                } else {
                    if (this.ruleForm.name !== '') {
                        //如果不為空
                    }
                    callback();
                }
            };
            return {
                ruleForm: {
                    number: '',
                    name: ''
                },
                rules: {
                    number: [
                        { validator: validateNumber, trigger: 'blur' }
                    ],
                    name: [
                        { validator: validateName, trigger: 'blur' }
                    ]
                }
            };
        },
        methods: {
            submitForm(formName) {
                var that=this;
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        //提交成功后要做的事情
                        // alert('submit!');
                        console.log(that.ruleForm)
                        axios.post('http://localhost:8081/homepage/add',that.ruleForm).then(function (response) {
                            console.log(response);
                        })
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
            }
        }
    }
script>

<style scoped>

style>

2.3.4 修改App

修改App.vue為:

<template>
  <div id="app">
    <el-container style="height: 500px; border: 1px solid #eee">
      <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
        <el-menu :default-openeds="['1']" router>
          <el-submenu index="1">
            <template slot="title"><i class="el-icon-message">i>用戶管理template>
            <el-menu-item-group>

              <el-menu-item index="/">首頁el-menu-item>
              <el-menu-item index="/userView">全部用戶el-menu-item>
              <el-menu-item index="/userAdd">添加用戶el-menu-item>
            el-menu-item-group>

          el-submenu>

        el-menu>
      el-aside>

      <el-container>
        <el-header style="text-align: right; font-size: 12px">
          <span>Snowstormspan>
        el-header>
        <br><br>
        <router-view>router-view>

      el-container>
    el-container>


  div>
template>

<style>
  .el-header {
    background-color: #B3C0D1;
    color: #333;
    line-height: 60px;
  }

  .el-aside {
    color: #333;
  }
style>


<script>
  export default {
    data() {
      const item = {

      };
      return {
        tableData: Array(20).fill(item)
      }
    }
  };
script>

2.3.5 修改index

在 router/index.js 中 const routes 函數(shù)修改為:

const routes = [
  {
    path: '/',
    name: '首頁',
    component: HomePage
  },
  {
    path: '/userview',
    name: '全部用戶',
    component: () =>import(/* webpackChunkName: "user" */'../views/UserView.vue')
   },
   {
    path: '/useradd',
    name: '添加用戶',
    component: () =>import(/* webpackChunkName: "user" */'../views/UserAdd.vue')
   },
   {
    path: '/useredit',
    name: '編輯用戶',
    component: () =>import(/* webpackChunkName: "user" */'../views/UserAdd.vue')
   }
]

3 后端

3.1 控制器

內(nèi)容為:

@RestController
@RequestMapping("/homepage")
publicclass MyController {

    @Resource
    MyService myService;

    // 查看全部數(shù)據(jù)
    @GetMapping("/view")
    public List userView(){
        return myService.userView();
    }

    // 增
    @PostMapping("/add")
    public int userAdd(@RequestBody UserDTO user){
        myService.userAdd(user);
        return0;
    }

    // 刪
    @DeleteMapping("/delete/{number}")
    public int deleteBook(@PathVariable("number") Integer number){
        return myService.userDelete(number);
    }
    // 改
    @PutMapping("/edit")
    public int userEdit(@RequestBody UserDTO user){
        return myService.userEdit(user);
    }
    // 查
    @GetMapping("/query/{start}/{length}")
    public List userQuery(@PathVariable("start") Integer start,@PathVariable("length") Integer length){
        System.out.println("users:" + myService.userQuery(start, length) + "\\n");
        return myService.userQuery(start, length);
    }
}

3.2 服務(wù)

內(nèi)容為:

@Service
@EnableScheduling
publicclass MyServiceImpl implements MyService {
    @Resource
    MyMapper myMapper;
    // 返回全部用戶類
    public List userView(){
        System.out.println("users:" + myMapper.userView() + "\\n");
        return myMapper.userView();
    }
    public Integer userAdd(UserDTO user){
        System.out.println("users:" + user + "\\n");
        return myMapper.userAdd(user);
    }
    public Integer userDelete(int number){
        System.out.println("number:" + number + "\\n");
        return myMapper.userDelete(number);
    }
    public Integer userEdit(UserDTO user){
        System.out.println("user:" + user + "\\n");
        return myMapper.userEdit(user);
    }
    public List userQuery(int start, int length){
        System.out.println("start:" + start + "high:" + length + "\\n");
        return myMapper.userQuery(start, length);
    }
}

3.3 刀

內(nèi)容為:

@Mapper
publicinterface MyMapper {
    List userView();
    Integer userAdd(UserDTO user);
    Integer userDelete(int number);
    Integer userEdit(UserDTO user);
    List userQuery(int start, int length);
}

3.4 模型

文件名UserDTO,內(nèi)容為:

@Data
publicclass UserDTO {
    private Integer number;
    private String name;
    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

3.5 跨域配置

文件名Config,內(nèi)容為:

@Configuration
publicclass Config implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET","HEAD","POST","DELETE","OPTIONS","PUT")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

4 運(yùn)行效果

4.1 主頁

4.2 全部用戶

4.3 添加用戶

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3807

    瀏覽量

    64427
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14353
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    471

    瀏覽量

    16460
  • vue
    vue
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    7847
收藏 人收藏

    評論

    相關(guān)推薦

    Mybatis自動生成增刪改查代碼

    使用 mybatis generator 自動生成代碼,實(shí)現(xiàn)數(shù)據(jù)庫的增刪改查。 1 配置Mybatis插件 在pom文件添加依賴: pluginsplugin
    的頭像 發(fā)表于 01-13 15:43 ?1109次閱讀
    Mybatis自動生成<b class='flag-5'>增刪改</b>查代碼

    使用DOM對XML讀取進(jìn)行增刪改

    DOM解析XML的增刪改查實(shí)現(xiàn)
    發(fā)表于 06-12 16:01

    基于SpringBoot mybatis方式的增刪改查實(shí)現(xiàn)

    SpringBoot mybatis方式實(shí)現(xiàn)增刪改
    發(fā)表于 06-18 16:56

    如何在本地電腦中輸入access數(shù)據(jù)庫路徑,對它進(jìn)行增刪改

    各位大佬好,麻煩指導(dǎo)下如何在本地電腦中通過輸入access數(shù)據(jù)庫路徑,對它進(jìn)行增刪改查。
    發(fā)表于 01-03 09:49

    使用jpa和thymeleaf做增刪改查示例

    【本人禿頂程序員】springboot專輯:springboot+jpa+thymeleaf增刪改查示例
    發(fā)表于 04-01 11:49

    如何用php調(diào)用mysql數(shù)據(jù)庫實(shí)現(xiàn)增刪改

    php調(diào)用mysql數(shù)據(jù)庫實(shí)現(xiàn)增刪改
    發(fā)表于 04-09 12:53

    laravel框架如何進(jìn)行簡單的增刪改查和文件上傳

    laravel框架簡單的增刪改查和文件上傳
    發(fā)表于 04-26 14:13

    vue-cli-----vue實(shí)例中template:'<App/>是什么意思?

    哪位大神知道vue-cli-----vue實(shí)例中template:'是什么意思嗎?
    發(fā)表于 11-05 07:02

    python是如何實(shí)現(xiàn)hbase增刪改查的

    hbase shell是怎樣去創(chuàng)建命名空間的?python是如何實(shí)現(xiàn)hbase增刪改查的?求解
    發(fā)表于 10-19 07:26

    LINQ的增刪改查源碼 v0.1

    LINQ的增刪改查源碼 v0.1.rar 聲明:            
    發(fā)表于 02-08 14:21 ?20次下載

    PHP數(shù)據(jù)庫教程之增刪改查的數(shù)據(jù)高級操作資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是PHP數(shù)據(jù)庫教程之增刪改查的數(shù)據(jù)高級操作資料免費(fèi)下載。
    發(fā)表于 07-02 17:40 ?1次下載

    Spring+Vue工程部署在Linux

    Spring+Vue工程部署在Linux
    的頭像 發(fā)表于 01-13 14:19 ?925次閱讀
    <b class='flag-5'>Spring+Vue</b>工程部署在Linux

    SQLite數(shù)據(jù)庫增刪改

    SQLite數(shù)據(jù)庫增刪改查? SQLite是一種輕量級的RDBMS(關(guān)系型數(shù)據(jù)庫管理系統(tǒng)),具有速度快、易用性高等優(yōu)點(diǎn)。雖然SQLite數(shù)據(jù)庫相對于一些大型數(shù)據(jù)庫管理系統(tǒng)而言功能上存在較多的限制
    的頭像 發(fā)表于 08-28 17:09 ?1214次閱讀

    mysql數(shù)據(jù)庫的增刪改查sql語句

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是許多網(wǎng)站和應(yīng)用程序的首選數(shù)據(jù)庫。在MySQL中,我們可以使用SQL(結(jié)構(gòu)化查詢語言)進(jìn)行數(shù)據(jù)的增刪改查操作。本文將詳細(xì)介紹MySQL數(shù)據(jù)庫的增刪改
    的頭像 發(fā)表于 11-16 15:41 ?1253次閱讀

    數(shù)據(jù)庫mysql基本增刪改

    MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常用于Web應(yīng)用程序的數(shù)據(jù)存儲和管理。通過使用MySQL,用戶可以進(jìn)行數(shù)據(jù)的增刪改查操作,從而實(shí)現(xiàn)對數(shù)據(jù)的有效管理。下面將詳細(xì)介紹MySQL數(shù)據(jù)庫
    的頭像 發(fā)表于 11-16 16:35 ?1520次閱讀