14-SpringBoot+Mybatis+Vue实现商品模块的crud操作

开滴滴
• 阅读 978

准备工作

第一步 创建新module,名字为10-springboot-goods-vue.
第二步 添加maven依赖并进行初步配置(拷贝即可)
第三步 拷贝pojo,dao,service包中的所有接口和类.
第四步 拷贝静态资源到static目录(例如vue.js,axios.min.js)

商品查询设计及实现

创建GoodsController并定义相关方法,代码如下:

package com.cy.pj.goods.controller;
import com.cy.pj.goods.pojo.Goods;
import com.cy.pj.goods.service.GoodsService;
import java.util.List;
@RestController
public class GoodsController {
     @Autowired
     private GoodsService goodsService;
      /**查询所有商品信息*/
     @GetMapping("/goods/doFindGoods")
      public List<Goods> doFindGoods(){
          return goodsService.findGoods();
      }
}

在项目static目录创建goods-vue.html,并基于vue呈现数据,代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div id="app">
      <h1>The Goods Page</h1>
      <table>
          <thead>
             <tr>
                 <th>id</th>
                 <th>name</th>
                 <th>remark</th>
                 <th>createdTime</th>
             </tr>
          </thead>
          <tbody>
             <tr v-for="g in goods">
                 <td>{{g.id}}</td>
                 <td>{{g.name}}</td>
                 <td>{{g.remark}}</td>
                 <td>{{g.createdTime}}</td>
             </tr>
          </tbody>
      </table>
  </div>
  <script src="js/axios.min.js"></script>
  <script src="js/vue.js"></script>
  <script> var vm=new Vue({//vue对象时vue.js应用的入口对象
             el:"#app",//vue对象要监控的区域
             data:{//此对象用于同步页面数据的一个对象
             goods:{}
             },
             methods:{//同步与页面元素事件处理函数
                doFindGoods:function(){
                 let url="goods/doFindGoods";
                 axios.get(url)
                      .then(function(result){
                            this.vm.goods=result.data;
                       });
                 }
             },
             mounted:function(){
                 this.doFindGoods();
             }
      }); </script>
</body>
</html>

启动tomcat进行访问测试,如图所示:14-SpringBoot+Mybatis+Vue实现商品模块的crud操作

商品删除设计及实现

在控制层方法中添加,处理删除逻辑的方法,代码如如下:

@RequestMapping("/goods/doDeleteById/{id}")
public String doDeleteById(@PathVariable("id")  Integer id){
    System.out.println("delete id "+id);
    goodsService.deleteById(id);
    return "delete ok";
}

在商品列表中的tr对象内部添加删除元素,代码如下:

<td><a @click="doDeleteById(g.id)">删除</a></td>

在商品模块的vue对象中添加执行删除逻辑的方法,代码如下:

doDeleteById:function(id){
    var url="goods/doDeleteById/"+id;
    axios.get(url)
        .then(function(res){
            alert(res.data);
            this.vm.doFindGoods();
        })
}

启动服务进行访问测试,检测其结果。

商品添加设计及实现

在Controller类中添加用于处理商品添加逻辑的方法,代码如下:

@RequestMapping("/goods/doSaveGoods")
public String doSaveGoods(@RequestBody Goods entity){
    System.out.println("entity="+entity);
    goodsService.saveGoods(entity);
    return "save ok";
}

在Goods页面上添加表单元素,用于实现用户输入,代码如下:

<form>
    <ul>
        <li>name</li>
        <li><input v-model="name"></li>
        <li>remark</li>
        <li><textarea v-model="remark"></textarea></li>
        <li><input type="button" @click="doSaveOrUpdateGoods" value="Save Goods"></li>
    </ul>
</form>

在vue对象内部添加用于同步表单数据的Data属性内容,代码如下:

data:{
    name:"",
    remark:"",
    goods:"",
}

在vue对象内部添加处理添加操作的事件处理函数,代码如下:

doSaveOrUpdateGoods:function(){
    var params={"name":this.name,"remark":this.remark};
    var url="goods/doSaveGoods";
    axios.post(url,params)
        .then(function(res){
            alert(res.data);
            this.vm.doFindGoods();
            this.vm.name="";
            this.vm.remark="";
        });
}

启动服务,进行添加操作测试。

商品修改设计及实现

在Controller中添加基于商品id查询和更新商品信息的方法,代码如下:

@RequestMapping("/goods/doFindById/{id}")
public Goods doFindById(@PathVariable("id") Integer id){
    return goodsService.findById(id);
}
@RequestMapping("goods/doUpdateGoods")
public String doUpdateGoods(@RequestBody Goods entity){
    goodsService.updateGoods(entity);
    return "update ok";
} 

在Goods页面表单中添加隐藏的表单元素用于记录id值,代码如下:

<li><input type="hidden" v-model="id"></li>

在Goods页面记录中添加修改操作的需要的a元素,代码如下:

<td><a @click="doFindById(g.id)">修改</a></td>

在Vue对象中添加基于id查询的方法,代码如下:

doFindById:function(id){
    var url="goods/doFindById/"+id;
    axios.get(url)
    .then(function(res){
        console.log(res.data);
        this.vm.id=res.data.id;
        this.vm.name=res.data.name;
        this.vm.remark=res.data.remark;
    })
}

修改Vue对象中的用于保存和修改数据的方法,代码如下:

doSaveOrUpdateGoods:function(){
    var params={"id":this.id,"name":this.name,"remark":this.remark};
    var url=this.id?"goods/doUpdateGoods":"goods/doSaveGoods";
    axios.post(url,params)
        .then(function(res){
            this.vm.doFindGoods();
            alert(res.data);
            this.vm.id="";
            this.vm.name="";
            this.vm.remark="";
        });
}

启动服务进行访问测试,检测其结果。

总结(Summary)

本小节主要基于vue和axio技术实现了商品模块的基本操作,重点掌握客户端与服务端的交互和传值过程。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
小尉迟 小尉迟
2年前
Mac上拷贝和复制有什么区别?
在Mac上,使用复制和拷贝时,都会创建一个新的条目,并且该条目与原始数据相同。但是这两者有什么区别?你知道吗?1、内容不同复制是直接生成一个一样的文件拷贝是复制内容,把它放到剪贴板上,但是还没有进行粘贴的内容2、位置不同复制的内容位置就在当下的目录里拷贝的
Wesley13 Wesley13
3年前
java多线程实现复制功能并统计进度
业务描述复制某目录下的一个大文件,要求使用10个线程同时工作。并且统计复制的完成度,类似于进度条的功能。业务分析步骤:1、在使用多线程进行拷贝的时候,首先要知道文件的大小然后根据线程的数量,计算出每个线程的工作的数量。需要一个拷贝的类,进行复制,初始化线程数组2、创建一个统计文件复制进度的线程类。3、拷贝线程。
Wesley13 Wesley13
3年前
ES6模块与CommonJS模块有什么区别?
ES6Module和CommonJS模块的区别:CommonJS是对模块的浅拷贝,ES6Module是对模块的引用,即ES6Module只存只读,不能改变其值,具体点就是指针指向不能变,类似constimport的接口是readonly(只读状态),不能修改其变量值。即不能修改其变量的指针指向,但可以改变变量内部指针指向,可以对comm
Wesley13 Wesley13
3年前
CAS二次开发记录
创建项目下载cas4.1.10的源代码,里面有非常多的module,我们使用casserverwebapp来作为模块进行二次开发。自己创建一个项目,将casserverwebapp拷贝相关文件过来,注意整理pom的依赖。数据源的修改我们这里数据源使用的是jndi的方式,所以修改deployerConfigCo
Stella981 Stella981
3年前
JavaScript的深拷贝和浅拷贝
一、数据类型数据分为基本数据类型(String,Number,Boolean,Null,Undefined,Symbol)和对象数据类型。、1.基本数据类型的特点:直接存储在栈(stack)中的数据2.引用数据类型的特点:存储的是该对象在栈中引用,真实的数据放在堆内存里。引用数据类型在栈中存储了指针,该指针指向堆中该实
Stella981 Stella981
3年前
Linux配置redis开机启动(CentOS 7)
https://blog.csdn.net/qq\_31803503/article/details/79246205本次配置linux版本是CentOS7_首先将 redis3.2.3/utils目录下的redis\_init\_script脚本拷贝到 /etc/init.d下修改名字为 redis_\root@lo
Stella981 Stella981
3年前
Redis 三主三从集群搭建
1.安装包依赖yumyinstallgccgcccwgetmaketcl2\.makemakeMALLOClibcmakeinstall3.使用脚本安装服务cdutils/./install\_server.sh4.将src目录下的redis开头的可执行文件全部拷贝到/usr/local/re
Wesley13 Wesley13
3年前
ubuntu 字体
1。解决在ubuntu下安装xp字体的问题:第一步:拷贝xp下的字体文件(控制面板字体)到一个文件夹,可命名为xpfonts;此方法适合单系统用户,如果是双系统用户,也可以考虑建立软链接;第二步:拷贝xpfonts文件夹到/usr/share/fonts下;具体的实现命令:#cdxpfonts文件夹所在目录#sudo
Wesley13 Wesley13
3年前
Java中的深浅拷贝问题你清楚吗?
一、前言拷贝这个词想必大家都很熟悉,在工作中经常需要拷贝一份文件作为副本。拷贝的好处也很明显,相较于新建来说,可以节省很大的工作量。在Java中,同样存在拷贝这个概念,拷贝的意义也是可以节省创建对象的开销。Object类中有一个方法clone(),具体方法如下:protectednativeObjectclone()