基于SpringBoot+Mybatis+vue2前后端分离项目模板实现

  • 需求:

        无

  • 实现功能

        实现一个前后端分离的项目模板,以供更好的开发项目(主要基于上次搭建的vue项目,实现通过接口访问后台实现查询后台数据库用户信息的简易版Demo)

  • 环境:

        idea 2021.6

        mysql 8.0

        vue环境见上节(离线安装模板)

  • 可能相关问题描述:

        ①项目启动中前后端端口不一致问题的解决方法?

       1) 通过配置访问Vue后端的接口地址实现,在build/index.js中proxyTable中加入如下代码:

    proxyTable: {
      '/api': {
        target: 'http://localhost:8081',//要访问的后端接口
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'  //这句话的意思是用'/api来代替http://localhost:8081/'
          //  '^/api': '/'  '用/api来代替http://localhost:8081'
        }
      }
    },

        2) 当后台引入SpringSecurity后,如果不进行任何配置,SpringSecurity自带有登录页面,会出现跨域跳转路径被/login拦截导致无法登录问题。(以请求localhost:8081/api/user为例)

        

 以上图为例,springBoot引入如下pom文件后不做任何配置,出现无法跨域问题

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

删除pom后

        ②Vue自定义标签未定义模板也可以情况?(与本例无关,仅用于总结)

         在参考vue-admin-template项目中发现引入了非系统内置的标签,而且没有自定义但是仍然可以使用的情况,参见如下代码:

        AppMain1.vue

         AppMain.vue

        并在router/index.js加入如下代码:(主要是访问AppMain.vue这个界面)

import Vue from 'vue'
import Router from 'vue-router'
import nest from '@/components/AppMain'

Vue.use(Router)

export default new Router({
  mode:'history',
  routes: [
    {
      path: '/nest',
      name: 'nest',
      component: nest
    },
  ]
})

      通过访问发现AppMain1的内容也读取出来了,说明这个自定义标签会在export default时默认生成一个作为能够让其他vue引用的标签。

        ③npm run dev大致是怎样启动一个项目的?

        参考链接:整合 vue-element-template_Caozefei_2018的博客-CSDN博客_vue-element-templatehttps://blog.csdn.net/Caozefei_2018/article/details/111146389

  • 步骤

      ①创建SpringBoot+MyBatis环境,增加实体类以及创建数据库,提供能够API接口

        1)IDEA创建新项目,并增加如下依赖:

              File->New->Project..,

 2)删除application.properties,创建application.yml文件并增加如下配置:

server:
  port: 8081
  servlet:
    context-path: /
spring:
  datasource:
    username: root
    password: 123123
    url: jdbc:mysql://localhost:3306/zzz?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath*:/mapper/**/*.xml

3)创建User实体类、userMapper接口、userMapper.xml,以及ApiController

        User

public class User {

    private Long id;

    private String name;

...
}

       UserMapper

@Mapper
public interface UserMapper {
    public List<User> findAll();
}

        userMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.Mapper.UserMapper">
    <select id="findAll" resultType="com.example.demo.Entity.User">
        select * from user
    </select>
</mapper>

       ApiController

@RestController(value = "api")
public class apiController {
    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/user")
    public List<User> myTest(){
        List<User> users = userMapper.findAll();
        return users;
    }
}

        4)打开mysql管理工具Navcat创建数据库

   ②VUE引入axios,并修改访问后台接口,实现点击获取信息按钮获取用户信息功能

        1)导入axios

npm install axios

npm install

          2)修改build/index.js下的proxyTable{}代码:

proxyTable: {
  '/api': {
    target: 'http://localhost:8081',//要访问的后端接口
    changeOrigin: true,
    pathRewrite: {
      '^/api': '/'
    }
  }
},

        3)增加user.vue通过axios请求后台:代码如下:

        user.vue

<template>
  <div>
    <el-button @click="getUser">获取用户信息</el-button>
    <ul v-for="(item,i) in user">
      <li>{{item.name}}</li>
    </ul>
  </div>
</template>

<script>
import axios from "axios";

export default {
  name: "user",
  data() {
    return {
      user:[],
    }
  },
  methods:{
    getUser(){
      axios.get("/api/user").then((respose)=>{
        debugger
          if(respose.status==200){
            debugger
              this.user=respose.data;
          }
        }
      )
    }
  }

}
</script>

<style scoped>

</style>

   router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import user from '@/components/user'
Vue.use(Router)
export default new Router({
  mode:'history',
  routes: [
    {
      path: '/user',
      name: 'user',
      component: user
    }
  ]
})

至此,启动后台,前端npm run dev运行后访问/user,点击获取用户信息,得到的界面如下:

项目Demo下载地址:

        链接:https://pan.baidu.com/s/1UmwThNegO2EmsEzfuOIIEQ 
        提取码:rtj6

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 项目特点 - 前台参考"Hexo"的"Butterfly"设计,美观简洁,响应式体验好。 - 后台参考"element-admin"设计,侧边栏,历史标签,面包屑自动生成。 - 采用Markdown编辑器,写法简单。 - 评论支持表情、GIF动图输入回复等,样式参考Valine。 - 前后分离部署,适应当前潮流。 - 接入第三方登录,减少注册成本。 - 留言采用弹幕墙,更加炫酷。 - 支持代码高亮和复制,图片预览,深色模式等功能,提升用户体验。 - 搜索文章支持高亮分词,响应速度快。 - 新增文章目录、推荐文章等功能,优化用户体验。 - 新增在线聊天室,支持撤回、语音输入、统计未读数量等功能。 - 新增aop注解实现操作日志功能。 - 支持动态权限修改,采用RBAC模型,前菜单和后台权限实时更新。 - 后台管理支持修改背景图片,博客配置等信息,操作简单,支持上传相册。 - 代码支持多种搜索模式(Elasticsearch或MYSQL),支持多种上传模式(OSS或本地),可支持配置。Elasticsearch占内存较高,如果服务器配置太低,不建议使用。 - 新增网站导航功能,页面优雅美观。可自行添加自己常用的网站进行分类和排序。 - 新增聊天管理功能,方便清理垃圾聊天内容。 - 新增登录日志功能,随时查看用户的登录信息。 - 前台页面重新布局重构,页面布局更加简洁,首页加载速度更快。 - 前台首页文章列表顶部新增滚动消息,超级炫酷。 - 新增了监控用户是否授权的功能、增加了用户的体验性。 - 增加图片删除后也将该路径的图片删除的功能、大大提高了文件存储的利用率。 - 将接口进行**axios**二次封装、更利于接口的请求和响应。 - 新增本博客配套的**微信小程序**,可随时用手机浏览文章。并且接入微信登录,减少注册成本。 - **微信小程序**新增每日新闻热搜功能、可随时查看热搜。 - 新增本博客配套的**App**,同时接入qq、微博登录,使用更加方便。 - 代码遵循阿里巴巴开发规范,利于开发者学习。 ## 技术介绍 **前:** vue + vuex + vue-router + axios + vuetify + element + echarts + uniapp + uview + Html + Css + JavaScript **后:** SpringBoot + nginx + docker + SpringSecurity + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket **其他:** 接入QQ,微博、微信第三方登录,接入腾讯云人机验证、websocket ## 运行环境 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值