使用SSM+Vue前后端分离开发实现增删改查(超详细)_ssm+vue增删改查代码

前端资料汇总

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿。

}

public void setProductName(String productName) {
    this.productName = productName;
}

public Integer getNums() {
    return nums;
}

public void setNums(Integer nums) {
    this.nums = nums;
}

@Override
public String toString() {
    final StringBuffer sb = new StringBuffer("Product{");
    sb.append("id=").append(id);
    sb.append(", productName='").append(productName).append('\'');
    sb.append(", nums=").append(nums);
    sb.append('}');
    return sb.toString();
}

}


注意:数据库里商品名称为 `productname` ,而实体类里字段为 `productName` ,所以后面操作要额外注意,这里写不同,方便各位小伙伴有个区别。


###### 编写 `ProductController.java`


完整代码:



package com.shaonaiyi.minimall.controller;

import com.shaonaiyi.minimall.entity.Product;
import com.shaonaiyi.minimall.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
* @Auther: shaonaiyi@163.com
* @Date: 2021/8/17 14:10
* @Description: 商品控制器
*/
@Controller
@RequestMapping(“/product”)
@CrossOrigin
public class ProductController {

@Autowired
private IProductService iProductService;

@RequestMapping("/list")
@ResponseBody
public List<Product> list() {
    return iProductService.list();
}

@RequestMapping(value = "/add",method = RequestMethod.POST)
@ResponseBody
public boolean add(@RequestBody Product product) {
    return iProductService.add(product);
}

@RequestMapping(value = "/update",method = RequestMethod.POST)
@ResponseBody
public boolean update(@RequestBody Product product) {
    return iProductService.update(product);
}

@RequestMapping(value = "/delete",method = RequestMethod.POST)
@ResponseBody
public boolean delete(@RequestBody Product product) {
    return iProductService.delete(product);
}

@RequestMapping(value = "/add-test",method = RequestMethod.POST)
@ResponseBody
public boolean addTest(String productName,Integer nums) {
    Product product = new Product();
    product.setProductName(productName);
    product.setNums(nums);
    return iProductService.add(product);
}

@RequestMapping(value = "/delete-test",method = RequestMethod.POST)
@ResponseBody
public boolean deleteTest(int id) {
    Product product = new Product();
    product.setId(id);
    return iProductService.delete(product);
}

}


说明:  
 1、这里提供多了两个接口: `/add-test` 、 `/delete-test` ,方便大家对比学习,两种方式的接受参数的方式不一样, `Content-Type` 一个是 `JSON` ,一个是 `application/x-www-form-urlencoded` ,方式不同,如果不对应上,会报400错误,后面有测试用例,可以看后面内容。  
 2、目前的开发模式一般都是前后端分离开发,所以用 `JSON` 格式进行交互是最常见的;如果想按照自己的风格,没有前后端分离的话,可以使用另外一种。初学者比较容易对这里的内容有误解,可以查阅相关资料。


###### 编写 `IProductService.java`


完整代码:



package com.shaonaiyi.minimall.service;

import com.shaonaiyi.minimall.entity.Product;

import java.util.List;

/**
* @Auther: shaonaiyi@163.com
* @Date: 2021/8/17 14:13
* @Description: 商品逻辑接口
*/
public interface IProductService {

List<Product> list();

boolean add(Product product);

boolean update(Product product);

boolean delete(Product product);

}


###### 编写 `ProductServiceImpl.java`


完整代码:



package com.shaonaiyi.minimall.service.impl;

import com.shaonaiyi.minimall.dao.ProductDao;
import com.shaonaiyi.minimall.entity.Product;
import com.shaonaiyi.minimall.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @Auther: shaonaiyi@163.com
* @Date: 2021/8/17 14:13
* @Description: 商品逻辑实现
*/
@Service
public class ProductServiceImpl implements IProductService {

@Autowired
private ProductDao productDao;

@Override
public List<Product> list() {
    return productDao.list();
}

@Override
public boolean add(Product product) {
    int result = productDao.add(product);
    return result > 0;
}

@Override
public boolean update(Product product) {
    int result = productDao.update(product);
    return result > 0;
}

@Override
public boolean delete(Product product) {
    int result = productDao.delete(product.getId());
    return result > 0;
}

}


###### 编写 `ProductDao.java`


完整代码:



package com.shaonaiyi.minimall.dao;
import com.shaonaiyi.minimall.entity.Product;
import java.util.List;

/**
* @Auther: shaonaiyi@163.com
* @Date: 2021/8/17 14:18
* @Description: 商品Dao接口
*/
public interface ProductDao {

List<Product> list();
int add(Product product);
int update(Product product);
int delete(int id);

}


###### 编写 `ProductDao.xml`


完整代码:



<?xml version="1.0" encoding="UTF-8"?>
<select id="list" resultMap="Product">
    select * from product;
</select>

<insert id="add">
    insert into product
    (productname,nums) values(#{productName},#{nums})
</insert>

<update id="update" parameterType="com.shaonaiyi.minimall.entity.Product">
    update product set productname = #{productName},
    nums = #{nums} where
    id = #{id}
</update>

<delete id="delete" parameterType="int">
    delete from product where
    id = #{id}
</delete>

注意:到底是写 `productname` 还是 `productName` ,需要分清。写好之后,你就可以进行部署运行和测试了。


###### 4、部署Tomcat


此步骤比较简单,可以自行搜一下资料,灵感参考如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f29aeb1061804d1abb4127effc7b9077.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YK15aWI5LiA,size_20,color_FFFFFF,t_70,g_se,x_16)


###### 5、编写测试用例


随便新建个文件夹,然后新建一个以 `http` 后缀结尾的文件,然后写测试用例即可:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/02287a82567d4200841777c8f6fb2a6c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YK15aWI5LiA,size_20,color_FFFFFF,t_70,g_se,x_16)  
 完整的测试用例



1、获取商品列表

GET http://localhost:8080/product/list

2、添加商品

POST http://localhost:8080/product/add
Content-Type: application/json

{
“productName”: “裙子”,
“nums”: 150
}

3、更新商品

POST http://localhost:8080/product/update
Content-Type: application/json

{
“id”:1,
“productName”: “皮靴”,
“nums”: 88
}

4、删除商品

POST http://localhost:8080/product/delete
Content-Type: application/json

{
“id”:30
}

5、添加商品(非JSON方式)

POST http://localhost:8080/product/add-test
Content-Type: application/x-www-form-urlencoded

productName=裙子&nums=150

6、删除商品(非JSON方式)

POST http://localhost:8080/product/delete-test
Content-Type: application/x-www-form-urlencoded

id=29


写好测试用例后,左边会有个运行按钮,当你的 `Tomcat` 启动后,点击绿色小三角按钮就可以测试了:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/42954c5673724fd28e0f3aefc00cc106.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YK15aWI5LiA,size_20,color_FFFFFF,t_70,g_se,x_16)  
 下面会有返回的结果。所以,直接使用 `IDEA` 进行测试是非常方便的。


**测试小技巧:**


在 `http` 文件中,直接打 `gtr` 、 `gtrp` 、 `ptr` 、 `ptrg` 可以生成相应的代码,只需要写必要的参数就可以了,自己可以多试试。


## 00x2 前端代码实现


#### 步骤总览


1、编写未对接数据库的前端代码  
 2、对接查询商品列表接口  
 3、SSM后台代码实现  
 4、部署Tomcat  
 5、编写测试用例


#### 步骤实现


###### 1、编写未对接数据库的前端代码


参考教程::[Vue2.x案例之商品增删改查的实现](https://bbs.csdn.net/topics/618166371)。


在项目中新建一个 `web` 文件夹,然后新建 `index.html` 文件,因为代码比较简单,所以这里我使用传统的开发模式,方便大家入门:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1851e72491d84770947bf56ae83175b7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YK15aWI5LiA,size_20,color_FFFFFF,t_70,g_se,x_16)  
 然后就可以把教程中的代码粘贴进去了,用浏览器打开 `index.html` 文件,其实就可以实现增删改查了,只不过,页面都是没有对接数据库的,所以刷新页面的时候,页面会恢复原样,这当然不是我们所想要实现的效果!


###### 2、对接查询商品列表接口


目前的商品数据是直接写死的:



var data = {
products: [
{ id: 1, productName: ‘袜子’, nums: 15},
{ id: 2, productName: ‘羊毛衫’, nums: 20},
{ id: 3, productName: ‘雪纺衫’, nums: 24},
{ id: 4, productName: ‘高跟鞋’, nums: 30}
],
product4Add: { id: 0, productName: ‘’, nums: ‘0’},
product4Update: { id: 0, productName: ‘’, nums: ‘0’}
};


并且绑定到了Vue里面的data:



var vue = new Vue({
el: ‘#app’,
data: data,


而我们应该做的是从后台的接口里获取到数据。


步骤如下:  
 我们将会引入 `axios` ,方便我们请求后台接口,然后写 `list` 方法对接后台的接口,查询到商品列表信息,你可以给出一个按钮,然后再执行list方法,但一般列表应该是一加载页面就去查询的。所以,我们可以使用Vue中的 `mounted` 钩子函数来达到这个目的。


1、引入axios


添加AJAX




2、编写list方法对接后台接口



list() {
let _this = this;
axios.get(“http://localhost:8080/product/list”).then(
(response) => {
console.log(“查询用户列表结果:”, response);
_this.products = response.data;
}
)
},


3、添加 `mounted` 钩子函数



mounted: function () {
let _this = this;
_this.list();
},


4、删除初始化的商品数据



var data = {
products: [],

};


目前的完整代码如下:



…省略部分未变代码

商品名称数量操作
{{product.productName}}{{product.nums}}
商品名称:
数量:
修改 取消

当然,代码还是有可以优化的地方的,但毕竟不想改那么多,如果你觉得不服,你可以从屏幕里出来打我!  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7d4fe02872744e368f18ada869b8d121.png#pic_center)  
 这篇文章断断续续写了快一个月才完成,好累啊!将近3w字!!!


我决定把这篇文章把公众号里也发一下!原本不想发公众号,是因为公众号修改起来麻烦,那我发到公众号后,基本是不会再改的了,老铁们可以多提点建议,支持支持!


## 0xFF 总结


1. 这篇文章使用SSM技术实现了后端,并且通过IDEA实现了测试,完全不依赖前端操作。然后随便建了文件夹就可以把前端给实现了,让有点前端基础的人也能轻松实现我们这一次的操作。完全打工前后端分离开发的流程!
2. 请关注本博客,本博客很多文章都是在原博客上迭代写的,提供多种解决方案,有利于小伙伴们不迷路,感谢支持!
3. 小伙伴们肯定觉得这个样式太难看了吧!本博客里有一篇配套的调整样式的文章,请参考:[Bootstrap全局css样式的使用](https://bbs.csdn.net/topics/618166371),效果是这样子滴,希望大家学得开心:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d2fae21d032e4d53a06d5633bd3c9bd0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YK15aWI5LiA,size_20,color_FFFFFF,t_70,g_se,x_16)



> 
> **邵奈一** 原创不易,如转载请标明出处,教育是一生的事业。
> 
> 
> 




---




下面是我在学习HTML和CSS的时候整理的一些笔记,有兴趣的可以看下:

![HTML、CSS部分截图](https://img-blog.csdnimg.cn/img_convert/2bb6b442a4432372fe5b9ccea2ad93d0.png)

### 进阶阶段



进阶阶段,开始攻 JS,对于刚接触 JS 的初学者,确实比学习 HTML 和 CSS 有难度,但是只要肯下功夫,这部分对于你来说,也不是什么大问题。

JS 内容涉及到的知识点较多,看到网上有很多人建议你从头到尾抱着那本《JavaScript高级程序设计》学,我是不建议的,毕竟刚接触 JS 谁能看得下去,当时我也不能,也没那样做。



我这部分的学习技巧是,增加次数,减少单次看的内容。就是说,第一遍学习 JS 走马观花的看,看个大概,去找视频以及网站学习,不建议直接看书。因为看书看不下去的时候很打击你学下去的信心。

然后通过一些网站的小例子,开始动手敲代码,一定要去实践、实践、实践,这一遍是为了更好的去熟悉 JS 的语法。别只顾着来回的看知识点,眼高手低可不是个好习惯,我在这吃过亏,你懂的。



**1、JavaScript 和 ES6**



在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。



![JavaScript部分截图](https://img-blog.csdnimg.cn/img_convert/cac778dc45492a41e2f3e7cd6b0134e5.png)



**2、前端框架**

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

以 Vue 为例,我整理了如下的面试题。



![Vue部分截图](https://img-blog.csdnimg.cn/img_convert/c6738a80c94640db83f7ffbf487ac5f0.png)



  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值