springboot+vue音乐网站实战项目

springboot+vue音乐网站实战项目
前言
 
前端使用: vue/cli “^4.5.15”
 
后端使用: springboot2.6.2, mybatis-plus3.5.9,mybatis-plus-generator3.5.1
 
部署:nginx,tomcat,webpack
 
小结。虽然项目花里胡哨,但是难度不大。收获最多的是:
 
1.技术选型,任务需求。一旦确定,后期变更代价惨重。
 
2. 注意备份
 
3.数据库表单设计
 
4.bug解决方案
 
5.更深入体会的是MVVM架构开发模式,流水线式创建实体并实现业务逻辑:
 
domain/pojo/bean → dao/mapper → mapper.xml → service → serviceimpl → controller
 
6.记得优先对前端进行数据校验。
 
感谢b站王汉远前辈和开发中帮助我的人。由于版权原因,开源项目不公布任何歌曲
 
由于当时选型失误,也没有围绕api开发。这就导致歌曲都是自己一首一首上传的…因此技术选型是我踩得最大的坑。
 
一。成果展示
 
前台大概总览
 
后台大概总览
 
二。 后端流程
 
2.1数据库表设计
 
在这一个单用户项目中基本手握一本 java开发手册,遵守其中规约就可以了。(但是这怎么说呢,目前阶段感觉像鸡肋。因此我接着打算看看mysql高级)
 
单用户项目开发基本通用样例,但仍然应当考虑自己项目的实际需求
 
2.2. 后端搭建
 
2.2.1 mybatis-plus逆向工程生成代码简化开发
 
为了方便开发,我们应当先建立数据库。之后使用mybatis-plus的逆向工程,代码生成器! 这里不建议使用 lombok 省略 实体的构造器和get,set方法。(我曾看到过这样一句话,如果java内部到处充斥着这种像lmobok可以修改源代码的插件,那么就如同无根浮萍,没有自己的核心竞争力,java迟早被取代!)但我们不可否认,它也很方便,我一般用lombok主要是用他的@slf4j日志。
 
这种方式可以帮助我们自动生成
 
domain/pojo/bean(完全生成) → dao/mapper (生成模型和一般crud方法)→ mapper.xml (生成模型和一般crud方法)→ service (生成模型和一般crud方法)→ serviceimpl (生成模型和一般crud方法) → controller (生成模型和一般crud方法) 如果不满意它自带的crud方法,我们可以自己写,建议自己写!
 
该方法要注意的是mybatis-plus-generator3.5.1版本是一个转变 代码生成详见此处
 
2.2.2 配置数据,跨域和静态资源放行
 
由于基本配置是可以复用的,因此我将其粘贴下方。
 
采用 配置类和yaml配置文件相结合的方式
 
1.druid类配置文件
 
package com.vector.music.config;
 
import com.alibaba.druid.pool.DruidDataSource;
 
import com.alibaba.druid.support.http.StatViewServlet;
 
import com.alibaba.druid.support.http.WebStatFilter;
 
import org.springframework.boot.context.properties.ConfigurationProperties;
 
import org.springframework.boot.web.servlet.FilterRegistrationBean;
 
import org.springframework.boot.web.servlet.ServletRegistrationBean;
 
import org.springframework.context.annotation.Bean;
 
import org.springframework.context.annotation.Configuration;
 
import javax.annotation.PostConstruct;
 
import javax.sql.DataSource;
 
import java.sql.SQLException;
 
import java.util.Arrays;
 
/**
 
 * @author WangYuanJie
 
 * @description: about jdbcDruidConfig
 
 * @ClassName MyDataSourceConfig
 
 * @date 2022/1/21 16:17
 
 */
 
@Configuration
 
public class MyDataSourceConfig {
 
    @ConfigurationProperties(prefix = "spring.datasource")
 
    @Bean
 
    public DataSource dataSource() throws SQLException {
 
        DruidDataSource druidDataSource = new DruidDataSource();
 
        //加入监控功能
 
//        druidDataSource.setFilters("stat,wall");
 
        return druidDataSource;
 
    }
 
    /*
 
     * 解决druid 日志报错:discard long time none received connection:xxx
 
     * */
 
    @PostConstruct
 
    public void setProperties(){
 
        System.setProperty("druid.mysql.usePingMethod","false");
 
    }
 
    /**
 
     * 配置druid的监控页
 
     * @return
 
     */
 
    @Bean
 
    public ServletRegistrationBean statViewServlet(){
 
        StatViewServlet statViewServlet = new StatViewServlet();
 
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid/*");
 
        registrationBean.addInitParameter("loginUsername","admin");
 
        registrationBean.addInitParameter("loginPassword","123456");
 
        return registrationBean;
 
    }
 
    /**
 
     * WebStatFilter用于采集web-jdbc关联监控的数据
 
     */
 
    @Bean
 
    public FilterRegistrationBean webStatFilter(){
 
        WebStatFilter webStatFilter = new WebStatFilter();
 
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<>(webStatFilter);
 
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
 
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.webp,*.webp,*.ico,/druid/*");
 
        return filterRegistrationBean;
 
    }
 
}
 
2.后端解决跨域问题
 
/**
 
 * 解决跨域问题
 
 */
 
@Configuration
 
public class WebMvcConfig implements WebMvcConfigurer {
 
    @Override
 
    public void addCorsMappings(CorsRegistry registry) {
 
        registry.addMapping("/**")
 
                .allowedOriginPatterns("*")
 
                .allowCredentials(true)
 
                .allowedMethods("*");
 
    }
 
3.解决静态资源放行问题
 
你可以将静态资源放在你想放置的位置,但是尽量不要放在项目工程中,因为项目工程后来只会在内存中运行。不要增加内存负荷,而且你将会出现一个奇怪的问题 springboot图片回显 详见此处
 
    /**
 
     * 默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性。
 
     * 默认映射的文件夹有:
 
     * classpath:/META-INF/resources
 
     * classpath:/resources
 
     * classpath:/static
 
     * classpath:/public
 
     * 上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public
 
     * 原理: 静态映射/**。
 
     * 请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面
 
     * 静态资源访问前缀
 
     * 默认无前缀
 
     * spring:
 
     * mvc:
 
     * static-path-pattern: /res/**
 
     * 当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找
 
     */
 
    // 以下是自定义静态资源访问
 
    @Override
 
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
 
        /**
 
         * spring boot中上传图片回显问题
 
         * 定位歌手头像地址
 
         * 绝对路径映射,这个不重新部署就可以回显,因为映射你的本地
 
         */
 
        registry.addResourceHandler("static/**")。addResourceLocations(
 
                System.getProperty("user.dir") + File.separator + "static" + File.separator);
 
    }

推荐阅读