小工具知识网

当前位置: 首页 > 行业知识 > 【SpringBoot3+Vue3】一【基础篇】

行业知识

【SpringBoot3+Vue3】一【基础篇】

2026-11-02 20:54:31 来源:互联网转载

目录

一、Spring Boot概述

1、Spring Boot 特性

1.1 起步依赖

1.2 自动配置 

1.3 其他特性

1.3.1 内嵌的Tomcat、Jetty (无需部署WAR文件)

1.3.2 外部化配置

1.3.3 不需要XML配置(properties/yml)

二、Spring Boot入门

1、一个入门程序需求

2、步骤

2.1 创建Maven工程

2.2 导入Spring-boot-start-web起步依赖 

2.3 编写Controller 

2.4 提供启动类 

3、手动创建SpringBoot工程(不重要)

3.1 创建Maven工程

3.2 引入依赖

3.3 提供启动类

3.3.1 修改App文件名为启动类名

3.3.2 手动生成resources文件夹

3.3.3 手动生成application.properies 等

三、SpringBoot配置文件

1、properties配置文件

2、yaml配置文件(推荐)

3、yml配置信息书写与获取

2.1 第三方技术配置信息

2.2 自定义配置信息

2.2.1 引入发送邮件依赖

2.2.2 工具类MailUtil 

2.2.3 controller

2.2.4 service

2.2.5 serviceImpl

2.2.6 yml配置文件

四、整合Mybatis-plus

1、pom

2、yml

3、emp.sql

4、统一返回类

5、controller

6、service

7、serviceImpl

五、Bean管理

1、Bean扫描

2、Bean注册 

2.1 @Bean 

2.1.1 @Bean方法一:启动类创建一个方法(不建议使用)

2.1.2 @Bean方法二:配置类(建议)

2.2 @Import

2.2.1 导入配置类

2.2.2 导入ImportSelector接口实现类

 3、注册条件

六、自动配置

七、自定义starter


前言:通过SpringBoot3+Vue3学习,我们可以学会单体前后端当中的常用技术,独立完成后端接口和页面的开发,大大提升编码能力.本课程需要jdk17+、idea2021+、maven3.5+,Spring3+Vue3

一、Spring Boot概述

Spring Boot是Spring提供的一个子项目,用于快速构建Spring应用程序

1、Spring Boot 特性

1.1 起步依赖

本质上就是一个Maven坐标,整合了完成一个功能需要的所有坐标

1.2 自动配置 

遵循约定大约配置的原则,在boot程序启动后,一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发。

1.3 其他特性

1.3.1 内嵌的Tomcat、Jetty (无需部署WAR文件)
1.3.2 外部化配置
1.3.3 不需要XML配置(properties/yml)

 

二、Spring Boot入门

1、一个入门程序需求

需求:使用SpringBoot开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串“hello world ~".

2、步骤

2.1 创建Maven工程

2.2 导入Spring-boot-start-web起步依赖 

2.3 编写Controller 

package com.bocai.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController {    @RequestMapping("/hello")    public String hello(){        return "Hello World!";    }}

2.4 提供启动类 

 启动服务访问:http://localhost:8080/hello

3、手动创建SpringBoot工程(不重要)

3.1 创建Maven工程

3.2 引入依赖

           org.springframework.boot        spring-boot-starter-parent        3.1.5             
                    org.springframework.boot            spring-boot-starter-web        

3.3 提供启动类

3.3.1 修改App文件名为启动类名

一般为项目名+Application

package com.bocai;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringbootQuickstartApplication {    public static void main(String[] args) {        SpringApplication.run(SpringbootQuickstartApplication.class, args);    }}
3.3.2 手动生成resources文件夹
3.3.3 手动生成application.properies 等

三、SpringBoot配置文件

1、properties配置文件

server.port=9090

2、yaml配置文件(推荐)

server:  port: 9091  servlet:    context-path: /start2

3、yml配置信息书写与获取

2.1 第三方技术配置信息

2.2 自定义配置信息

发送邮件为例

2.2.1 引入发送邮件依赖
                       org.eclipse.angus            jakarta.mail        
2.2.2 工具类MailUtil 
package com.bocai.utils;import com.bocai.pojo.EmailProperties;import jakarta.mail.*;import jakarta.mail.internet.InternetAddress;import jakarta.mail.internet.MimeMessage;import java.util.Properties;public class MailUtil {    /**     * 发送邮件     * @param emailProperties 发件人信息(发件人邮箱,发件人授权码)及邮件服务器信息(邮件服务器域名,身份验证开关)     * @param to 收件人邮箱     * @param title 邮件标题     * @param content 邮件正文     * @return     */    public static boolean sendMail(EmailProperties emailProperties, String to, String title, String content){        MimeMessage message = null;        try {            Properties properties = new Properties();            properties.put("mail.smtp.host", emailProperties.getHost());            properties.put("mail.smtp.auth",emailProperties.isAuth());            properties.put("mail.user", emailProperties.getUser());            properties.put("mail.password", emailProperties.getCode());            // 构建授权信息,用于进行SMTP进行身份验证            Authenticator authenticator = new Authenticator() {                @Override                protected PasswordAuthentication getPasswordAuthentication() {                    return new PasswordAuthentication(emailProperties.getUser(), emailProperties.getCode());                }            };            // 使用环境属性和授权信息,创建邮件会话            Session mailSession = Session.getInstance(properties, authenticator);            // 创建邮件消息            message = new MimeMessage(mailSession);        }catch (Exception e){            e.printStackTrace();        }        //如果邮件创建失败,直接返回        if (message==null){            return false;        }        try {            // 设置发件人            InternetAddress form = new InternetAddress(emailProperties.getUser());            message.setFrom(form);            // 设置收件人            InternetAddress toAddress = new InternetAddress(to);            message.setRecipient(Message.RecipientType.TO, toAddress);            // 设置邮件标题            message.setSubject(title);            // 设置邮件的内容体            message.setContent(content, "text/html;charset=UTF-8");            // 发送邮件            Transport.send(message);        }catch (Exception e){            e.printStackTrace();        }        return true;    }}
2.2.3 controller
package com.bocai.controller;import com.bocai.service.EmailServcie;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class EmailController {    @Autowired    private EmailServcie emailServcie;    @RequestMapping("/send")    public  Boolean send(){        //收件人信箱        String to = "sdadae@qq.com";        //邮件标题        String title = "测试邮件";        //正文        String content = "使用java进行邮件发送测试的正文";        boolean flag = emailServcie.send(to,title,content);        return flag;    }}
2.2.4 service
package com.bocai.service;public interface EmailServcie {    boolean send(String to, String title, String content);}
2.2.5 serviceImpl
package com.bocai.service.impl;import com.bocai.pojo.EmailProperties;import com.bocai.service.EmailServcie;import com.bocai.utils.MailUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class EmailServiceImpl implements EmailServcie {    @Autowired    private EmailProperties emailProperties;    /**     *     * @param to 收件人邮箱     * @param title 标题     * @param content 正文     * @return     */    @Override    public boolean send(String to, String title, String content) {        boolean flag = MailUtil.sendMail(emailProperties,to,title,content);        return flag;    }}
2.2.6 yml配置文件
server:  port: 9091# 发送邮件配置信息email:  user: 11332@qq.com  code: fdsdsfsdfs  host: smtp.qq.com  auth: true

本文使用的是这个 

@ConfigurationProperties(prefix = "email")

 可忽略上面的红色提示不管

四、整合Mybatis-plus

1、pom

mybatis-plus在springboot3.X版本之后要使用3.5.3以上版本

    4.0.0            org.springframework.boot        spring-boot-starter-parent        3.1.5                 com.bocai    mybatis-plus-module    0.0.1-SNAPSHOT    mybatis-plus-module    mybatis-plus-module            17                            org.springframework.boot            spring-boot-starter-web                            com.mysql            mysql-connector-j            runtime                            org.projectlombok            lombok            true                            org.springframework.boot            spring-boot-starter-test            test                                    com.baomidou            mybatis-plus-boot-starter            3.5.3                            com.alibaba            druid-spring-boot-starter            1.1.23                                                    org.springframework.boot                spring-boot-maven-plugin                                                            paketobuildpacks/builder-jammy-base:latest                                                                                            org.projectlombok                            lombok                                                                                    

2、yml

spring:  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/springboot_vue?serverTimezone=UTC    username: root    password: @@@@0mybatis-plus:  configuration:    map-underscore-to-camel-case: true # 在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 控制台显示sql    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler  # 配置全局枚举处理器,好像还有说json的  global-config:    db-config:      id-type: auto   # 数据库id生产规则全局 配置 # ASSIGN_ID雪花算法,数据库id建议使用Long类型      logic-delete-field: deleted # 全局配置逻辑删除字段名      logic-delete-value: 0 # 全局配置# 逻辑已删除值(默认为 1)这里因为我是反的所以改成0      logic-not-delete-value: 1  # 逻辑未删除值(默认为 0)这里因为我是反的所以改成1      # table-prefix: tbl_    # 数据库表前缀全局配置    banner: false   # 关闭控制台mybatis-plus的logo#  type-enums-package: com.bocai.enums   # 扫描通用枚举包 或者使用上面那个枚举全局配置

3、emp.sql

-- 员工管理(带约束)CREATE TABLE emp (  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',  username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',  PASSWORD VARCHAR(32) DEFAULT '123456' COMMENT '密码',  NAME VARCHAR(10) NOT NULL COMMENT '姓名',  gender TINYINT UNSIGNED NOT NULL COMMENT '性别, 说明: 1 男, 2 女',  image VARCHAR(300) COMMENT '图像',  job TINYINT UNSIGNED COMMENT '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',  entrydate DATE COMMENT '入职时间',  dept_id INT UNSIGNED COMMENT '部门ID',  create_time DATETIME NOT NULL COMMENT '创建时间',  update_time DATETIME NOT NULL COMMENT '修改时间') COMMENT '员工表';INSERT INTO emp(id, username, PASSWORD, NAME, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,NOW(),NOW()),(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,NOW(),NOW()),(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,NOW(),NOW()),(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,NOW(),NOW()),(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,NOW(),NOW()),(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,NOW(),NOW()),(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,NOW(),NOW()),(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,NOW(),NOW()),(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,NOW(),NOW()),(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,NOW(),NOW()),(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,NOW(),NOW()),(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,NOW(),NOW()),(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,NOW(),NOW()),(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,NOW(),NOW()),(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,NOW(),NOW()),(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2007-01-01',2,NOW(),NOW()),(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,NOW(),NOW());

4、统一返回类

package com.bocai.common;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class Result {    private Integer code;//响应码,1 代表成功; 0 代表失败    private String msg;  //响应信息 描述字符串    private Object data; //返回的数据    //增删改 成功响应    public static Result success(){        return new Result(1,"success",null);    }    //查询 成功响应    public static Result success(Object data){        return new Result(1,"success",data);    }    //失败响应    public static Result error(String msg){        return new Result(0,msg,null);    }}

5、controller

package com.bocai.controller;import com.bocai.common.Result;import com.bocai.pojo.Emp;import com.bocai.service.EmpService;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@Slf4j@RequestMapping("/emps")public class EmpController {    @Autowired    private EmpService empService;    @GetMapping("/{id}")    public Result queryById(@PathVariable Integer id){        Emp emp = empService.getById(id);        return Result.success(emp);    }}

6、service

package com.bocai.service;import com.bocai.pojo.Emp;import com.baomidou.mybatisplus.extension.service.IService;/*** @author cheng* @description 针对表【emp(员工表)】的数据库操作Service* @createDate 2023-11-13 16:53:52*/public interface EmpService extends IService {}

7、serviceImpl

package com.bocai.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.bocai.pojo.Emp;import com.bocai.service.EmpService;import com.bocai.mapper.EmpMapper;import org.springframework.stereotype.Service;/*** @author cheng* @description 针对表【emp(员工表)】的数据库操作Service实现* @createDate 2023-11-13 16:53:52*/@Servicepublic class EmpServiceImpl extends ServiceImpl    implements EmpService{}

8、mapper

package com.bocai.mapper;import com.bocai.pojo.Emp;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import org.apache.ibatis.annotations.Mapper;/*** @author cheng* @description 针对表【emp(员工表)】的数据库操作Mapper* @createDate 2023-11-13 16:53:52* @Entity com.bocai.pojo.Emp*/@Mapperpublic interface EmpMapper extends BaseMapper {}

http://localhost:8080/emps/1

五、Bean管理

1、Bean扫描

SpringBoot默认扫描启动类所在包及其子包

2、Bean注册 

 

2.1 @Bean 

2.1.1 @Bean方法一:启动类创建一个方法(不建议使用)
2.1.2 @Bean方法二:配置类(建议)

 

 

2.2 @Import

2.2.1 导入配置类
2.2.2 导入ImportSelector接口实现类

优化一下使用配置文件

package com.itheima.config;import org.springframework.context.annotation.ImportSelector;import org.springframework.core.type.AnnotationMetadata;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;public class CommonImportSelector implements ImportSelector {    @Override    public String[] selectImports(AnnotationMetadata importingClassMetadata) {        //读取配置文件的内容        List imports = new ArrayList();        InputStream is = CommonImportSelector.class.getClassLoader().getResourceAsStream("common.imports");        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String line = null;        try {            while((line = br.readLine())!=null){                imports.add(line);            }        } catch (IOException e) {            throw new RuntimeException(e);        } finally {            if (br!=null){                try {                    br.close();                } catch (IOException e) {                    throw new RuntimeException(e);                }            }        }        return imports.toArray(new String[0]);    }}

 3、注册条件

package com.itheima.config;import cn.itcast.pojo.Country;import cn.itcast.pojo.Province;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class CommonConfig {    //注入Country对象    //如果配置文件中配置了指定的信息,则注入,否则不注入    @ConditionalOnProperty(prefix = "country",name = {"name","system"})    @Bean    public Country country(@Value("${country.name}") String name,@Value("${country.system}") String system){        Country country = new Country();        country.setName(name);        country.setSystem(system);        return country ;    }    //对象默认的名字是: 方法名    //@Bean("aa")    //如果方法的内部需要使用到ioc容器中已经存在的bean对象,那么只需要在方法上声明即可,spring会自动的注入    /*@Bean    public Province province(Country country){        System.out.println("province: "+country);        return new Province();    }*/    //如果ioc容器中不存在Country,则注入Province,否则不注入    @Bean    //@ConditionalOnMissingBean(Country.class)    //如果当前环境中存在DispatcherServlet类,则注入Province,否则不注入    //如果当前引入了web起步依赖,则环境中有DispatcherServlet,否则没有    @ConditionalOnClass(name = "org.springframework.web.servlet.DispatcherServlet")    public Province province(){        return new Province();    }}

六、自动配置

七、自定义starter

          org.springframework.boot      spring-boot-starter      3.1.2              org.springframework.boot      spring-boot-starter-data-jdbc      3.0.0              org.mybatis      mybatis      3.5.13              org.mybatis      mybatis-spring      3.0.0    
package com.itheima.config;import org.apache.ibatis.annotations.Mapper;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.beans.factory.BeanFactory;import org.springframework.boot.autoconfigure.AutoConfiguration;import org.springframework.boot.autoconfigure.AutoConfigurationPackages;import org.springframework.context.annotation.Bean;import javax.sql.DataSource;import java.util.List;@AutoConfiguration//表示当前类是一个自动配置类public class MyBatisAutoConfig {    //SqlSessionFactoryBean    @Bean    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        sqlSessionFactoryBean.setDataSource(dataSource);        return sqlSessionFactoryBean;    }    //MapperScannerConfigure    @Bean    public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory){        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();        //扫描的包:启动类所在的包及其子包        List packages = AutoConfigurationPackages.get(beanFactory);        String p = packages.get(0);        mapperScannerConfigurer.setBasePackage(p);        //扫描的注解        mapperScannerConfigurer.setAnnotationClass(Mapper.class);        return mapperScannerConfigurer;    }}
org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.itheima.config.MyBatisAutoConfig

 

          com.itheima      dmybatis-spring-boot-autoconfigure      1.0-SNAPSHOT              org.springframework.boot      spring-boot-starter      3.1.2              org.springframework.boot      spring-boot-starter-data-jdbc      3.0.0              org.mybatis      mybatis      3.5.13              org.mybatis      mybatis-spring      3.0.0    

 

上一篇:苹果原神怎么换服务器?

下一篇:dayz自建服务器怎么更换地图?