1. 首页
  2. 技术知识

Springboot+Vue整合笔记【超详细】

  • | 作者:江夏
  • | 知乎:https://www.zhihu.com/people/qing-ni-chi-you-zi-96
  • | GitHub:https://github.com/JiangXia-1024?tab=repositories
  • | 博客地址:https://blog.csdn.net/qq_41153943

Part 1

目前很多公司的开发模式都是前后的分离的分工模式,这样能够做到各司其职,提高开发的效率。之前也有文章介绍了springboot项目和vue创建一个简单的前端项目,这篇文章则是将springboot和vue进行简单的整合,实现一个简单的登录页面。

最后本文的源码都会同步至github,欢迎下载使用和star!


Part 2

先介绍下本文的开发工具,后端使用的java的版本是jdk1.8,框架是springboot,开发工具是idea,前端则是使用vue.js,开发工具是vs code。

本文的前提条件是需要对springboot和vue.js 有个一定简单的了解。

关于如何使用idea创建一个springboot项目可以参考:SpringBoot入门:使用IDEA和Eclipse构建第一个SpringBoot项目。

如何创建一个vue前端项目可以参考:Vue学习笔记(一):从零开始创建一个Vue前端项目。


一、后端Springboot项目开发:

这里先准备下数据,创建一个user表,并插入数据,sql如下:

  1. CREATE TABLE `user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  3. `email` varchar(255) NOT NULL COMMENT '邮箱',
  4. `password` varchar(255) NOT NULL COMMENT '密码',
  5. `username` varchar(255) NOT NULL COMMENT '姓名',
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `email` (`email`) USING BTREE
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
  9. INSERT INTO `user` VALUES ('1', '1@qq.com', '123456', '张三');
  10. INSERT INTO `user` VALUES ('2', '2@qq.com', '234567', '李四');
  11. INSERT INTO `user` VALUES ('3', '3@qq.com', '345678', '王五');

复制代码 首先创建一个springboot项目,然后在pom文件中引入相关依赖:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>2.3.2.RELEASE</version>
  9.         <relativePath/> <!– lookup parent from repository –>
  10.     </parent>
  11.     <groupId>com.springboot</groupId>
  12.     <artifactId>springbootdemo</artifactId>
  13.     <version>0.0.1-SNAPSHOT</version>
  14.     <name>springbootdemo</name>
  15.     <description>Demo project for Spring Boot</description>
  16.     <properties>
  17.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18.         <java.version>1.8</java.version>
  19.     </properties>
  20.     <dependencies>
  21.         <dependency>
  22.             <groupId>org.springframework.boot</groupId>
  23.             <artifactId>spring-boot-starter-web</artifactId>
  24.         </dependency>
  25.         <dependency>
  26.             <groupId>org.springframework.boot</groupId>
  27.             <artifactId>spring-boot-starter-thymeleaf</artifactId>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>org.springframework.boot</groupId>
  31.             <artifactId>spring-boot-starter-data-jpa</artifactId>
  32.         </dependency>
  33.         <dependency>
  34.             <groupId>org.springframework.boot</groupId>
  35.             <artifactId>spring-boot-devtools</artifactId>
  36.             <optional>true</optional>
  37.         </dependency>
  38.         <dependency>
  39.             <groupId>org.springframework.boot</groupId>
  40.             <artifactId>spring-boot-starter-test</artifactId>
  41.             <scope>test</scope>
  42.         </dependency>
  43.         <!– Spring Boot Mybatis 依赖 –>
  44.         <dependency>
  45.             <groupId>org.mybatis.spring.boot</groupId>
  46.             <artifactId>mybatis-spring-boot-starter</artifactId>
  47.             <version>1.2.0</version>
  48.         </dependency>
  49.         <!– MySQL 连接驱动依赖 –>
  50.         <dependency>
  51.             <groupId>mysql</groupId>
  52.             <artifactId>mysql-connector-java</artifactId>
  53.             <version>5.1.39</version>
  54.         </dependency>
  55.         <!–io工具类–>
  56.         <dependency>
  57.             <groupId>commons-io</groupId>
  58.             <artifactId>commons-io</artifactId>
  59.             <version>2.5</version>
  60.         </dependency>
  61.     </dependencies>
  62.     <build>
  63.         <plugins>
  64.             <!–运用SpringBoot 插件  使用spring-boot-devtools模块的应用,当classpath中的文件有改变时,会自动重启!–>
  65.             <plugin>
  66.                 <groupId>org.springframework.boot</groupId>
  67.                 <artifactId>spring-boot-maven-plugin</artifactId>
  68.                 <configuration>
  69.                     <fork>true</fork>
  70.                 </configuration>
  71.             </plugin>
  72.         </plugins>
  73.     </build>
  74. </project>

复制代码 APPlication.properties文件,添加配置内容如下:

  1. ## 数据源配置
  2. spring.datasource.url=jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
  3. spring.datasource.username=root
  4. spring.datasource.password=jiang
  5. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  6. ## Mybatis 配置
  7. # 配置为 com.pancm.bean 指向实体类包路径。
  8. mybatis.typeAliasesPackage=com.springboot.bean
  9. # 配置为 classpath 路径下 mapper 包下,* 代表会扫描所有 xml 文件。
  10. mybatis.mapperLocations=classpath\:mapper/*.xml

复制代码 开始编写核心逻辑代码:

新建一个User.java实体类,代码如下:

  1. package com.springboot.springbootdemo.bean;
  2. public class User {
  3.     private long id;
  4.     private String email;
  5.     private String password;
  6.     private String username;
  7.     public long getId() {
  8.         return id;
  9.     }
  10.     public void setId(int id) {
  11.         this.id = id;
  12.     }
  13.     public String getEmail() {
  14.         return email;
  15.     }
  16.     public void setEmail(String email) {
  17.         this.email = email;
  18.     }
  19.     public String getPassword() {
  20.         return password;
  21.     }
  22.     public void setPassword(String password) {
  23.         this.password = password;
  24.     }
  25.     public String getUsername() {
  26.         return username;
  27.     }
  28.     public void setUsername(String username) {
  29.         this.username = username;
  30.     }
  31. }

复制代码 然后再新建一个dao文件:

  1. package com.springboot.springbootdemo.dao;
  2. import com.springboot.springbootdemo.bean.User;
  3. import org.apache.ibatis.annotations.*;
  4. import org.springframework.data.repository.query.Param;
  5. import java.util.List;
  6. @Mapper
  7. public interface UserDao {
  8.     /**
  9.      * 新增数据
  10.      */
  11.     @Insert("insert into user(id,email,password,username) values (#{id},#{email},#{password},#{username})")
  12.     void addUser(User user);
  13.     /**
  14.      * 修改数据
  15.      */
  16.     @Update("update user set username=#{username},password=#{password} where id=#{id}")
  17.     void updateUser(User user);
  18.     /**
  19.      * 删除数据
  20.      */
  21.     @Delete("delete from user where id=#{id}")
  22.     void deleteUser(int id);
  23.     /**
  24.      * 根据查询数据
  25.      *
  26.      */
  27.     @Select("select id,email,password,username from user where username=#{userName}")
  28.     User findByName(@Param("userName") String userName);
  29.     /**
  30.      * 查询所有数据
  31.      */
  32.     @Select("select id,email,password,username FROM user")
  33.     List<User> findAll();
  34. }

复制代码 然后就是service和UserServiceImpl文件:

userservice:

  1. package com.springboot.springbootdemo.service;
  2. import com.springboot.springbootdemo.bean.User;
  3. import java.util.List;
  4. public interface UserService {
  5.     /**
  6.      * 新增用户
  7.      * @param user
  8.      * @return
  9.      */
  10.     boolean addUser(User user);
  11.     /**
  12.      * 修改用户
  13.      * @param user
  14.      * @return
  15.      */
  16.     boolean updateUser(User user);
  17.     /**
  18.      * 删除用户
  19.      * @param id
  20.      * @return
  21.      */
  22.     boolean deleteUser(int id);
  23.     /**
  24.      * 根据名字查询用户信息
  25.      * @param userName
  26.      */
  27.     User findUserByName(String userName);
  28.     /**
  29.      * 查询所有数据
  30.      * @return
  31.      */
  32.     List<User> findAll();
  33. }

复制代码 UserServiceImpl文件:

  1. package com.springboot.springbootdemo.service;
  2. import com.springboot.springbootdemo.bean.User;
  3. import com.springboot.springbootdemo.dao.UserDao;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class UserServiceImpl implements UserService {
  9.     @Autowired
  10.     private UserDao userDao;
  11.     @Override
  12.     public boolean addUser(User user) {
  13.         boolean flag=false;
  14.         try{
  15.             userDao.addUser(user);
  16.             flag=true;
  17.         }catch(Exception e){
  18.             e.printStackTrace();
  19.         }
  20.         return flag;
  21.     }
  22.     @Override
  23.     public boolean updateUser(User user) {
  24.         boolean flag=false;
  25.         try{
  26.             userDao.updateUser(user);
  27.             flag=true;
  28.         }catch(Exception e){
  29.             e.printStackTrace();
  30.         }
  31.         return flag;
  32.     }
  33.     @Override
  34.     public boolean deleteUser(int id) {
  35.         boolean flag=false;
  36.         try{
  37.             userDao.deleteUser(id);
  38.             flag=true;
  39.         }catch(Exception e){
  40.             e.printStackTrace();
  41.         }
  42.         return flag;
  43.     }
  44.     @Override
  45.     public User findUserByName(String userName) {
  46.         return userDao.findByName(userName);
  47.     }
  48.     @Override
  49.     public List<User> findAll() {
  50.         return userDao.findAll();
  51.     }
  52. }

复制代码 最后就是controller文件:

  1. package com.springboot.springbootdemo.controller;
  2. import com.springboot.springbootdemo.bean.User;
  3. import com.springboot.springbootdemo.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.*;
  6. import java.util.List;
  7. @RestController
  8. @RequestMapping(value = "/do/user")
  9. public class UserController {
  10.     @Autowired
  11.     private UserService userService;
  12.     @RequestMapping(value = "/user", method = RequestMethod.POST)
  13.     public boolean addUser(@RequestBody User user) {
  14.         System.out.println("新增数据:");
  15.         return userService.addUser(user);
  16.     }
  17.     @RequestMapping(value = "/user", method = RequestMethod.PUT)
  18.     public boolean updateUser(@RequestBody User user) {
  19.         System.out.println("更新数据:");
  20.         return userService.updateUser(user);
  21.     }
  22.     @RequestMapping(value = "/user", method = RequestMethod.DELETE)
  23.     public boolean delete(@RequestParam(value = "id", required = true) int Id) {
  24.         System.out.println("删除数据:");
  25.         return userService.deleteUser(Id);
  26.     }
  27.     @RequestMapping(value = "/user", method = RequestMethod.GET)
  28.     public User findByUserName(@RequestParam(value = "userName", required = true) String userName) {
  29.         System.out.println("查询数据:");
  30.         return userService.findUserByName(userName);
  31.     }
  32.     @RequestMapping(value = "/userAll", method = RequestMethod.GET)
  33.     public List<User> findByUserAge() {
  34.         System.out.println("查询所有数据:");
  35.         return userService.findAll();
  36.     }
  37. }

复制代码 然后启动项目,进行测试:

这里后端的接口基本就开发完成了,接着开发前端的vue项目。


二、前端Vue项目开发:

这里的前端的开发是在前面提到的那篇文章的demo基础上进行开发。

先引入一些组件,在终端窗口输入下面的命令:

  1. #引入axios
  2. cnpm install axios –save-dev

复制代码 然后在main.js文件中引入,main.js文件如下:

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import App from './App'
  5. import router from './router'
  6. import './plugins/element.js'
  7. //引入axios
  8. 16 import axios from 'axios'
  9. 17 Vue.prototype.$ajax = axios
  10. Vue.config.productionTip = false
  11. /* eslint-disable no-new */
  12. new Vue({
  13.   el: '#app',
  14.   router,
  15.   components: { App },
  16.   template: '<App/>'
  17. })

复制代码 接着在componment文件夹下新建一个页面:

  1. <template>
  2.   <div class="layout">
  3.     <Layout>
  4.       <Content :style="{padding: '0 50px'}">
  5.         <Card>
  6.           <div style="min-height: 200px;">
  7.             <v-table
  8.               is-horizontal-resize
  9.               style="width:100%"
  10.               :columns="columns"
  11.               :table-data="tableData"
  12.               row-hover-color="#eee"
  13.               row-click-color="#edf7ff"
  14.             ></v-table>
  15.           </div>
  16.         </Card>
  17.       </Content>
  18.     </Layout>
  19.   </div>
  20. </template>
  21. <script>
  22.   export default {
  23.     name: "main-page",
  24.     data() {
  25.       return {
  26.         tableData: [],
  27.         columns: [
  28.           {field: 'id', title: '编号', width: 80, titleAlign: 'center', columnAlign: 'center',isResize:true},
  29.           {field: 'email', title: '邮箱', width: 150, titleAlign: 'center', columnAlign: 'center',isResize:true},
  30.           {field: 'password', title: '密码', width: 150, titleAlign: 'center', columnAlign: 'center',isResize:true},
  31.           {field: 'username', title: '姓名', width: 280, titleAlign: 'center', columnAlign: 'left',isResize:true}
  32.         ]
  33.       }
  34.     },
  35.     created() {
  36.         //这里直接在created函数中使用axios的get请求向后台获取用户信息数据
  37.         // 在实际开发中可以卸载apiadress.js中配置具体的method对应的路径和接口,这个
  38.         //后面完善功能的情况下再进行介绍
  39.         this.$ajax('http://localhost:8080/do/user/userAll').then(res => {
  40.          this.tableData = res.data
  41.           console.log(res.data);
  42.        }).catch(functiоn (error) {
  43.           console.log(error);
  44.      });
  45.   }
  46.   }
  47. </script>
  48. <style scoped>
  49.   .layout{
  50.     border: 1px solid #d7dde4;
  51.     background: #f5f7f9;
  52.     position: relative;
  53.     border-radius: 4px;
  54.     overflow: hidden;
  55.     height: 100%;
  56.   }
  57.   .layout-logo{
  58.     width: 100px;
  59.     height: 30px;
  60.     background: #5b6270;
  61.     border-radius: 3px;
  62.     float: left;
  63.     position: relative;
  64.     top: 15px;
  65.     left: 20px;
  66.     font-weight: bold;
  67.     text-align: center;
  68.     color: #49ffcc;
  69.   }
  70.   .layout-nav{
  71.     width: 420px;
  72.     margin: 0 auto;
  73.     margin-right: 20px;
  74.   }
  75.   .layout-footer-center{
  76.     text-align: center;
  77.   }
  78. </style>

复制代码 接着在index.js文件中加入该组件:

  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. import HelloWorld from '@/components/HelloWorld'
  4. import HelloDemo from '@/components/HelloDemo'
  5. import zicomponent from '@/components/zicomponent'
  6. import fucomponent from '@/components/fucomponent'
  7. import MainPage from '@/components/MainPage'
  8. Vue.use(Router)
  9. export default new Router({
  10.   routes: [
  11.     {
  12.       path:'/hello',
  13.       name:'HelloDemo',
  14.       component:HelloDemo
  15.     },
  16.     {
  17.       path: '/',
  18.       name: 'HelloWorld',
  19.       component: HelloWorld
  20.     },
  21.     {
  22.       path: '/zi',
  23.       name: 'zicomponent',
  24.       component: zicomponent
  25.     },
  26.     {
  27.       path: '/fu',
  28.       name: 'fucomponent',
  29.       component: fucomponent
  30.     },
  31.     {
  32.       path: '/main',
  33.       name: 'MainPage',
  34.       component: MainPage
  35.     }
  36.   ]
  37. })

复制代码 接着输入npm run dev,编译项目:

注意这里因为vue是8081端口,而springboot项目是8080端口,所以查不出数据。

这里可以看到报跨域的错误了。所以我们要对前端的代码进行下处理:

main.js文件加入下面的代码:

  1. // 设置全局的axios
  2. Vue.prototype.$axios=Axios
  3. // 设置基本路径
  4. Axios.defaults.baseURL='/api'

复制代码 config/index.js文件,在proxyTable里添加如下代码:

  1. //X请求路径
  2.     proxyTable: {
  3.       '/api':{
  4.         target:"http://localhost:8080/",
  5.         changeOrigin:true,
  6.         pathRewrite:{
  7.           '^/api':''
  8.         }
  9.       }
  10.     },

复制代码

最后重启下前端(我这里需要重启下不然没生效),然后编译:


Part 3

上面就是如果使用简单的将springboot和vue进行一个简单的整合,后续将对这块进行完善和继续开发,有任何问题欢迎交流讨论。

另外所有实战文章的源码都会同步至github,有需要的欢迎下载使用。

最后如果觉得本文写得不错,就点下赞和再看推荐给更多的人呗。

本文原创首发于微信公众号【1024笔记】,原文传送门!有兴趣的可以微信搜索关注。


GitHub源码地址

后端:https://github.com/JiangXia-1024/SpringBootDemo_02

前端:https://github.com/JiangXia-1024/vueDemo


历史文章:

  • 分享一些实用的工具和自学网站,建议收藏
  • Spring Boot开发图片上传并添加水印接口
  • Vue学习笔记(一):从零开始创建一个Vue前端项目
  • Postman接口测试图文教程
  • jQuery:选择器使用详解

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/126934.html

联系我们