php跨域curd,SpringBoot+Vue前后端分离(CURD)Demo

article/2025/9/26 6:39:10

我发现我好久没有更新了,写一篇证明我还活着。

既然是前后端分离的话,肯定是要有前端和后端的。

这里前端我使用的Vue+ElementUI,后端采用的是SpringBoot+Mybatis+Swagger2。

下面的话,我就做一个简单的Demo吧。

写的不好,请大家各位大佬们指点

1、后端

后端的话,我是使用之前基础上面改的。EasyCode(代码神器)

1.1 pom.xml

io.springfox

springfox-swagger2

2.5.0

com.github.xiaoymin

swagger-bootstrap-ui

1.9.3

1.2 添加Swagger配置类

3ae4e3e2887c

image.png

/**

* Swagger2

* 该项目访问地址:http://127.0.0.1:8089/doc.html

* @author wangxl

* @date 2019/8/16 20:19

*/

@Configuration

public class Swagger2 {

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("com.vue.demo"))

.paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("Vue接口测试")

.description("简单优雅的restful风格")

.termsOfServiceUrl("www.wangxianlin@icloud.com")

.version("1.0")

.build();

}

}

1.3 添加注解

3ae4e3e2887c

image.png

在启动类中,需要添加一个注解

3ae4e3e2887c

image.png

1.4 然后启动项目

3ae4e3e2887c

image.png

测试完,所有的接口没有问题了,现在我们就来编写前端的界面。

2、前端

前端,我使用的是Vue+ElementUi写的,界面简洁美观。

2.1 新建一个Vue项目

2.2 前端目录:

3ae4e3e2887c

前端目录.png

前端界面,我是用的是element-ui,感觉界面看起来很舒服。

官网教程:Vue中安装element-ui

2.3 页面与配置

2.3.1 配置

1.config/index.js

module.exports = {

dev: {

// Paths

assetsSubDirectory: 'static',

assetsPublicPath: '/',

// modeify

proxyTable: {

//modify

'/api/**': {

target: 'http://127.0.0.1:8089',//设置你调用的接口域名和端口号 别忘了加http

changeOrigin: true,//這裡true表示实现跨域

pathRewrite: {

'^/api': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可

}

}

},

2.src/main.js

import Vue from 'vue'

import App from './App'

import router from './router'

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

import axios from 'axios'

Vue.use(ElementUI)

axios.defaults.baseURL = 'http://localhost:8089/api'

// 将API方法绑定到全局

Vue.prototype.$axios = axios

Vue.config.productionTip = false

/* eslint-disable no-new */

new Vue({

el: '#app',

router,

components: { App },

template: ''

})

2.3.2 页面 table.vue

用户信息列表

@click="editUser(scope.$index, scope.row)">编辑

type="danger"

@click="deleteUser(scope.$index, scope.row)" icon="el-icon-delete">删除

添加

v-model="form.birthday"

type="date"

placeholder="请选择你的生日">

v-model="editform.birthday"

type="date"

placeholder="请选择你的生日">

export default {

data () {

return {

activeIndex: '1',

// 表格内容

tableData: [],

centerDialogVisible: false,

editformDialogVisible: false,

//添加表单

form: {

name: '',

sex: '',

address: '',

password: '',

birthday:''

},

//修改表单

editform: {

id:'',

name: '',

sex: '',

address: '',

password: '',

birthday:''

},

formLabelWidth: '80px'

}

},

methods: {

//添加用户

addUser () {

var _this = this

_this.centerDialogVisible = false

if (_this.form.name == '') {

alert('姓名不能为空')

return

}

if (_this.form.sex == '') {

alert('请选择你的性别')

return

}

if (_this.form.birthday == '') {

alert('请选择你的生日')

return

}

if (_this.form.address == '') {

alert('请填写你的家庭住址')

return

}

if (_this.form.password == '') {

alert('密码不能为空')

return

}

let user = JSON.stringify({

username: _this.form.name,

sex: _this.form.sex,

address: _this.form.address,

password: _this.form.password,

birthday:_this.form.birthday

})

_this.$axios.post('/api/user/insertUser', user, {

headers: {

'Content-Type': 'application/json;charset=utf-8' //头部信息

}

}).then(res => {

if (res.data == 1) {

_this.$message({

message: '添加成功',

type: 'success'

})

//刷新页面

this.getData()

}

}

).catch(error => {

_this.$message.error('添加失败,服务其内部错误')

})

},

//修改用户弹窗 赋值操作

editUser (index, row) {

var _this = this;

_this.editformDialogVisible=true;

_this.editform.id = row.id;

_this.editform.name = row.username;

_this.editform.sex = row.sex;

_this.editform.address = row.address;

_this.editform.password = row.password;

_this.editform.birthday = row.birthday;

},

//修改用户

updateUser(){

var _this = this;

_this.editformDialogVisible=false;

if (_this.editform.name == '') {

alert('姓名不能为空')

return

}

if (_this.editform.sex == '') {

alert('请选择你的性别')

return

}

if (_this.editform.birthday == '') {

alert('请选择你的生日')

return

}

if (_this.editform.address == '') {

alert('请填写你的家庭住址')

return

}

if (_this.editform.password == '') {

alert('密码不能为空')

return

}

let user = JSON.stringify({

id:_this.editform.id,

username: _this.editform.name,

sex: _this.editform.sex,

address: _this.editform.address,

password: _this.editform.password,

birthday:_this.editform.birthday

})

_this.$axios.post('/user/updateUser', user, {

headers: {

'Content-Type': 'application/json;charset=utf-8' //头部信息

}

}).then(res => {

if (res.data == 1) {

_this.$message({

message: '修改成功',

type: 'success'

})

//刷新页面

this.getData()

}

}

).catch(error => {

_this.$message.error('修改失败,服务其内部错误')

console.log(error)

})

},

//删除用户

deleteUser (index, row) {

// index 表示当前所在行的行号

// row 表示当前所在行的数据

this.$confirm('是否删除该用户?', '提示', {

confirmButtonText: '确定',

cancelButtonText: '取消',

type: 'warning'

}).then(() => {

var _this = this

_this.$axios.get('/user/deleteUserById', {

params: {

id: row.id

}

}).then(res => {

if (res.data == 1) {

_this.$message({

message: '删除成功',

type: 'success'

})

//刷新页面

this.getData()

}

}

).catch(error => {

_this.$message.error('删除失败,服务其内部错误')

console.log(error)

})

}).catch(() => {

this.$message({

type: 'info',

message: '已取消删除'

});

});

},

getData () {

var _this = this

_this.$axios.get('/user/quertUser', {

params: {

offset: 0,

limit: 10

}

}

).then(res => {

this.tableData = res.data

}

).catch(error => {

console.log(error)

})

}

},

mounted () { //mounted:渲染HTML成功后调 用getData方法读取商品数据,getBrandsData读取品牌数据

this.getData()

}

}

3、测试

用户列表

3ae4e3e2887c

用户列表展示.png

添加用户.

3ae4e3e2887c

添加用户.png

修改用户.

3ae4e3e2887c

修改用户.png

删除用户

3ae4e3e2887c

删除用户.png

删除成功

3ae4e3e2887c

删除成功.png


http://chatgpt.dhexx.cn/article/cl0JKEcb.shtml

相关文章

单表CURD操作

该项目纯粹用 Servlet 编写,理解跳转过程。理解原理..... 一、准备数据库脚本 USE test;DROP TABLE IF EXISTS dept;CREATE TABLE dept (deptno int(2) NOT NULL,dname varchar(14) DEFAULT NULL,loc varchar(13) DEFAULT NULL,PRIMARY KEY (DEPTNO) ) ENGINEInnoD…

Avue-curd个性化定制

在使用vue(js)elelment(ui)开发一些后台管理项目的时候,基本会用到 列表页,条件搜索(search),表格数据(table),分页,操作栏的,增、删、改、查几种操作。如下图这样的: 很多的页面都很类似,这里就给大家介绍…

Python简单CURD

python Python的注释模块 python变量 格式化输出 转义字符 与 数据类型 控制台输入 实体类 Student.dy class Emp:def __init__(self,id,name,age,sex,sal):self.id idself.name nameself.age ageself.sex sexself.sal saldef __str__(self):return "学号&#xf…

MySQL常用语句(CURD)

文章目录 一、数据库定义语言(DDL)1.1 库操作1.2 表操作 二、数据库操纵语言(DML)2.1 插入 insert2.2 修改 update2.3 删除 delete 三、数据库查询语言(DQL)3.1 单表查询①查询:select②条件&am…

SpringBoot实现CURD

SpringBoot实现CURD 项目列表 Pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

thinkphp curd 列表关联展现方式分享

在维护自己的开源框架中&#xff0c;针对后台列表模板&#xff0c;有时候我们需要在一键CURD的情况下&#xff0c;进行多个字段的关联显示&#xff0c;比如用户订单表里面存在user_id字段&#xff0c;那么在显示的时候&#xff0c;我们期望显示出用户的名称&#xff0c;而不是用…

mysql curd_mysql 基础之CURD

原文:mysql 基础之CURD 增删改查基本语法学习 增: insert Insert 3问: 1: 插入哪张表? 2: 插入哪几列? 3: 这几列分别插入什么值? Insert into TableName (列1,列2....列n) Values (值1,值2,....值n) 值 与 列,按顺序,一一对应 特殊: insert语句 允不允许不写列名 答:允许. …

小白入门:什么是CURD?

CRUD是CREATE、READ、UPDATE和DELETE的首字母缩写词&#xff0c;在数据库操作中频繁出现&#xff0c;本文针对小白&#xff0c;如果你已经是开发人员或者对数据库有一定认识的工程师可以默默离开了。让我直接走进CURD的世界。 为什么 CRUD 如此重要&#xff1f; CRUD 经常用于…

大龄焦虑?如何看待程序员35岁职业危机?

往期精选&#xff08;欢迎转发~~&#xff09; Java全套学习资料&#xff08;14W字&#xff09;&#xff0c;耗时半年整理 消息队列&#xff1a;从选型到原理&#xff0c;一文带你全部掌握 肝了一个月的ETCD&#xff0c;从Raft原理到实践 我肝了三个月&#xff0c;为你写出了…

Sitemesh前段框架基础

用sitemesh框架解决项目统一布局的解决方案 Sitemesh装饰框架 Sitemesh项目简介&#xff1a; Sitemesh是一个用来在jsp中实现页面布局和装饰&#xff08;layout and decoration&#xff09;的框架组件&#xff0c;能够帮助网站开发人员较容易实现页面中动态和静态装饰外观的分…

Sitemesh Demo

简介 sitemesh是一个网页布局与装饰体系,主要应用于创建具有大量一致性用户界面、导航与布局框架的站点。sitemesh拦截一切经过web server的静态或动态生成的HTML页面请求,处理页面内容,并将其与一个或多个装饰页面进行融合,生成最终页面。sitemesh也可用于构建由多个部分小…

spring集成sitemesh3

1、SiteMesh是什么&#xff1f; SiteMesh是一个网页布局和修饰的框架&#xff0c;利用它可以将网页的内容和页面结构分离&#xff0c;以达到页面结构共享的目的。 SiteMesh是基于Servlet的filter&#xff0c;通过截取response&#xff0c;并进行装饰后再交付给客户。 2、SiteMe…

sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)

一 简单介绍 sitemesh是一种模板框架&#xff0c;是为了解决页面重复代码而设计的sitemesh的设计思想是装饰者设计模式 二 简单使用 目录结构&#xff0c;因为我这个项目本来是用来学习flowable的&#xff0c;后面为了方便快速学习&#xff0c;直接把sitemesh集成到这里了&a…

SiteMesh3简介及使用

最近项目用到SiteMesh3&#xff0c;研究学习一段时间后决定写篇博文来记录收获。 SiteMesh SiteMesh 介绍工作原理配置及使用 下载1添加maven依赖2webxml中添加SiteMesh过滤器3创建一个装饰页面decorator page4创建一个被装饰页面content page5配置 1XML方式1Java方式 6查看…

sitemesh初步

sitemesh小项目 1.工程目录 2.需要的lib:sitemesh-2.4.2.jar http://wiki.sitemesh.org/wiki/display/sitemesh/Download 3.配置 decorators.xml[sitemesh的配置文件] <?xml version"1.0" encoding"ISO-8859-1"?><!-- 在defaultdir目录…

SiteMesh框架统一布局用法介绍

SiteMesh 是一个网页布局和修饰的框架&#xff0c;基于 Servlet 中的 Filter&#xff0c;类似于 ASP.NET 中的‘母版页’技术。 介绍&#xff1a; 1&#xff0c;SiteMesh是OpenSymphony团队开发的JEE框架之一,它是一个非常优秀的页面装饰器框架。它通过对所有的用户请求进行过…

SIteMesh介绍

转自:http://javauu.com/thread-27-1-1.html 一、SIteMesh介绍 一、SiteMesh简介 SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观&#xff0c;如一致的导航条&#xff0c;一致的banner&a…

【CSRF】学习关于CSRF攻击和防范

文章目录 1.CSRF攻击是什么2.CSRF攻击如何实现2.1 使用GET请求的CSRF的攻击例子2.2 使用post请求的CSRF攻击 3.如何防御CSRF攻击3.1 什么是CSRF令牌3.2 反-CSRF令牌工作流程3.3 同站Cookie策略 4.结论 高质量原文&#xff1a; CSRF Attacks: Anatomy, Prevention, and XSRF To…

CSRF攻击简述

一.CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;也被称为&#xff1a;one click attack/session riding&#xff0c;缩写为&#xff1a;CSRF/XSRF。 二.CSRF可以做什么&#xff…

如何防止CSRF攻击?

文章目录 一、什么是CSRF&#xff1f;二、CSRF的几种类型1、GET类型的CSRF2、POST类型的CSRF3、链接类型的CSRF 三、CSRF的特点四、防护策略1、同源检测如何阻止外域请求无法确认来源域名情况 2、CSRF Token原理1&#xff09;将CSRF Token输出到页面中2&#xff09;页面提交的请…