Spring+Vue增删改查实例

绝地灬酷狼 2024-04-23 03:33 156阅读 0赞

原文链接

代码地址

前端地址:https://github.com/Snowstorm0/SpringAndVue-vue

后端地址:https://github.com/Snowstorm0/SpringAndVue-spring

1 数据库

创建MySQL数据库。

表名为user_data,人员信息有number、name。

效果如下:

9e3086b22268a05b3181edd3b0ccb397.png

2 前端

2.1 创建项目

打开cmd,输入ui命令:

  1. vue ui

若没有反应,可能是版本太低,需要卸载后重装:

  1. npm uninstall vue-cli -g #卸载
  2. npm install @vue/cli -g #安装

执行ui命令成功后,会出现提示:

? Starting GUI…
? Ready on http://localhost:8000

并会自动打开页面:

8145810f069f46b58986635b8fe3b74c.png

创建名为SpringAndVue-vue的项目,预设选择“手动”;功能开启 Babel、Router、Vuex、Linter/Formatter;配置选择“ESLint with error prevention only”;版本建议使用 “vue2.0”。创建新项目。

通过cd进入目录,启动项目:

  1. npm run serve

2.2 安装插件

安装 element-ui 插件。

打开cmd,输入ui命令:

  1. vue ui

在插件项搜索,并点击安装。

vue2.0 选择安装 “vue-cli-plugin-element”;vue3.0 选择安装 “vue-cli-plugin-element-plus”。

cb1cf8cc481e06ca45032e82f0648180.png

Terminal安装axios,每个新项目都需要安装:

  1. # vue-cli2.0命令
  2. npm install axios
  3. # vue-cli3.0命令
  4. npm add axios

2.3 添加模块

2.3.1 主页

在views文件夹下创建文件 HomePage.vue,内容如下:

  1. <template>
  2. <div>
  3. 用户列表
  4. <el-table
  5. :data="tableData"
  6. border
  7. style="width: 40%">
  8. <el-table-column
  9. prop="number"
  10. label="编号"
  11. width="150">
  12. </el-table-column>
  13. <el-table-column
  14. prop="name"
  15. label="姓名"
  16. width="150">
  17. </el-table-column>
  18. <el-table-column
  19. fixed="right"
  20. label="操作"
  21. width="160">
  22. <template slot-scope="scope">
  23. <el-button @click="handleClick(scope.row)" type="text" size="small">修改</el-button>
  24. <el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
  25. </template>
  26. </el-table-column>
  27. </el-table>
  28. <el-pagination
  29. background
  30. layout="prev, pager, next"
  31. :total="total"
  32. page-size="2"
  33. @current-change="page">
  34. </el-pagination>
  35. </div>
  36. </template>
  37. <script>
  38. import axios from 'axios';
  39. export default {
  40. name: "HomePage",
  41. methods: {
  42. handleClick(row) {
  43. this.$router.push({
  44. path: '/useredit',
  45. query:{
  46. number: row.number,
  47. name: row.name
  48. }
  49. })
  50. },
  51. deleteClick(row){
  52. // var that=this;
  53. axios.delete('http://localhost:8081/homepage/delete/'+row.number).then(function (response) {
  54. console.log(response)
  55. })
  56. },
  57. //当被点击页数的时候,跳转
  58. page(currPage){
  59. var that=this;
  60. axios.get('http://localhost:8081/homepage/query/'+(currPage-1)*3+'/3').then(function (response) {
  61. that.tableData=response.data;
  62. })
  63. }
  64. },
  65. //被创建的时候,显示第一页
  66. created() {
  67. var that=this;
  68. axios.get('http://localhost:8081/homepage/query/0/3').then(function (response) {
  69. //给数据
  70. that.tableData=response.data;
  71. // console.log(response.data)
  72. }),
  73. axios.get('http://localhost:8081/homepage/all').then(function (response) {
  74. //获得总长度
  75. that.total=response.data.length ;
  76. })
  77. },
  78. data() {
  79. return {
  80. total: 10,
  81. tableData: [{
  82. number: '编号',
  83. name: '姓名'
  84. }]
  85. }
  86. }
  87. }
  88. </script>
  89. <style scoped>
  90. </style>

2.3.2 查看用户

在views文件夹下创建文件:UserView.vue,内容如下:

  1. <template>
  2. <div>
  3. <table>
  4. <tr>
  5. <td>编号</td>
  6. <td>姓名</td>
  7. </tr>
  8. <tr v-for="user in users" :key="user">
  9. <td>{
  10. {
  11. user.number}}</td>
  12. <td>{
  13. {
  14. user.name}}</td>
  15. </tr>
  16. </table>
  17. </div>
  18. </template>
  19. <script>
  20. import axios from 'axios';
  21. export default {
  22. name: "UserView",
  23. data(){
  24. return {
  25. users:[
  26. {
  27. number: 1003,
  28. name: '张三',
  29. },
  30. {
  31. number: 1004,
  32. name: '李四',
  33. }
  34. ]
  35. }
  36. },
  37. created() {
  38. var that=this;
  39. axios.get('http://localhost:8081/homepage/view').then(function (resp) {
  40. that.users=resp.data;
  41. })
  42. }
  43. }
  44. </script>
  45. <style scoped>
  46. </style>

2.3.3 添加用户

在views文件夹下创建文件:UserAdd.vue,内容如下:

  1. <template>
  2. <div>
  3. <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  4. <el-form-item label="用户编号" prop="number">
  5. <el-input v-model="ruleForm.number" ></el-input>
  6. </el-form-item>
  7. <el-form-item label="用户名" prop="name">
  8. <el-input v-model="ruleForm.name"></el-input>
  9. </el-form-item>
  10. <el-form-item>
  11. <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
  12. <el-button @click="resetForm('ruleForm')">重置</el-button>
  13. </el-form-item>
  14. </el-form>
  15. </div>
  16. </template>
  17. <script>
  18. import axios from 'axios';
  19. export default {
  20. name: "UserAdd",
  21. data() {
  22. var validateNumber = (rule, value, callback) => {
  23. if (value === '') {
  24. callback(new Error('请输入用户编号'));
  25. } else {
  26. if (this.ruleForm.number !== '') {
  27. //如果不为空
  28. }
  29. callback();
  30. }
  31. };
  32. var validateName = (rule, value, callback) => {
  33. if (value === '') {
  34. callback(new Error('请输入用户名'));
  35. } else {
  36. if (this.ruleForm.name !== '') {
  37. //如果不为空
  38. }
  39. callback();
  40. }
  41. };
  42. return {
  43. ruleForm: {
  44. number: '',
  45. name: ''
  46. },
  47. rules: {
  48. number: [
  49. {
  50. validator: validateNumber, trigger: 'blur' }
  51. ],
  52. name: [
  53. {
  54. validator: validateName, trigger: 'blur' }
  55. ]
  56. }
  57. };
  58. },
  59. methods: {
  60. submitForm(formName) {
  61. var that=this;
  62. this.$refs[formName].validate((valid) => {
  63. if (valid) {
  64. //提交成功后要做的事情
  65. // alert('submit!');
  66. console.log(that.ruleForm)
  67. axios.post('http://localhost:8081/homepage/add',that.ruleForm).then(function (response) {
  68. console.log(response);
  69. })
  70. } else {
  71. console.log('error submit!!');
  72. return false;
  73. }
  74. });
  75. },
  76. resetForm(formName) {
  77. this.$refs[formName].resetFields();
  78. }
  79. }
  80. }
  81. </script>
  82. <style scoped>
  83. </style>

2.3.4 修改App

修改App.vue为:

  1. <template>
  2. <div id="app">
  3. <el-container style="height: 500px; border: 1px solid #eee">
  4. <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
  5. <el-menu :default-openeds="['1']" router>
  6. <el-submenu index="1">
  7. <template slot="title"><i class="el-icon-message"></i>用户管理</template>
  8. <el-menu-item-group>
  9. <el-menu-item index="/">首页</el-menu-item>
  10. <el-menu-item index="/userView">全部用户</el-menu-item>
  11. <el-menu-item index="/userAdd">添加用户</el-menu-item>
  12. </el-menu-item-group>
  13. </el-submenu>
  14. </el-menu>
  15. </el-aside>
  16. <el-container>
  17. <el-header style="text-align: right; font-size: 12px">
  18. <span>Snowstorm</span>
  19. </el-header>
  20. <br><br>
  21. <router-view></router-view>
  22. </el-container>
  23. </el-container>
  24. </div>
  25. </template>
  26. <style>
  27. .el-header {
  28. background-color: #B3C0D1;
  29. color: #333;
  30. line-height: 60px;
  31. }
  32. .el-aside {
  33. color: #333;
  34. }
  35. </style>
  36. <script>
  37. export default {
  38. data() {
  39. const item = {
  40. };
  41. return {
  42. tableData: Array(20).fill(item)
  43. }
  44. }
  45. };
  46. </script>

2.3.5 修改index

在 router/index.js 中 const routes 函数修改为:

  1. const routes = [
  2. {
  3. path: '/',
  4. name: '首页',
  5. component: HomePage
  6. },
  7. {
  8. path: '/userview',
  9. name: '全部用户',
  10. component: () => import(/* webpackChunkName: "user" */ '../views/UserView.vue')
  11. },
  12. {
  13. path: '/useradd',
  14. name: '添加用户',
  15. component: () => import(/* webpackChunkName: "user" */ '../views/UserAdd.vue')
  16. },
  17. {
  18. path: '/useredit',
  19. name: '编辑用户',
  20. component: () => import(/* webpackChunkName: "user" */ '../views/UserAdd.vue')
  21. }
  22. ]

3 后端

3.1 Controller

内容为:

  1. @RestController
  2. @RequestMapping("/homepage")
  3. public class MyController {
  4. @Resource
  5. MyService myService;
  6. // 查看全部数据
  7. @GetMapping("/view")
  8. public List<UserDTO> userView(){
  9. return myService.userView();
  10. }
  11. // 增
  12. @PostMapping("/add")
  13. public int userAdd(@RequestBody UserDTO user){
  14. myService.userAdd(user);
  15. return 0;
  16. }
  17. // 删
  18. @DeleteMapping("/delete/{number}")
  19. public int deleteBook(@PathVariable("number") Integer number){
  20. return myService.userDelete(number);
  21. }
  22. // 改
  23. @PutMapping("/edit")
  24. public int userEdit(@RequestBody UserDTO user){
  25. return myService.userEdit(user);
  26. }
  27. // 查
  28. @GetMapping("/query/{start}/{length}")
  29. public List<UserDTO> userQuery(@PathVariable("start") Integer start,@PathVariable("length") Integer length){
  30. System.out.println("users:" + myService.userQuery(start, length) + "\n");
  31. return myService.userQuery(start, length);
  32. }
  33. }

3.2 Service

内容为:

  1. @Service
  2. @EnableScheduling
  3. public class MyServiceImpl implements MyService {
  4. @Resource
  5. MyMapper myMapper;
  6. // 返回全部用户类
  7. public List<UserDTO> userView(){
  8. System.out.println("users:" + myMapper.userView() + "\n");
  9. return myMapper.userView();
  10. }
  11. public Integer userAdd(UserDTO user){
  12. System.out.println("users:" + user + "\n");
  13. return myMapper.userAdd(user);
  14. }
  15. public Integer userDelete(int number){
  16. System.out.println("number:" + number + "\n");
  17. return myMapper.userDelete(number);
  18. }
  19. public Integer userEdit(UserDTO user){
  20. System.out.println("user:" + user + "\n");
  21. return myMapper.userEdit(user);
  22. }
  23. public List<UserDTO> userQuery(int start, int length){
  24. System.out.println("start:" + start + "high:" + length + "\n");
  25. return myMapper.userQuery(start, length);
  26. }
  27. }

3.3 dao

内容为:

  1. @Mapper
  2. public interface MyMapper {
  3. List<UserDTO> userView();
  4. Integer userAdd(UserDTO user);
  5. Integer userDelete(int number);
  6. Integer userEdit(UserDTO user);
  7. List<UserDTO> userQuery(int start, int length);
  8. }

3.4 model

文件名UserDTO,内容为:

  1. @Data
  2. public class UserDTO {
  3. private Integer number;
  4. private String name;
  5. public Integer getNumber() {
  6. return number;
  7. }
  8. public void setNumber(Integer number) {
  9. this.number = number;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. }

3.5 跨域配置

文件名Config,内容为:

  1. @Configuration
  2. public class Config implements WebMvcConfigurer {
  3. @Override
  4. public void addCorsMappings(CorsRegistry registry) {
  5. registry.addMapping("/**")
  6. .allowedOrigins("*")
  7. .allowedMethods("GET","HEAD","POST","DELETE","OPTIONS","PUT")
  8. .allowCredentials(true)
  9. .maxAge(3600)
  10. .allowedHeaders("*");
  11. }
  12. }

4 运行效果

4.1 主页

579769e77697beed8d7bbcb7eb3264d4.png

4.2 全部用户

2661c1ca46ca334a04c36ffd85ba30ab.png

4.3 添加用户

1610e86a2b05f6925b1b9b3b8384bdf9.png

学习更多编程知识,请关注我的公众号:

代码的路

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,156人围观)

还没有评论,来说两句吧...

相关阅读