Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)

yizhihongxing

下面是详细的攻略。

Spring boot + MyBatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)

实现目标

本项目旨在演示如何使用 Spring boot + MyBatis + Vue.js + ElementUI 构建一个简单的增删改查系统。项目实现的功能包括:

  • 显示数据列表
  • 新增数据
  • 删除数据
  • 修改数据
  • 筛选数据

技术要点

本项目使用的技术栈包括:

开发环境

  • Java 8
  • Maven 3.6+
  • Node.js 12+
  • Vue CLI 4.2+

项目结构

├── backend            后端代码
│   ├── pom.xml        Maven依赖
│   └── src
│       ├── main
│       │   ├── java   Java代码
│       │   └── resources
│       │       ├── application.properties  配置文件
│       │       └── mybatis                  MyBatis mapper配置文件
└── frontend           前端代码
    ├── node_modules   Node.js依赖
    ├── package.json   npm依赖
    ├── public
    │   └── index.html  HTML模板文件
    └── src
        ├── App.vue     Vue组件文件
        ├── main.js     Vue入口文件
        ├── http.js     封装HTTP请求的代码
        ├── assets      静态资源
        └── components  Vue组件

启动项目

  1. 启动后端

进入 backend 目录,执行以下命令启动后端:

mvn spring-boot:run

  1. 启动前端

进入 frontend 目录,执行以下命令启动前端:

npm install
npm run serve

访问 http://localhost:8080 就可以看到网站了。

数据库配置

本项目使用 MySQL 数据库存储数据。需要先在本地安装 MySQL 数据库,并创建一个名为 test 的数据库。

application.properties 中,配置 MySQL 数据库连接参数:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root

数据库表设计

创建一个名为 users 的表,包含以下字段:

id        INT(11) AUTO_INCREMENT PRIMARY KEY
name      VARCHAR(50)
email     VARCHAR(50)
password  VARCHAR(50)

MyBatis配置

使用 MyBatis Generator 自动生成 Mapper 接口和 XML 配置文件。

pom.xml 中添加如下依赖:

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.4.0</version>
</dependency>

generatorConfig.xml 中添加如下配置:

<generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis">
        <property name="javaFileEncoding" value="UTF-8"/>

        <!-- 配置数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test"
                        userId="root"
                        password="root"/>

        <!-- 配置Model -->
        <javaModelGenerator targetPackage="com.example.demo.pojo" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
            <property name="suppressDefaultComments" value="false"/>
        </javaModelGenerator>

        <!-- 配置Mapper -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 配置Dao -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 配置生成的表 -->
        <table tableName="users" domainObjectName="User"/>
    </context>
</generatorConfiguration>

pom.xml 中添加如下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.0</version>
            <configuration>
                <verbose>true</verbose>
            </configuration>
        </plugin>
    </plugins>
</build>

然后执行以下命令生成代码:

mvn mybatis-generator:generate

后端实现

后端主要实现用户数据的增删改查功能。使用 UserController 处理用户相关的 HTTP 请求。

接口文档

  • GET /users 获取用户列表
  • POST /users 新增用户
  • DELETE /users/{id} 删除用户
  • PUT /users/{id} 修改用户
  • GET /users/{id} 获取用户详情

UserController代码实现

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("")
    public List<User> getUsers() {
        return userService.getUsers();
    }

    @PostMapping("")
    public void addUser(@RequestBody User user) {
        userService.addUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable("id") int id) {
        userService.deleteUser(id);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable("id") int id, @RequestBody User user) {
        userService.updateUser(id, user);
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") int id) {
        return userService.getUser(id);
    }
}

Service代码实现

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> getUsers() {
        return userMapper.selectAll();
    }

    public void addUser(User user) {
        userMapper.insert(user);
    }

    public void deleteUser(int id) {
        userMapper.deleteByPrimaryKey(id);
    }

    public void updateUser(int id, User user) {
        user.setId(id);
        userMapper.updateByPrimaryKey(user);
    }

    public User getUser(int id) {
        return userMapper.selectByPrimaryKey(id);
    }
}

前端实现

使用 Vue 和 ElementUI 实现前端页面。

显示数据列表

使用 ElTableElPagination 组件显示数据列表:

<template>
  <el-table :data="tableData" style="width: 100%">
    <el-table-column type="selection" width="60"></el-table-column>
    <el-table-column prop="id" label="编号" width="60"></el-table-column>
    <el-table-column prop="name" label="姓名" width="120"></el-table-column>
    <el-table-column prop="email" label="邮箱"></el-table-column>
    <el-table-column prop="password" label="密码" width="120"></el-table-column>
    <el-table-column label="操作" width="120">
      <template slot-scope="scope">
        <el-button type="primary" size="mini" @click="handleEdit(scope.row.id)">编辑</el-button>
        <el-button type="danger" size="mini" @click="handleDelete(scope.row.id)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
  <el-pagination :total="total" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" @current-change="handlePageChange" @size-change="handlePageSizeChange"></el-pagination>
</template>

<script>
import { getUsers, deleteUser } from '@/api/user'

export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 0,
      tableData: []
    }
  },
  mounted() {
    this.getData()
  },
  methods: {
    getData() {
      getUsers({ pageNum: this.currentPage, pageSize: this.pageSize }).then(res => {
        this.total = res.total
        this.tableData = res.list
      })
    },
    handlePageChange(val) {
      this.currentPage = val
      this.getData()
    },
    handlePageSizeChange(val) {
      this.pageSize = val
      this.getData()
    },
    handleEdit(id) {
      this.$router.push({ path: '/users/' + id, query: { mode: 'edit' } })
    },
    handleDelete(id) {
      this.$confirm('确认删除此用户吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteUser(id).then(() => {
          this.$message({
            type: 'success',
            message: '删除成功!'
          })
          this.getData()
        })
      }).catch(() => { })
    }
  }
}
</script>

新增数据和修改数据

使用 ElFormElFormItem 组件实现新增数据和修改数据的功能。

<template>
  <el-form ref="form" :model="form" label-width="80px" class="demo-ruleForm">
    <el-form-item label="姓名" prop="name">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
    <el-form-item label="邮箱" prop="email">
      <el-input v-model="form.email"></el-input>
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input v-model="form.password"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="cancelEdit">取消</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
import { addUser, updateUser, getUser } from '@/api/user'

export default {
  data() {
    return {
      form: {
        name: '',
        email: '',
        password: ''
      }
    }
  },
  mounted() {
    if (this.mode === 'edit') {
      this.getData()
    }
  },
  computed: {
    id() {
      return this.$route.params.id
    },
    mode() {
      return this.$route.query.mode || 'add'
    },
    title() {
      return this.mode === 'edit' ? '编辑用户' : '添加用户'
    }
  },
  methods: {
    getData() {
      getUser(this.id).then(res => {
        this.form = res
      })
    },
    submitForm() {
      if (this.mode === 'add') {
        addUser(this.form).then(() => {
          this.$message({
            type: 'success',
            message: '添加成功!'
          })
          this.$router.push({ path: '/users' })
        })
      } else {
        updateUser(this.id, this.form).then(() => {
          this.$message({
            type: 'success',
            message: '编辑成功!'
          })
          this.$router.push({ path: '/users' })
        })
      }
    },
    cancelEdit() {
      this.$router.push({ path: '/users' })
    }
  }
}
</script>

筛选数据

使用 ElInputElSelect 组件实现筛选数据的功能。

<template>
  <el-form :inline="true" :model="filterForm">
    <el-form-item>
      <el-input v-model="filterForm.name" placeholder="请输入姓名"></el-input>
    </el-form-item>
    <el-form-item>
      <el-input v-model="filterForm.email" placeholder="请输入邮箱"></el-input>
    </el-form-item>
    <el-form-item>
      <el-select v-model="filterForm.password" placeholder="请输入密码">
        <el-option label="简单" value="1"></el-option>
        <el-option label="中等" value="2"></el-option>
        <el-option label="复杂" value="3"></el-option>
      </el-select>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="handleFilter">筛选</el-button>
      <el-button @click="resetFilter">重置</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      filterForm: {
        name: '',
        email: '',
        password: ''
      }
    }
  },
  methods: {
    handleFilter() {
      this.$emit('filter', this.filterForm)
    },
    resetFilter() {
      this.filterForm = {
        name: '',
        email: '',
        password: ''
      }
      this.$emit('filter', this.filterForm)
    }
  }
}
</script>

API封装

使用 axios 库封装 HTTP 请求,对外提供 API 接口。

import axios from 'axios'

axios.defaults.baseURL = 'http://localhost:8081'

export function getUsers(params) {
  return axios.get('/users', { params }).then(res => res.data)
}

export function getUser(id) {
  return axios.get('/users/' + id).then(res => res.data)
}

export function addUser(data) {
  return axios.post('/users', data)
}

export function updateUser(id, data) {
  return axios.put('/users/' + id, data)
}

export function deleteUser(id) {
  return axios.delete('/users/' + id)
}

其他

以上就是本项目的完整攻略,希望能对你有所帮助。

如果你喜欢本项目,请给我一个 Star。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一) - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue离开当前页面触发的函数代码

    当用户离开Vue页面时,我们可以使用beforeRouteLeave路由导航守卫去触发相应的函数代码。下面,我将详细讲解该攻略的应用步骤和示例说明。 步骤一:添加路由导航守卫 在Vue的路由配置中添加beforeRouteLeave守卫,并指定它所要触发的函数代码。以下是守卫函数的结构: beforeRouteLeave(to, from, next) { …

    Vue 2023年5月28日
    00
  • 简单设置el-date-picker的默认当前时间问题

    下面是详细讲解如何设置 el-date-picker 的默认当前时间的攻略: 1.需求分析 当我们使用 el-date-picker 来选择日期时,默认展示的日期为当前日期,这在大部分场景下都是符合要求的。但有时候我们需要默认选中其他日期,比如一个从某一具体日期开始的查询页面。 在这种情况下,我们就需要设置 el-date-picker 的默认当前时间,让它…

    Vue 2023年5月29日
    00
  • 详解Vue自定义指令及使用

    详解Vue自定义指令及使用 什么是Vue自定义指令? Vue自定义指令是一种可以用来扩展Vue.js的功能的语法,它可以让我们自定义一些指令,以实现一些特定的交互效果、操作等。Vue自带了一些常用指令比如v-if、v-show等,但在实际业务开发中,有时还需要自定义指令来满足特定的需求。 自定义指令一般由两个部分组成:指令注册和指令函数。 如何注册自定义指令…

    Vue 2023年5月28日
    00
  • vue之将echart封装为组件

    封装echarts为Vue组件并不难,只需要遵循以下步骤即可。 步骤1:安装echarts和vue-echarts 使用npm安装echarts和vue-echarts依赖: npm install echarts vue-echarts –save 步骤2:创建一个Echarts.vue组件 在src/components目录下创建一个Echarts.v…

    Vue 2023年5月28日
    00
  • el-date-picker日期选择限制范围的实例代码

    下面是关于el-date-picker日期选择限制范围的实例代码的完整攻略。 1. 前置知识 在讲解实例代码之前,我们需要掌握以下基本知识: el-date-picker是一个基于element-ui的日期选择器组件; el-date-picker可以通过picker-options属性限制日期选择的范围; picker-options中可以设置disabl…

    Vue 2023年5月29日
    00
  • vue.js整合vux中的上拉加载下拉刷新实例教程

    Vue.js整合Vux中的上拉加载下拉刷新实例教程 Vux是一个基于Vue.js的UI组件库,提供了大量易用的组件和工具。其中,上拉加载和下拉刷新是常用的功能,本文将介绍如何使用Vux实现上拉加载和下拉刷新。 准备工作 首先,需要安装Vux和Vue.js。 npm install vux vue –save 然后,在Vue.js中引入Vux: import…

    Vue 2023年5月27日
    00
  • vue 在服务器端直接修改请求的接口地址

    为了实现“vue 在服务器端直接修改请求的接口地址”,我们需要将客户端(浏览器端)和服务器端的配置进行调整。具体的步骤如下: 1. 在客户端(浏览器端)进行配置 首先,在 vue.config.js(如果没有则需要创建) 中配置 devServer 选项: module.exports = { devServer: { proxy: { // 将URL中的 …

    Vue 2023年5月28日
    00
  • Vue如何通过浏览器控制台查看全局data值

    要通过浏览器控制台查看Vue全局data值,可以依次执行以下步骤: 步骤一:打开页面并打开控制台 首先,在浏览器中打开Vue页面,然后打开开发者工具(可以通过F12快捷键或右键菜单打开)。 步骤二:选择Vue实例 在控制台中输入以下代码,获取Vue实例: const vm = Vue.instance 步骤三:查看全局data值 有两种方法可以查看全局dat…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部