首页 > 其他分享 >【SpringBoot框架】-- 快速入门

【SpringBoot框架】-- 快速入门

时间:2024-07-11 21:28:52浏览次数:17  
标签:springboot 配置文件 -- spring 入门 public user id SpringBoot

目录

1. spring简介

1.1 springboot快速入门

1.1.1 开发步骤

1.1.2 创建项目

2. springboot的特点

3. 配置文件种类

4. 读取配置文件中的内容

4.1 @ConfigurationPropertie

4.2  @Value

5. profile多环境配置 

6. springboot注册web组件

7. springboot包扫描的原理

8. springboot的自动装配原理【了解】

9. springboot整合mybatis


1. spring简介

Spring框架是一个开源的Java应用框架,以其轻量级、非侵入性、控制反转和依赖注入、面向切面编程等特性著称。它简化了Java应用开发,提供了强大的基础设施支持和丰富的功能集合,使开发者能够更专注于业务逻辑的实现,从而提升了开发效率和代码质量。

1.1 springboot快速入门

1.1.1 开发步骤

SpringBoot 开发起来特别简单,分为如下几步:

  • 创建新模块,选择Spring初始化,并配置模块相关基础信息
  • 选择当前模块需要使用的技术集
  • 开发控制器类
  • 运行自动生成的Application类

1.1.2 创建项目

这里选择了JDK17,因为Spring Boot 3 要求使用 Java 17 或更高版本,因为 Java 17 引入了许多新特性和性能改进,同时也提供了更好的语言特性支持。

注意:打包方式这里需要设置为 Jar

  • 接下来选择springboot的版本,我们这里选择3.0版本的,
  • 选中 Web,然后勾选 Spring Web

  • 点击创建,完成

  • 结构列表如下

 

注意:

  1. 在创建好的工程中不需要创建配置类

  2. 创建好的项目会自动生成其他的一些文件,而这些文件目前对我们来说没有任何作用,所以可以将这些文件忽略。

    可以忽略的目录和文件如下:

    • .mvn
    • .gitignore
    • HELP.md
    • mvnw
    • mvnw.cmd

2. springboot的特点

1) 自动配置

Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。

2) 起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

3) 辅助功能

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器tomcat、安全、指标,健康检测、外部配置等。

3. 配置文件种类

application.propertiesapplication.yml(或 application.yaml)是 Spring Boot 应用程序中最常用的两种配置文件格式。以下是对它们的详细介绍:

application.properties

  • 格式:这是一个基于键值对的配置文件,每行包含一个键值对,键和值之间用等号(=)分隔。

  • 注释:以 # 开头的行被视为注释,Spring Boot 会忽略这些行。

  • 示例

    # Database configuration 
    spring.datasource.driverclassname=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=dbuser 
    spring.datasource.password=dbpass

application.yml 或 application.yaml

  • 格式:YAML 是一种更易于阅读的数据序列化格式,它使用缩进来表示层级结构,而不是像 properties 文件那样使用等号分隔键值对。

  • 注释:以 # 开头的行也是注释。

  • 结构化:YAML 允许你以结构化的方式组织配置,例如使用列表和映射(类似于 JSON 对象)。

  • 示例

    # Database configuration 
    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/student 
    username: root 
    password: 123456
    

选择哪种格式?

  • 简洁性:如果你的配置相对简单,properties 文件可能更简洁。

  • 复杂性:对于复杂的配置,YAML 提供的结构化能力可能更有优势。

  • 可读性YAML 通常被认为更易于阅读和编写,特别是对于具有嵌套结构的配置。

  • 工具支持:某些编辑器和 IDE 对 YAML 格式有更好的支持,包括语法高亮和格式化。

配置文件的加载顺序

Spring Boot 在启动时会按照一定的顺序加载配置文件:

  1. application.propertiesapplication.yml(默认配置文件)

  2. 激活的 profile 特定的配置文件,如 application-dev.propertiesapplication-dev.yml

  3. 命令行参数

  4. 来自环境变量的配置

4. 读取配置文件中的内容

springboot提供了两种方式用于读取springboot配置文件中信息的方式。

4.1 @ConfigurationPropertie

使用在类上 @ConfigurationProperties(prefix="前缀")

4.2  @Value

@Value 注解可以用来将配置文件中的值注入到Spring管理的Bean的字段中,但是它只能读取基本类型和字符串类型。

5. profile多环境配置 

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

1) profile配置方式

  • 多profile文件方式

  • yml多文档方式

2) profile激活方式

  • 配置文件

  • 命令行参数

我们需要针对不同的环境来创建不同的配置文件。使用profile来激活对应的配置文件

比如:

application-dev.properties [开发环境的配置文件] application-test.properties [测试环境的配置文件] application-pro.properties [生产环境的配置文件] 相同配置依然还是放在application.properties中

如何激活对于的配置文件。激活的方式有两种:

第一种: 之间在application配置文件中

#激活对应环境的配置文件

spring.profiles.active=pro

第二种: 部署时如何激活对应环境的配置

命令行参数:java –jar xxx.jar --spring.profiles.active=dev

6. springboot注册web组件

创建一个Servlet

public class MyServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }
}

创建一个配置类

@Configuration //表示该类为配置类,等价于之前的xml配置文件
public class MyConfig {
​
    @Bean //等价于<bean标签.
    public ServletRegistrationBean  myServlet(){
        ServletRegistrationBean bean=new ServletRegistrationBean();
        bean.setServlet(new MyServlet());
        bean.setName("my");
        bean.setLoadOnStartup(1);
        bean.addUrlMappings("/my");
        return bean;
    }
}
​

7. springboot包扫描的原理

ssm项目必须加包扫描。而现在springboot没有在写包扫描了。自带了包扫描的功能。核心在主类上@SpringBootApplication上,它是一个复合注解。里面包含@EnableAutoConfiguration开启自动配置,里面包含@AutoConfigurationPackage。@Import({AutoConfigurationPackages.Registrar.class})需要导入一个自动配置包的类。加载主类所在的包,并按照该包进行扫描。

我们如果不想让他扫描主类所在的包,我们可以使用@CompentScan(basePackages={})来指定自己的包

8. springboot的自动装配原理【了解】

我们原来ssm项目,都需要加载前端控制器DispatcherServlet. 而现在的springboot并没有加载DispatcherServlet。 springboot具备自动装配的功能。

springboot启动时,加载了使用@SpringbootApplication注解的类,该注解是一个符合注解,包含@EnableAutoConfiguration该注解开启了自动装配功能,该注解也是一个符合注解里面包含@Import({AutoConfigurationImportSelector.class}),导入AutoConfigurationImportSelector该类自动装配选择器类,该类会自动加载很多自动装配。每个自动装配会完成对于的自动装配功能

9. springboot整合mybatis

引入依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>3.0.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

配置文件

server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/student
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:mapper/*.xml

实体类

@Data
public class User implements Serializable {
    /**
     * 
     */
    private Integer id;

    /**
     * 
     */
    private String username;

    /**
     * 
     */
    private String password;

    /**
     * 
     */
    private String phone;

    private static final long serialVersionUID = 1L;
}

dao

public interface UserMapper {

    User selectById(Integer id);

    List<User> selectAll();

    int deleteById(Integer id);

    int add(User user);

    int update(User user);
}

映射文件

<?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.ljf.dao.UserMapper">


    <select id="selectById" resultType="com.ljf.domain.User" parameterType="java.lang.Integer">
        select * from user where id=#{id}
    </select>

    <select id="selectAll" resultType="com.ljf.domain.User" >
        select * from user
    </select>

    <update id="update">
        update user
        <set>
            <if test="username != null">username = #{username},</if>
            <if test="password != null">password = #{password},</if>
            <if test="phone != null">phone = #{phone},</if>
        </set>
        where id = #{id}
    </update>

    <delete id="deleteById" >
        delete from user where id=#{id}
    </delete>
    
    <insert id="add">
        insert into user(username, password, phone) values(#{username},#{password},#{phone})
    </insert>
</mapper>

service

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public R selectById(Integer id) {
        User user = userMapper.selectById(id);
        if (user == null){
            return new R(500,"查询失败",null);
        }else {
            return new R(200,"查询成功",user);
        }

    }

    @Override
    public R selectAll() {
        List<User> users = userMapper.selectAll();
        return new R(200,"查询成功",users);
    }

    @Override
    public R deleteById(Integer id) {
       int i = userMapper.deleteById(id);
       if (i>0){
           return new R(200,"查询成功",null);
       }
       return new R(500,"查询失败",null);
    }

    @Override
    public R add(User user) {
        int i = userMapper.add(user);
        if (i>0){
            return new R(200,"查询成功",null);
        }
        return new R(500,"查询失败",null);
    }

    @Override
    public R update(User user) {
        int i = userMapper.update(user);
        if (i>0){
            return new R(200,"查询成功",null);
        }
        return new R(500,"查询失败",null);
    }
}

controller代码

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public R list(){
        return userService.selectAll();
    }

    @GetMapping("/getById")
    public R getById(Integer id){
        return userService.selectById(id);
    }

    @DeleteMapping("/deleteById")
    public R deleteById(Integer id){
        return userService.deleteById(id);
    }

    @PostMapping("/add")
    public R add(@RequestBody User user){
        return userService.add(user);
    }

    @PutMapping("/update")
    public R update(@RequestBody User user){
        return userService.update(user);
    }
}

标签:springboot,配置文件,--,spring,入门,public,user,id,SpringBoot
From: https://blog.csdn.net/As_Yua/article/details/140361382

相关文章

  • 高盛开源的量化金融 Python 库
    GSQuantGSQuant是用于量化金融的Python工具包,建立在世界上最强大的风险转移平台之一之上。旨在加速量化交易策略和风险管理解决方案的开发,凭借25年的全球市场经验精心打造。它由高盛的定量开发人员(定量)创建和维护,以支持交易策略的开发和衍生产品的分析。GSQuant可用于......
  • 状态同步和帧同步原理细节
    状态同步(StateSynchronization)状态同步是一种基于服务器的同步机制,其中服务器周期性地将游戏状态(如玩家位置、物体状态等)发送给客户端,客户端根据接收到的状态进行更新。原理服务器状态更新:服务器持续更新游戏状态,并以固定时间间隔将状态发送给所有客户端。客户端状态接......
  • 国漫推荐06
    1.《一人之下》典型的中国术士风格,前几部尤为有趣。2.《狐妖小红娘》姻缘之前世今生3.《画江湖之不良人》每一季都很棒4.《完美世界》个人感觉优于星辰变5.《星辰变》和斗破苍穹等一样,都是玄幻小说改编6.《炼气十万年》徐老祖nb,很爽,吊打对手7.《少年歌行》策马江湖......
  • Java毕业设计基于Vue+SpringBoot的博物馆展览与服务一体化平台(代码+数据库+文档LW+运
    文末获取资源,收藏关注不迷路文章目录前言主要使用技术研究内容核心代码文章目录前言博物馆展览与服务一体化,其工作流程繁杂、多样、管理复杂与设备维护繁琐。而计算机已完全能够胜任博物馆展览与服务一体化工作,而且更加准确、方便、快捷、高效、清晰、透明,它完全......
  • Java毕业设计基于Vue+SpringBoot的单位公司员工考勤签到系统(代码+数据库+文档LW+运行
    文末获取资源,收藏关注不迷路文章目录前言主要使用技术研究内容核心代码文章目录前言当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生......
  • Java毕业设计基于Vue+SpringBoot的厨房达人美食分享平台(代码+数据库+文档LW+运行成功
    文末获取资源,收藏关注不迷路文章目录前言主要使用技术研究内容核心代码文章目录前言厨房达人美食分享平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与......
  • 国漫推荐08
    仙侠、武侠、恋爱、战斗、现代、古风1.《仙王的日常生活》仙侠、日常、搞笑《仙王的日常生活》第一季《仙王的日常生活第二季》《仙王的日常生活第三季》《仙王的日常生活第四季》2.《风灵玉秀》武侠、少女3.刺客伍六七番名季度上映时间《伍六七》第一季2018-0......
  • 多路复用IO
    简单实现的socket-CSDN博客        在上面的文章中,我们使用socket(创建)、bind(绑定)、listen(监听)、accept(接收)这四个函数,讲了如何利用socket创建一个网络套接字,并在文章结尾实现了一个简单的多进程服务器。多进程服务器:每当有一个新的客户端建立连接,就会创建一......
  • 国漫推荐11
    1.《元龙》2.《恶魔法则》2023年9月29日3.《三十六骑》4.《山河剑心》5.剑网3·侠肝义胆沈剑心《剑网3·侠肝义胆沈剑心》《剑网3·侠肝义胆沈剑心第二季》《剑网3·侠肝义胆沈剑心之长漂》(番外)《剑网3·侠肝义胆沈剑心第三季》6.《仙逆》东方玄幻7.《凡人......
  • 《0基础》轻松学会Python——第五讲
    第五讲一、转义字符(\n,\t,\',\\,\r)    1、\n :表示换行符print('人生若只如初见,何事秋风悲画扇')print('*'*50)print('人生若只如初见,\n何事秋风悲画扇')        2、\t  :制表符,即tab键print('人生而自由,却无往不在枷锁中')print('人生而自由,却无......