Spring Boot结合Element UI前后端分离的aixos的简单操作
1:axios是什么?
- 基于promise用于浏览器和node.js的http客户端
- axios官网:http://www.axios-js.com/
2:准备工作:
- 安装axios:npm install axios
- 或者直接使用在线的cdn:<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
- 我这边是结合了element UI来做的一个表格提交和查看与删除的数据
- 数据库创建表语句:
/*
Navicat Premium Data Transfer Source Server : good
Source Server Type : MySQL
Source Server Version : 80019
Source Host : localhost:3306
Source Schema : xiaolu Target Server Type : MySQL
Target Server Version : 80019
File Encoding : 65001 Date: 23/03/2021 20:20:18
*/ SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`birth` date NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
在springboot中创建数据库表的实体类 :
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private String sex;
private String email;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birth;
}
创建mapper接口:
@Mapper
public interface UserMapper {
/*
查找方法
*/
List<User> finAll();
/*
添加方法
*/
void adduser(User user);
/*
删除方法
*/
void delect(String id);
}
编写对应的mapper.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuang.Mapper.UserMapper"> <select id="finAll" resultType="User">
select id,name,sex,birth,email from user;
</select>
<insert id="adduser" parameterType="User">
insert into user values(#{id},#{name},#{sex},#{email},#{birth});
</insert>
<delete id="delect" parameterType="String">
delete from user where id=#{id}
</delete>
</mapper>
再写server层:
public interface UserMapperImp {
/*
查找方法
*/
List<User> finAll();
/*
添加方法
*/
void adduser(User user);
/*
删除方法
*/
void delect(String id);
}
和实现类:
@Service
@Transactional
public class MyController implements UserMapperImp {
@Autowired
UserMapper userMapper;
@Override
public List<User> finAll() {
return userMapper.finAll();
}
@Override
public void adduser(User user) {
userMapper.adduser(user);
}
@Override
public void delect(String id) {
userMapper.delect(id);
}}
这边在vo层写一个类来做个标记 用来查看方法是否成功:
@Data
public class Result {
private Boolean status=true;
private String msg;
}
最后写Controller层:
@CrossOrigin//解决跨域问题
@RestController //因为要解析为json
public class UserController {
@Autowired
UserMapperImp userMapperImp;
@RequestMapping("/user")
public List<User> finAll(){
return userMapperImp.finAll();
}
@PostMapping("/post")
public Result testSave(@RequestBody User user){
Result result = new Result();
try {
userMapperImp.adduser(user);
result.setMsg("成功");
}catch (Exception e){
result.setStatus(false);
result.setMsg("保存失败");
}
return result;
}
@GetMapping("delect")
public Result delect(String id){
Result result = new Result();
try {
userMapperImp.delect(id);
result.setMsg("成功");
}catch (Exception e){
result.setStatus(false);
result.setMsg("保存失败");
}
return result;
}
这边springboot代码写好了
编写vue代码:
先创建一个vue项目 可以参考我的之前的element UI的第一个项目:
- Element UI的第一个程序(标签使用) - java小白名叫杰 - 博客园 https://www.cnblogs.com/yunjie0930/p/14563139.html
main.js配置中配置为一下代码:
import Vue from 'vue'
import App from './App'
import VueRouter from "vue-router";
import axios from 'axios'
//扫描路由配置
import router from "./router"
//导入elementUI
import ElementUI from "element-ui"
//导入element css
import 'element-ui/lib/theme-chalk/index.css'
//使用
Vue.prototype.$http= axios
Vue.use(VueRouter)
Vue.use(ElementUI)
Vue.config.productionTip = false
new Vue({
el: '#app',
router,
render: h => h(App),//ElementUI规定这样使用
})
App.vue:这边这样写是为了让页面都有这个配置:
<template>
<div id="app">
<el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">
<el-menu-item index="1">主页</el-menu-item>
<el-menu-item index="2">
<a href="#/index">员工</a>
</el-menu-item>
<el-menu-item index="3">登录主页</el-menu-item>
<el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
</el-menu>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
activeIndex: '1',
activeIndex2: '1'
};
},
methods: {
handleSelect(key, keyPath) {
console.log(key, keyPath);
}
}
}
</script>
<style>
.el-menu-demo{ }
</style>
效果图:
注册路由:因为我的文件名叫Add.vue和Index.vue:
//导入vue
import Vue from 'vue';
import VueRouter from 'vue-router';
//导入组件
import Index from '../components/Index'
import Add from '../components/Add'
//使用
Vue.use(VueRouter);
//导出
export default new VueRouter({
routes: [
{path: '/index',component: Index},
{path: '/add',component: Add}
]
})
最后写出我们的Index.vue文件:
<template>
<div>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column
label="ID"
width="180">
<template slot-scope="scope">
<i class="el-icon-time"></i>
<span style="margin-left: 10px">{{ scope.row.id }}</span>
</template>
</el-table-column>
<el-table-column
label="姓名"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<p>姓名: {{ scope.row.name }}</p>
<p>邮箱: {{ scope.row.email}}</p>
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.name }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column label="生日" prop="birth"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="操作" >
<template slot-scope="scope">
<el-button
size="mini"
@click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-button type="success" round style="margin-top:10px "><a href="#/add">添加</a></el-button>
</div> </template> <script>
export default {
name: "Index",
data() {
return {
tableData: [
],
//对应数据库的字段
form: {
birth:'',
sex:'男',
name: '',
email:''
}
}
},
//方法
methods: {
handleEdit(index, row) {
form=this.form
},
//删除按钮绑定的方法 然后用判断下标id来从后端的方法删除此数据
handleDelete(index, row) {
this.$http.get("http://localhost:8081/delect?id="+row.id).then(res=>{
//res.data.status是后端自定义的标记类 如果为ture则打印成功
if (res.data.status){
console.log(res.msg);
}else {
console.log(res.msg);
}
})
}
},
//展示数据 从后端获取数据 然后赋值给data来展示
created() {
this.$http.get("http://localhost:8081/user").then(res=>
{
this.tableData=res.data;
});
}}
</script>
<style scoped>
</style>
显示情况:
编写表单Add.vue文件:
<template>
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="姓名">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="生日">
<el-col :span="11">
<el-date-picker type="date" placeholder="选择日期" v-model="form.birth" style="width: 100%;"></el-date-picker>
</el-col>
<el-col class="line" :span="2">-</el-col>
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="form.sex">
<el-radio label="男"></el-radio>
<el-radio label="女"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="活动形式">
<el-input type="textarea" v-model="form.email"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">添加</el-button>
<el-button>取消</el-button>
</el-form-item>
</el-form>
</template> <script>
export default {
name: "Add",
//data里面的数据表单对应数据库的字段
data() {
return {
form: {
name: '',
birth:'',
sex:'男',
email:''
}
}
},
methods: {
//添加数据的方法 使用post
onSubmit() {
this.$http.post("http://localhost:8081/post",this.form).then(res=> {
//判断状态 状态为ture则成功 并把表单清空
if (res.data.status) {
console.log(res.data),
this.form = {}
} else {
//为false则失败 打印失败信息
console.log(res.data.status)
}
}) }
}
}
</script>
<style scoped>
</style>
运行图:
展示图:
记录一下成长过程 加油!!!
Spring Boot结合Element UI前后端分离的aixos的简单操作的更多相关文章
- Spring Boot + Vue + Shiro 实现前后端分离、权限控制
本文总结自实习中对项目的重构.原先项目采用Springboot+freemarker模版,开发过程中觉得前端逻辑写的实在恶心,后端Controller层还必须返回Freemarker模版的ModelA ...
- 企业快速开发平台Spring Cloud+Spring Boot+Mybatis+ElementUI 实现前后端分离
鸿鹄云架构一系统管理平台 鸿鹄云架构[系统管理平台]使用J2EE技术来实施,是一个大型分布式的面向服务的JavaEE体系快速研发平台,基于模块化.服务化.原子化.热部署的设计思想,使用成熟领先的无商业 ...
- Docker中Spring boot+VueJS+MongoDB的前后端分离哲学摔跤
此文献给对数据有热情,想长期从事此行业的年轻人,希望对你们有所启发,并快速调整思路和方向,让自己的职业生涯有更好的发展. 根据数据应用的不同阶段,本文将从数据底层到最后应用,来谈谈那些数据人的必备技能 ...
- 分享一个自搭的框架,使用Spring boot+Vue+Element UI
废弃,新的:https://www.cnblogs.com/hackyo/p/10453243.html 特点:前后端分离,可遵循restful 框架:后端使用Spring boot,整合了aop.a ...
- 【SpringSecurity系列3】基于Spring Webflux集成SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/02-springsecurity-state ...
- Kitty基于Spring Boot、Spring Cloud、Vue.js、Element实现前后端分离的权限管理系统
源码地址:https://gitee.com/liuge1988/kitty 软件架构 后端架构 开发环境 IDE : eclipse 4.x JDK : JDK1.8.x Maven : Maven ...
- Django+element ui前后端不分离的博客程序
最近把去年写的一个烂尾博客(使用了django1.11和element ui)又重新完善了一下,修改了样式和增加了新功能 github链接:https://github.com/ngauerh/Nag ...
- 七个开源的 Spring Boot 前后端分离项目,一定要收藏!
前后端分离已经在慢慢走进各公司的技术栈,根据松哥了解到的消息,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,松哥也非常建议大家学习一下前后端分离开发,以免在公司干了两三年 ...
- 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- Spring Boot Security JWT 整合实现前后端分离认证示例
前面两章节我们介绍了 Spring Boot Security 快速入门 和 Spring Boot JWT 快速入门,本章节使用 JWT 和 Spring Boot Security 构件一个前后端 ...
随机推荐
- C语言指针函数和函数指针区别(转)
C语言函数指针和指针函数的区别C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址. 指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是 ...
- Python基础——数字类型int与float、字符串、列表、元组、字典、集合、可变类型与不可变类型、数据类型总结
文章目录 一 引子 二 数字类型int与float 2.1 定义 2.2 类型转换 2.3 使用 三 字符串 3.1 定义: 3.2 类型转换 3.3 使用 3.3.1 优先掌握的操作 3.3.2 需 ...
- 查漏补缺,这些热门开源项目你都知道么?「GitHub 热点速览」
本期热点速览的周榜部分的项目,基本上每周都会在 GitHub Trending 见到它们的身影,因为它们实在太火了.一般来说,这些火爆的项目大家都耳熟能详,但是为了防止有些小伙伴不怎么逛 GitHub ...
- CMake中添加 -lpthread 编译参数
问题:当在linux命令行中编译关于进程/线程的源文件时,需要加上 -lpthread 参数动态链接线程库而在CMake中如何加入呢? 方法:只需在 add_executable() 命令前面加上以下 ...
- 轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
MongoDB复制集 复制集架构 在生产环境中,强烈不建议使用单机版的MongoDB服务器.原因如下: 单机版的MongoDB无法保证系统的可靠性.一旦进程发生故障或是服务器宕机,业务将直接不可用.此 ...
- Gitlab Server
Gitlab 基本概述 1.什么是Gitlab ? Gitlab是一个开源分布式的版本控制系统. Ruby语言开发完成. Gitlab主要实现的功能.管理项目源代码.对源代码进行版本控制.以及代码复用 ...
- 服务器常见问题排查(一)——cpu占用高、上下文频繁切换、频繁GC
一般而言cpu异常往往还是比较好定位的.原因包括业务逻辑问题(死循环).频繁gc以及上下文切换过多.而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况. 使用js ...
- 【译】NoClassDefFoundError和ClassNotFoundException的不同(转)
https://www.jianshu.com/p/93d0db07d2e3 本文翻译自:Difference between NoClassDefFoundError vs ClassNotFoun ...
- Python 既是解释型语言,也是编译型语言
哈喽大家好,我是咸鱼 不知道有没有小伙伴跟我一样,刚开始学习 Python 的时候都听说过 Python 是一种解释型语言,因为它在运行的时候会逐行解释并执行,而 C++ 这种是编译型语言 不过我今天 ...
- 一篇文章让你理解:什么是Spring???
背景 市场上,随便一个Java工程师的招牌要求上,都可以看到SSM.Spring.SpringMVC...类似字样.这玩意到底是个啥? 这是中邮消费招聘的岗位要求,可以看到第3点: 3.熟悉Strut ...