前后端数据交互

article/2025/8/26 23:45:41

简单实现前后端数据交互

  • 功能要求
  • 主要涉及框架
  • 后端
    • 新建项目
    • 新建数据库
    • 编写实体类
    • 编写映射类
    • 编写控制器
  • 前端
    • head
    • body
      • 1.用户接口 UI
      • 2. JS 交互
  • 运行测试
  • 总结

功能要求

简单实现 员工信息 从 后端 服务器 数据库 加载 并 动态渲染 在Web端,以及Web端新增 员工信息 发送给 后端服务器 写入 数据库 中,实现前后端的数据交互。

主要涉及框架

  • Bootstrap
  • Vue
  • ajax
  • Spring Boot

后端

新建项目

首先新建一个 Spring Starter Project 工程,勾选以下 4 个依赖
在这里插入图片描述
整个项目的包结构如下,可在 java 包下新建了3个包,分别用来存放控制器类、实体类和映射类,在 resources 包的 static 包下新建了一个 hr 页面,以及在这新建一个 js 文件夹用来存放写前端页面用到的 vue.js 和 axios.js 库,这样就可以从本地导入所需库,加快程序的部署与运行。
在这里插入图片描述

新建数据库

新建一个 hr 数据库,创建一个 员工表 employee,表结构如下
在这里插入图片描述
向表中插入几条数据
在这里插入图片描述
在配置文件 application.properties 中配置 数据源,MySQL的端口号默认是3306,但我电脑装了两个,这里避免冲突混淆,所以指定的端口号是5306,这里需要根据你自己的设定来配置。
在这里插入图片描述

编写实体类

entity 包下新建一个实体类Employee,对应上面创建的员工表

public class Employee {String name;char gender;String position;public Employee() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public String getPosition() {return position;}public void setPosition(String position) {this.position = position;}}

编写映射类

mapper包下新建一个接口EmployeeMapper,作为员工表的映射,记得加上注解 @Mapper 标记为映射,在里面声明两个方法,分别是查找所有员工信息和插入一条员工信息,分别用 @Select@Insert 注解标记

import java.util.List;import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;// 员工表映射@Mapper
public interface EmployeeMapper {/*** 查找全部员工信息* @return*/@Select("select name,gender,position from employee")List<Employee> findAll();/*** 插入一条员工信息* @param employee*/@Insert("insert into employee(name,gender,position) values(#{name},#{gender},#{position})")void save(Employee employee);
}

编写控制器

controller包下新建一个HomeController类,加上 @Controller 注解标记为控制器,当请求根目录时返回视图的名字

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HomeController {@RequestMapping("/")public String home() {return "hr.html";}
}

再新建一个EmployeeController 类,并标记为 @RestConroller ,这样请求 URL 时返回 JSON 数据而不是视图名,在里面维持一个EmployeeMapper的引用,并标记为自动加载 @Autowired,编写两个方法,分别是获取所有员工信息和新增员工信息,在方法里调用EmployeeMapper对象相应的方法,并加上HTTP 请求操作的注解 @GetMapping@PostMapping,由于 ajax 返回的是JSON数据,参数必须加上 @RequestBody注解

import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;// 控制器@RestController
public class EmployeeController {@Autowiredpublic EmployeeMapper employeeMapper;// 查询@GetMapping("/employee")public List<Employee> find(){return employeeMapper.findAll();}// 插入@PostMapping("/employee")public void add(@RequestBody Employee employee) {employeeMapper.save(employee);}
}

前端

head

编写前端页面 hr.html,用到了 Bootstrap、Vue 和 axios 库,需要在头部导入相应的资源

<head><title>人力资源管理</title><!-- Required meta tags --><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- Bootstrap CSS --><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"><!-- Vue.js 本地库--><script src="js/vue.js"></script><!-- axios.js 本地库 --><script src="js/axios.min.js"></script></head>

body

在 body 标签里编写内容,主要分为 两部分

1.用户接口 UI

<!-- 用户接口 --><div id="app" class="container"><!-- 巨幕、展板 --><div class="jumbotron"><h1 class="display-3">人力资源管理</h1><p class="lead">员工管理</p></div><!-- 面包屑导航 --><nav class="breadcrumb"><a class="breadcrumb-item" href="#">首页</a><a class="breadcrumb-item" href="#">部门管理</a><span class="breadcrumb-item active">员工管理</span><a class="breadcrumb-item" href="#">考勤管理</a></nav><!-- 容器 --><div class="container"><!-- 按钮 模态框 --><!-- Button trigger modal --><button type="button" class="btn btn-outline-success btn-lg my-3" data-toggle="modal" data-target="#modelId">录入新员工</button><!-- Modal --><div class="modal fade" id="modelId" tabindex="-1" role="dialog" aria-labelledby="modelTitleId" aria-hidden="true"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><h5 class="modal-title">录入新员工</h5><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"><div class="form-group"><label for="">姓名</label><!-- v-modal 数据的双向绑定--><input v-model="name" type="text" class="form-control" name="" id="" placeholder="请输入姓名"></div><div class="form-group"><label for="">性别</label><input v-model="gender" type="text" class="form-control" name="" id="" placeholder="请输入性别 (男 or 女)"></div><div class="form-group"><label for="">职位</label><input v-model="position" type="text" class="form-control" name="" id="" placeholder="请输入职位"></div></div><div class="modal-footer"><button type="button" class="btn btn-danger" data-dismiss="modal">取消</button><!-- @click 点击事件绑定 --><button @click="add()" type="button" class="btn btn-success" data-dismiss="modal">新增</button></div></div></div></div><!-- 表格 --><table class="table"><thead class="table-dark text-center"><tr><th><input type="checkbox"></th><th>姓名</th><th>性别</th><th>职位</th><th>技能</th><th>操作</th></tr></thead><tbody><!-- v-for 声明式渲染 表格 数据 --><tr v-for="(emp, index) in empList"><td class="text-center"><input type="checkbox"></td><td>{{empList[index].name}}</td><td>{{empList[index].gender}}</td><td>{{empList[index].position}}</td><td>暂无</td><td>暂无</td></tr></tbody></table><!-- 分页 导航 --><nav aria-label="Page navigation"><ul class="pagination pagination justify-content-center"><li class="page-item disabled"><a class="page-link" href="#" aria-label="Previous"><span aria-hidden="true">上一页</span><span class="sr-only">Previous</span></a></li><li class="page-item active"><a class="page-link" href="#">1</a></li><li class="page-item"><a class="page-link" href="#">2</a></li><li class="page-item"><a class="page-link" href="#" aria-label="Next"><span aria-hidden="true">下一页</span><span class="sr-only">Next</span></a></li></ul></nav></div></div>

2. JS 交互

定义用户、网络的交互行为

    <script>let v = new Vue({el: '#app',data: {name: '',gender: '',position: '',empList: []},methods: {// 新增员工add: function() {let p = {'name': this.name,'gender': this.gender,'position': this.position};// 发送数据给服务器axios.post('/employee', p).then(res => {console.log(res)}).catch(err => {console.error(err);})}},created() {console.log('---- created');// 从服务器获取数据axios.get('/employee').then(res => {console.log("获取结果:" + res)console.log(res.data);this.empList = res.data;}).catch(err => {console.error(err);})},})</script>

运行测试

启动 Spring Boot App,随后通过浏览器访问 http://127.0.0.1:8080/ ,数据都被加载出来,并声明式的渲染到表格中
在这里插入图片描述
新增员工信息,通过点击录入新员工按钮,在弹出的模态框中填入信息并点击新增按钮。
在这里插入图片描述
刷新页面,可以看到新增的员工信息也被加载出来
在这里插入图片描述
再查看一下数据库,新增的信息也被插入到数据库中了
在这里插入图片描述

总结

到此为止,功能要求基本都实现了。通过请求 URL 返回页面,页面被创建时向服务器发出GET请求,获取所有员工信息,使用Vue框架的声明式渲染把数据动态填充到页面表格中。当新增员工信息时,向服务器发出POST请求,把JSON数据传给后端服务器,服务器写入数据库中。


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

相关文章

前端和后端如何进行交互?

背景 目前互联网应用呈现方式基本都是app客户端和web端&#xff0c;其次是移动网站和小程序。以app客户端或web端为例子&#xff08;统一认为前端&#xff09;&#xff0c;前端负责用户的交互与数据收集与展示&#xff0c;数据经后台处理存储在数据库。设计师在参与项目时&…

新手入门前端与后端交互案例(HTML+Java+Axios)

需求分析 前端网页向后端发起相应请求,后端响应前端的请求,做出相关操作.如前端发出获取数据库用户表的请求,后端则将用户表的内容返回给前端.简而言之,前端发出对数据库访问的请求,后端需响应结果. 项目结构 后端项目结构 实现步骤 导入相关依赖包 <parent><grou…

web开发中前端页面是如何跟后端服务器数据交互的

后端服务器一般是指servlet容器&#xff0c;用于执行java源程序 常见的网页有html&#xff0c;htm,shtml&#xff0c;asp&#xff0c;aspx&#xff0c;php&#xff0c;jsp等格式 前两个常用于静态网页&#xff0c;后面几个常用于动态网页。 这里前端网页以比较常见的 xx.html…

前端与后端接口的交互案例

一、案例描述 1&#xff0c;前端页面提供用户名&#xff0c;密码输入框。 2&#xff0c;通过Ajax发送请求到后端Serlvet。 3&#xff0c;后端Serlvet处理请求&#xff0c;根据输入的用户名和密码返回给前端不同信息 前端访问后端接口通过后端提供的的URL 二、主要代码 1、前…

前端和后端 数据交互的基本知识

一、首先了解前端、后端、数据三者的关系 1) 前端通常是html&#xff0c;css&#xff0c;js三者构成的页面的总称。运行在客户端。以浏览器为例。 2) 后端是指后端程序。比如java&#xff0c;php等编写的一些服务。用来操作服务器。 3) 数据&#xff0c;数据都存放在服务器上…

前端和后端交互的方式

1.前端开发与后台交互的方式 &#xff08;1&#xff09;form提交 同步请求 &#xff08;2&#xff09;Ajax提交 异步请求 发送json对象 一 、Ajax&#xff1a;异步的javascript和XML 主要优点&#xff1a; 1.异步请求&#xff0c;不妨碍用户浏览页面或者其他操作。 2.局部刷…

树与树的存储结构+二叉树的遍历

树的存储结构&#xff1a; 三序说的是根节点的访问顺序 深度优先遍历(先序、 中序和后序) 沿着上图路径行走: 第一次来到某个结点时访问&#xff0c;所得序列为先序遍历序列; 第二次来到某个结点时访问&#xff0c;所得序列为中序遍历序列; 第三次来到某个结点时访问&#xff0…

2023年最新前端面试题

HTML 一、HTML5标记 <header></header> 头标记<nav></nav> 导航标记&#xff0c;表示页面中导航链接部分<!--main标记在一个网页中只能有一个&#xff0c;主要内容区域要区别--> <main></main> 主要内容标记<secti…

每日一题之二叉树

描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围&#xff1a; 节点数量 0 \le n \le 10000≤n≤1000 &#xff0c;节点上的值满足 1 \le val \le 1…

2021最新最全前端面试题(包含HTML、CSS、JavaScript、Vue、React、浏览器、算法与数据结构等)

整理了一些前端面试题,希望对正在找前端工作的伙伴有用。本篇文章内容篇幅较大,主要针对初中级前端开发工程师。 篇幅过长,大家可以先点赞收藏以后慢慢看。 关于HTML 的title和alt属性有什么区别 alt:图片加载失败时,显示在网页上的替代文字title:鼠标(手机端该属性无…

CSS解决盒模型居中的问题,分分钟搞定!

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

培训前端开发机构,CSS文本样式值

一、简历的准备 简历制作是很重要的一个环节&#xff0c;一份好的简历会给面试官留下很不错的印象&#xff0c;也有助于你顺利通过简历筛选环节。 个人基本信息&#xff1a;主要是姓名&#xff0c;联系方式&#xff0c;邮箱&#xff0c;学历等&#xff1b;技术技能&#xff1…

学习路线图必不可少,CSS字体样式的使用

标签语义化&#xff1a; 语义和默认样式的区别&#xff1a; 默认样式是浏览器设定的一些常用tag的表现形式&#xff1b;语义化的主要目的就是让大家直观的认识标签和属性的用途和作用&#xff1b; 标签语义化作用&#xff1a; 当只有HTML页面时&#xff0c;没有CSS&#xf…

web前端开发自学难吗,CSS颜色基本样式

字节跳动算法题 链表 面试题&#xff1a;反转单向链表 题目需要将一个单向链表反转。思路很简单&#xff0c;使用三个变量分别表示当前节点和当前节点的前后节点&#xff0c;虽然这题很简单&#xff0c;但是却是一道常考题 以下是实现该算法的代码 var reverseList funct…

CSS的浮动属性,终获offer

前言 最近在准备面试&#xff0c;然后复习下之前写过的项目&#xff0c;书籍&#xff0c;笔记&#xff0c;文章。一看很多知识点都没有印象&#xff0c;最可拍的是连自己为了防止忘记写的文章竟然都感觉不是自己写的。有些开始怀疑人生了。 好了&#xff0c;废话少说&#xf…

CSS介绍,这些知识你必须拿下

前言 跳槽&#xff0c;这在 IT 互联网圈是非常普遍的&#xff0c;也是让自己升职加薪&#xff0c;走上人生巅峰的重要方式。那么作为一个普通的Android程序猿&#xff0c;我们如何才能斩获大厂offer 呢&#xff1f; 疫情向好、面试在即&#xff0c;还在迷茫踌躇中的后浪们&…

web开发在线培训,CSS浮动实战

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

CSS浮动实战,你还看不明白?

一、简历的准备 简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。 个人基本信息:主要是姓名,联系方式,邮箱,学历等;技术技能:对了解、熟练掌握、精通这类词有概念,不要随便用精通;因为面试官一般会根据简历内容…

web设计与开发,CSS块元素

一、简历的准备 简历制作是很重要的一个环节&#xff0c;一份好的简历会给面试官留下很不错的印象&#xff0c;也有助于你顺利通过简历筛选环节。 个人基本信息&#xff1a;主要是姓名&#xff0c;联系方式&#xff0c;邮箱&#xff0c;学历等&#xff1b;技术技能&#xff1…

CSS介绍,含面试题+答案

前言 正式学习前端大概 3 年多了&#xff0c;接触前端大概 4 年了&#xff0c;很早就想整理这个书单了&#xff0c;因为常常会有朋友问&#xff0c;前端该如何学习&#xff0c;学习前端该看哪些书&#xff0c;我就讲讲我学习的道路中看的一些书&#xff0c;虽然整理的书不多&a…