ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

基于springboot、vue、mybatis-plus、mysql、element实现的前后端分离的CRUD功能

2021-07-25 19:06:19  阅读:178  来源: 互联网

标签:vue springboot 代码 CRUD value public book element id


基于springboot、vue、mybatis-plus、mysql、element实现的前后端分离的CRUD功能

文章目录

前期准备

后端

导入要使用的jar包

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.22</version>
        </dependency>

在applycation.yaml文件中配置相关文件

spring:
    datasource:
        url: jdbc:mysql://127.0.0.1:3306/XXXXX?serverTimezone=GMT
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        username: root
        password: XXXXX

mybatis-plus:
    configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

server:
    port: 端口号

前端

可以配置一个vue文件,我就是vue文件,或者有html也行
导入element-ui和axios

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);
**这里是完整引入,可以按需引入,官网有写**

导入axios
 npm install axios 

到这里所有的准备工作就已经弄完了
在这里插入图片描述
在这里插入图片描述

后端代码

controller层,mapper层,servie层,pojo

pojo

@Data
@TableName(value = "books")
@JsonInclude(JsonInclude.Include.NON_NULL) //jackson 实体转json 为NULL的字段不参加序列化(即不显示)
public class Book {

    @TableId(value = "bookID",type = IdType.AUTO)
    private  Integer bookID;
    @TableField(value = "bookName")
    private  String  bookName;
    @TableField(value = "bookCounts")
    private  int    bookCounts;
    @TableField(value = "detail")
    private  String  detail;
}

mapper和service

@Mapper
@Repository 
public interface BookMapper extends BaseMapper<Book> {
}

serviece


public interface BookService extends IService<Book> {
}

//serviceimpl
@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {

}

功能实现

基本布局(用element-ui,不能在app.vue里面写,钩子不会被触发,我是在home文件写的)

搜索栏

在这里插入图片描述

      <el-input
          placeholder="请输入id"
          v-model="input"
          clearable
          style="width: 200px;float: left">
      </el-input>
      <el-button type="primary" class="btn" @click="getClick(input)">查询</el-button>
      <el-button type="primary" class="btn" @click="resetClick">重置</el-button>
      <el-button type="primary" class="btn"  @click="dialogAddBookVisible = true">添加</el-button>   

页面在这里插入图片描述

在这里插入图片描述

<el-table
        :data="book"
        border
        style="width: 100%">
      <el-table-column
          fixed
          prop="bookID"
          label="id"
          width="300">
      </el-table-column>
      <el-table-column
          prop="bookName"
          label="书籍名称"
          width="120">
      </el-table-column>
      <el-table-column
          prop="bookCounts"
          label="数据数量"
          width="120">
      </el-table-column>
      <el-table-column
          prop="detail"
          label="书籍评价"
          width="120">
      </el-table-column>
      <el-table-column
          fixed="right"
          label="操作"
          width="300">
        <template slot-scope="scope">
          <el-button type="text" @click="updateClick(scope.row)">编辑</el-button>
          <el-button type="text" size="small" @click="removeClick(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>

添加和编辑弹窗(这里我让id自增了,所以不输入id)

因为我让id自增了,所以就不输入id了

 <el-dialog title="添加书籍信息" :visible.sync="dialogAddBookVisible"  :append-to-body="true">
        <el-form :model="addBook">
          <el-form-item label="id" prop="bookID" :label-width="formLabelWidth" >
            <el-input v-model="addBook.bookID"  placeholder="请输入书籍编号" disabled></el-input>
          </el-form-item>
          <el-form-item label="书籍名称" :label-width="formLabelWidth" prop="bookName">
            <el-input v-model="addBook.bookName" autocomplete="off"  placeholder="请输入书籍名称"></el-input>
          </el-form-item>
          <el-form-item label="书籍数量" :label-width="formLabelWidth">
            <el-input v-model="addBook.bookCounts" autocomplete="off"  placeholder="请输入书籍数量"></el-input>
          </el-form-item>
          <el-form-item label="书籍评价" :label-width="formLabelWidth">
            <el-input v-model="addBook.detail" autocomplete="off"  placeholder="请输入书籍评价"></el-input>
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button @click=" dialogAddBookVisible= false">取 消</el-button>
          <el-button type="primary"  @click="addClick">确 定</el-button>
        </div>
      </el-dialog>

在这里插入图片描述

    <el-dialog title="修改信息" :visible.sync="dialogFormVisible"  :append-to-body="true">
      <el-form :model="books">
        <el-form-item label="id" prop="bookID" :label-width="formLabelWidth">
          <el-input v-model="books.bookID" disabled></el-input>
        </el-form-item>
        <el-form-item label="书籍名称" :label-width="formLabelWidth" prop="bookName">
          <el-input v-model="books.bookName" autocomplete="off"  placeholder="请输入书籍名称"></el-input>
        </el-form-item>
        <el-form-item label="书籍数量" :label-width="formLabelWidth">
          <el-input v-model="books.bookCounts" autocomplete="off"  placeholder="请输入书籍数量"></el-input>
        </el-form-item>
        <el-form-item label="书籍评价" :label-width="formLabelWidth">
          <el-input v-model="books.detail" autocomplete="off"  placeholder="请输入书籍评价"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancelClick">取 消</el-button>
        <el-button type="primary"  @click="updateEnsure">确 定</el-button>
      </div>
    </el-dialog>

接下来就是功能的实现,CRUD工程师开始

添加 功能

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

后端代码

    @PostMapping
    public void  addBook(@RequestBody Book book){
        bookService.save(book);
    }

前端代码

    addApi(data){
      axios({
        url:'http://localhost:8089/book',
        method:'post',
        data:data
      })
    }

    addClick(){
        console.log(this.addBook)  
        this.addApi(this.addBook) //在输入框的时候已经把数据存到了addbook了,直接传就行了
        alert("添加成功")
       this.dialogAddBookVisible= false //让弹窗关闭 
       this.addBook={}  //清零,不然会保存数据
    },

删除功能

在这里插入图片描述
在这里插入图片描述

后端代码

    @DeleteMapping(value = "/{id}")
    public void  deleteBook(@PathVariable(value = "id") int id){
         bookService.removeById(id);
    }

前端代码

    deleteApi(id){
     return  axios.request({
             url:'http://localhost:8089/book/'+id,
             method: 'delete',
      })
    },
    
    removeClick(row){
      console.log(row)
       const id=row.bookID;
       this.deleteApi(id)
        this.resetClick()

    },

修改功能

在这里插入图片描述

后端代码

    @PutMapping
    public void updeteBook(@RequestBody Book book){
         bookService.updateById(book);
    }

前端代码

    updateApi(data){
      axios({
        url:'http://localhost:8089/book',
        method:"put",
        data: data
      })
    },
        updateEnsure(){
      this.updateApi(this.books)
      this.books={}
      this.dialogFormVisible=false;
      this.resetClick()
    },

查找功能

在这里插入图片描述

后端代码

    @GetMapping(value = "/{id}") 
    public Book  getBook(@PathVariable int id){
        return  bookService.getById(id);
    }

前端代码

    geiApi(id){
      axios({
        url:'http://localhost:8089/book/'+id,
        method:"get",
      }).then(res=>{
        const arr = []; 
        arr.push(res.data)  //这里要转换一下,不然会类型错误
        this.book=arr
      })
    },
    getClick(id){
        this.geiApi(id);
    },

crud功能已经实现了,还有很多逻辑上的问题需要去修改,下次再改

标签:vue,springboot,代码,CRUD,value,public,book,element,id
来源: https://blog.csdn.net/m0_58438555/article/details/119085360

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有