SpringBoot+MyBatisPlus+MySql+vue2+elementUi的案例、java访问数据库服务、java提供接口服务

这篇具有很好参考价值的文章主要介绍了SpringBoot+MyBatisPlus+MySql+vue2+elementUi的案例、java访问数据库服务、java提供接口服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

1、项目不使用前后端分离。
2、在创建SpringBoot的时候要注意各个插件间的版本问题。
3、后端技术SpringBoot+MyBatisPlus+MySql
4、前端技术vue2+elementUi


后端关键代码

简单介绍

1、数据库名称ssm_db
2、表名称tbl_book


数据表对象文件(Book.java)

SpringBoot+MyBatisPlus+MySql+vue2+elementUi的案例、java访问数据库服务、java提供接口服务,全栈,java,Vue,java,数据库,spring boot,mybatis,mysql

package com.example.domain;

import lombok.Data;

@Data
public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
}

配置文件(application.yml)

server:
  port: 80

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      username: root
      password: root

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

创建项目后,在resources文件夹下把application的后缀名改为yml


接口文件(BookController.java)

写到这个文件就可以使用Postman进行接口测试了。

package com.example.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.controller.utils.R;
import com.example.domain.Book;
import com.example.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private IBookService bookService;

    @GetMapping
    public R getAll() {
        return new R(true, bookService.list());
    }

    @PostMapping
    public R save(@RequestBody Book book) throws IOException {
//        R r = new R();
//        boolean flag = bookService.save(book);
//        r.setFlag(flag);

//        上面的三行代表这一行
//        new R(bookService.save(book));
//        return r;

//        抛出异常测试
//        if (book.getName().equals("123")) throw new IOException();
        boolean flag = bookService.save(book);

        return new R(flag, flag ? "添加成功^_^!" : "添加失败-_-!");
    }

    @PutMapping
    public R update(@RequestBody Book book) throws IOException {
        boolean flag = bookService.modify(book);

        return new R(flag, flag ? "编辑成功^_^!" : "编辑失败-_-!");
    }

    @DeleteMapping("{id}")
    public R delete(@PathVariable Integer id) {
        boolean flag = bookService.delete(id);

        return new R(flag, flag ? "删除成功^_^!" : "数据同步失败,自动刷新-_-!");
    }

    @GetMapping("{id}")
    public R getById(@PathVariable Integer id) {
        // 数据同步失败,自动刷新
        return new R(true, bookService.getById(id));
    }

//    分页
//    @GetMapping("{currentPage}/{pageSize}")
//    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize) {
//        IPage<Book> page = bookService.getPage(currentPage, pageSize);
//        if (currentPage > page.getPages()) {
//            page = bookService.getPage((int) page.getPages(), pageSize);
//        }
//        return new R(true, page, "查询成功^_^!");
//    }

    //    分页加查询
    @GetMapping("{currentPage}/{pageSize}")
//    可以单独接收,也可以使用集合
//    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize, String name, Book book) {
//    直接使用集合接收参数
    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize, Book book) {
        IPage<Book> page = bookService.getPage(currentPage, pageSize, book);

        if (currentPage > page.getPages()) {
            page = bookService.getPage((int) page.getPages(), pageSize, book);
        }

        System.out.println(page);
        return new R(true, page);
    }
}

技术整合文件(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://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>singleFableFullStack</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

前端关键代码

<!DOCTYPE html>
<html>

<head>
    <!-- 页面meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>SpringBoot+MyBatisPlus整合的SSM案例</title>
    <meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport">

    <!-- 引入样式 -->
    <link rel="stylesheet" href="../plugins/elementui/index.css">
    <link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="../css/style.css">
</head>

<body class="hold-transition">
<div id="app">
    <div class="content-header">
        <h1>图书管理</h1>
    </div>

    <div class="app-container">
        <div class="box">
            <div class="filter-container">
                <el-input placeholder="图书类别" v-model="pagination.type" style="width: 200px;"
                          class="filter-item" clearable @input="handleInput($event,'type')"></el-input>
                <el-input placeholder="图书名称" v-model="pagination.name" style="width: 200px;"
                          class="filter-item" clearable @input="handleInput($event,'name')"></el-input>
                <el-input placeholder="图书描述" v-model="pagination.description" style="width: 200px;"
                          class="filter-item" clearable @input="handleInput($event,'description')"></el-input>
                <el-button type="info" plain class="dalfBut" @click="handleSearch">查询</el-button>
                <el-button type="success" plain class="butT" @click="handleDialog(undefined, '1')">新建
                </el-button>
            </div>

            <el-table
                    size="small"
                    current-row-key="id"
                    :data="dataList"
                    stripe
                    highlight-current-row
            >
                <el-table-column type="index" align="center" label="序号"></el-table-column>
                <el-table-column prop="type" label="图书类别" align="center"></el-table-column>
                <el-table-column prop="name" label="图书名称" align="center"></el-table-column>
                <el-table-column prop="description" label="描述" align="center"></el-table-column>
                <el-table-column label="操作" align="center">
                    <template slot-scope="scope">
                        <el-button type="primary" plain size="mini" @click="handleDialog(scope.row, '2')">编辑
                        </el-button>
                        <el-button type="danger" plain size="mini" @click="handleDelete(scope.row)">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>

            <!--分页组件-->
            <div class="pagination-container">
                <el-pagination
                        class="pagiantion"
                        @current-change="handleCurrentChange"
                        @size-change="handlePageSize"
                        :current-page="pagination.currentPage"
                        :page-size="pagination.pageSize"
                        :page-sizes="[5, 10, 15, 30]"
                        layout="total, sizes, prev, pager, next, jumper"
                        :total="pagination.total">
                </el-pagination>
            </div>

            <!-- 新增/编辑标签弹层 -->
            <div class="add-form">
                <el-dialog :title="dialogTitle==='1'?'新增图书':'编辑图书'" :visible.sync="isDialogAddEdit"
                           @close="handleClose">
                    <el-form :model="formData" :rules="rules" ref="refForm" label-position="right"
                             label-width="100px">
                        <el-row>
                            <el-col :span="12">
                                <el-form-item label="图书类别" prop="type">
                                    <el-input v-model="formData.type"/>
                                </el-form-item>
                            </el-col>

                            <el-col :span="12">
                                <el-form-item label="图书名称" prop="name">
                                    <el-input v-model="formData.name"/>
                                </el-form-item>
                            </el-col>
                        </el-row>

                        <el-row>
                            <el-col :span="24">
                                <el-form-item label="描述">
                                    <el-input v-model="formData.description" type="textarea"></el-input>
                                </el-form-item>
                            </el-col>
                        </el-row>
                    </el-form>

                    <div slot="footer" class="dialog-footer">
                        <el-button @click="isDialogAddEdit=false">取消</el-button>
                        <el-button type="primary" @click="handleSave()">保存</el-button>
                    </div>
                </el-dialog>
            </div>
        </div>
    </div>
</div>
</body>

<!-- 引入组件库 -->
<script src="../js/vue.js"></script>
<script src="../plugins/elementui/index.js"></script>
<script type="text/javascript" src="../js/jquery.min.js"></script>
<script src="../js/axios-0.18.0.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            // 当前页要展示的列表数据
            dataList: [],
            // 添加表单是否可见
            isDialogAddEdit: false,
            dialogTitle: '1',
            // 表单数据
            formData: {},
            // 校验规则
            rules: {
                type: [
                    {
                        required: true,
                        message: '图书类别为必填项',
                        trigger: 'blur'
                    }
                ],
                name: [
                    {
                        required: true,
                        message: '图书名称为必填项',
                        trigger: 'blur'
                    }
                ]
            },
            // 分页相关模型数据
            pagination: {
                // 当前页码
                currentPage: 1,
                // 每页显示的记录数
                pageSize: 5,
                // 总记录数
                total: 0,
                type: '',
                name: '',
                description: ''
            },
            // 整页加载
            fullPageLoading: undefined
        },

        // 钩子函数,VUE对象初始化完成后自动执行
        created() {
            // 调用查询全部数据的操作
            this.getAll();
        },

        methods: {
            // 列表加分页查询
            getAll() {
                let {
                        currentPage,
                        pageSize,
                        type,
                        name,
                        description
                    } = this.pagination,
                    param = '';

                param += `?type=${type}&name=${name}&description=${description}`;

                this.handleFullPageLoading('start');
                // 发送异步请求
                axios.get(`/books/${currentPage}/${pageSize}${param}`)
                    .then(({data: {flag, data: {records, total, size, current}}}) => {
                        if (flag) {
                            this.pagination.currentPage = current;
                            this.pagination.pageSize = size;
                            this.pagination.total = total;
                            this.dataList = records;
                        } else {
                            this.$message.error('出错了');
                        }
                    })
                    .finally(() => {
                        this.handleFullPageLoading('stopping');
                    })
                    .catch(() => {
                        this.$message.error('出错了');
                    });
            },

            // 整页(页面)加载
            handleFullPageLoading(type) {
                if (type === 'start') {
                    this.fullPageLoading = this.$loading({
                        lock: true,
                        text: '加载中',
                        spinner: 'el-icon-loading',
                        background: 'rgba(0, 0, 0, 0.5)'
                    });
                } else if (type === 'stopping' && this.fullPageLoading) {
                    this.fullPageLoading.close();
                    this.fullPageLoading = undefined;
                }
            },

            // 打开新增/编辑面板
            handleDialog(row, str) {
                this.dialogTitle = str;
                this.isDialogAddEdit = true;

                if (str === '2') this.getById(row);
            },

            // 关闭新增/编辑面板
            handleClose() {
                this.$refs.refForm.resetFields();
                this.$refs.refForm.clearValidate();
                this.formData = {};
            },

            // 保存
            handleSave() {
                this.$refs.refForm.validate(valid => {
                    if (!valid) return this.$message.warning('必填项内容为空');

                    if (this.dialogTitle === '1') {
                        this.handleAdd();
                    } else {
                        this.handleEdit();
                    }
                });
            },

            // 添加
            handleAdd() {
                axios.post("/books", this.formData)
                    .then(({data: {flag, msg}}) => {
                        if (flag) {
                            this.$message.success(msg);
                            this.getAll();
                            this.isDialogAddEdit = false
                        } else {
                            this.$message.error(msg);
                        }
                    })
                    .catch(() => {
                        this.$message.error('出错了');
                    });
            },

            // 删除
            handleDelete(row) {
                this.$confirm(
                    '此操作永久删除当前信息,是否继续?',
                    '提示',
                    {
                        type: "warning"
                    }
                )
                    .then(() => {
                        axios.delete("/books/" + row.id)
                            .then(({data: {flag, msg}}) => {
                                // 判断当前操作是否成功
                                if (flag) {
                                    this.$message.success(msg);
                                    this.getAll();
                                } else {
                                    this.$message.error(msg);
                                }
                            })
                            .catch(() => {
                                this.$message.error('出错了');
                            });
                    })
                    .catch(() => {
                        this.$message.info('已取消');
                    });
            },

            // 通过id获取数据
            getById(row) {
                axios.get('/books/' + row.id)
                    .then(({data: {flag, data}}) => {
                        if (flag && data !== null) {
                            this.formData = data;
                        } else {
                            this.$message.error('出错了');
                        }
                    })
                    .catch(() => {
                        this.$message.error('出错了');
                    });
            },

            // 编辑
            handleEdit() {
                axios.put("/books", this.formData)
                    .then(({data: {flag, msg}}) => {
                        // 判断当前操作是否成功
                        if (flag) {
                            this.$message.success(msg);
                            this.getAll();
                            this.isDialogAddEdit = false
                        } else {
                            this.$message.error(msg);
                        }
                    })
                    .catch(() => {
                        this.$message.error('出错了');
                    });
            },

            // 切换页码
            handleCurrentChange(currentPage) {
                if (this.pagination.currentPage === currentPage) return false;

                this.pagination.currentPage = currentPage;
                this.$nextTick(() => this.getAll());
            },

            // 页码大小
            handlePageSize(pageSize) {
                if (this.pagination.pageSize === pageSize) return false;

                this.pagination.pageSize = pageSize;
                this.$nextTick(() => this.getAll());
            },

            // 搜索输入框值变化
            handleInput(e, searchField) {
                if (!e) {
                    this.pagination[searchField] = e;
                    this.$nextTick(() => this.getAll());
                }
            },

            // 查询
            handleSearch() {
                let {
                    type,
                    name,
                    description
                } = this.pagination;

                if (type || name || description) this.getAll();
            }
        }
    });
</script>

</html>

完整代码

下载

git clone -b back-end-services https://gitee.com/mssj200224/open-resources.git

项目

1、找到仓库中名为singleFableFullStack文件夹复制出来。
2、使用idea打开项目即可运行。
文章来源地址https://www.toymoban.com/news/detail-684938.html

到了这里,关于SpringBoot+MyBatisPlus+MySql+vue2+elementUi的案例、java访问数据库服务、java提供接口服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot + Vue ElementUI 实现MySQL&&Postgresql可视化

    PostgreSQL教程--实现类似于MySQL的show create table功能实现见末尾 效果如图: DB连接配置维护: Schema功能:集成Screw生成文档,导出库的表结构,导出表结构和数据  表对象操作:翻页查询,查看创建SQL,生成代码 可以单个代码文件下载,也可以全部下载(打成zip包下载返回)

    2024年02月12日
    浏览(41)
  • 基于Java+SpringBoot+vue+elementui图书商城系统设计实现

    博主介绍 : ✌ 全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取联系 🍅 精彩专栏 推荐订阅 👇🏻👇🏻👇🏻👇🏻  java项目精品实战案例

    2024年01月21日
    浏览(69)
  • 基于Java+SpringBoot+vue+elementui 实现即时通讯管理系统

    博主介绍: 计算机科班人,全栈工程师,掌握C、C#、Java、Python、Android等主流编程语言,同时也熟练掌握mysql、oracle、sqlserver等主流数据库,能够为大家提供全方位的技术支持和交流。 目前工作五年,具有丰富的项目经验和开发技能。提供相关的学习资料、程序开发、技术解

    2024年02月19日
    浏览(44)
  • 基于Java+SpringBoot+vue+elementui的校园文具商城系统详细设计和实现

    🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 📝 🚀🚀🚀 精彩系列推荐 Java毕设项目精品实战案例《1000套》 计算机的普及和互联网时代的到来使信息的发布和传播更加方便

    2024年02月01日
    浏览(51)
  • (一)前端环境搭建---基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

    这里是为2023届学生完成一个管理系统(主要是后台)的连续更新博客。持续时间为20天,每日练习时间约2-3小时。默认已有系统开发的基础知识,如SpringBoot、数据库、HTML、CSS、JavaScript等,连载过程中,遇到细节问题也可以咨询。QQ群:1140508453。视频将在B站推出。 B站链接:

    2023年04月23日
    浏览(47)
  • 【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

    gogo code 是一个基于 AST (源代码的抽象语法结构树状表现形式)的 JavaScript/Typescript/HTML 代码转换工具,可以用它来构建一个代码转换程序来帮助自动化完成如框架升级、代码重构、多平台转换等工作。 当前 GoGoCode 支持解析和操作如下类型的代码: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    浏览(53)
  • vue2+elementUI 下拉树形多选框

    效果如图所示:  1.新建el-select-tree.vue组件 2.页面引入组件使用

    2024年02月12日
    浏览(43)
  • 图书商城项目练习①管理后台Vue2/ElementUI

    本系列文章是为学习Vue的项目练习笔记,尽量详细记录一下一个完整项目的开发过程。面向初学者,本人也是初学者,搬砖技术还不成熟。项目在技术上前端为主,包含一些后端代码,从基础的数据库(Sqlite)、到后端服务Node.js(Express),再到Web端的Vue,包含服务端、管理

    2024年02月11日
    浏览(79)
  • (十七)前后端分离的Echart图表--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

    任务十 VUE侧边菜单栏导航 中我们留了一个home.vue页面一直没有做,它还是这样的 一般情况home就是对整个系统的一些核心数据的图表展示。这次任务,我们将使用echarts图表工具,简单实现用户统计数据展示。通过本次任务,大家能够: (1)了解Echart图表工具的使用方法;

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包