SpringBoot教程,新建第一个SpringBoot教程

 

 

创建springboot报错

 

Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings. Error message: connect timed out

解决方法

https://blog.csdn.net/qq_42815122/article/details/85551956

我的电脑输入: http://start.spring.io 是可以的

或者都设置成http://start.springboot.io/也不行

于是用下面的方法,是可以的

 

问题2:idea右击新建文件找不到java class

解决:https://blog.csdn.net/qq_28289405/article/details/80760223

 

问题3.如法导入@RestController, 因为maven没有安装好,安装好就可以了,这个过程很漫长,建议先配置好maven,改成在阿里云下载

maven原本下载位置

 

输入代码测试是否可以运行

package com.qf.firstspringboot.controller;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @GetMapping("/test")
    public String test(){
        return "Hello SpringBoot!";
    }
}

找到默认创建的启动类文件,运行main方法,然后到浏览器输入http://localhost:8080/test

成功显示在浏览器

SpringBoot目录结构

 

 

 

SpringBoot三种启动方式

1.运行启动类的main方法即可运行SpringBoot工程

2.采用maven的命令去运行SpringBoot工程

前提: 打开terminal, 然后输入mvn -v, 如果配置好maven环境变量,可以看到maven信息就可以运行否则就不能

配置好后直接输入: mvn spring-boot:run

浏览器访问就可以了

ctrl+cc  停掉maven

3.采用jar包的方式运行

将当前项目打包成一个jar文件

mvn clean package

打包出现报错, 原因我改了本地仓库,从原来的的.md的下面考了一部分文件到新的本地仓库,由于jar包冲突或者其他的

把默认中央仓库在C盘.m2中repository文件下的全部都考到新的本地仓库中,然后打包就可以

解决之后如下

target下面出现jar包

通过java-jar jar文件

把jar包拖到桌面, 打开我的电脑粘贴回车 C:\Users\HP\Desktop,然后cmd 回车, 然后输入: java -jar .\first-springboot-0.0.1-SNAPSHOT.jar, 回车

启动成功

springboot内置了Tomcat,不需要容器也可以启动成功

 

三 SpringBoot常用注解

3.1@Configuration和@Bean

之前使用SSM去开发时, 在xml文件中编写bean标签.

但是SpringBoot不推荐使用xml文件.

@Configuration注解相当于beans标签

@Bean注解相当于bean标签

  id="方法名|注解中的name属性(优先级更高)"

  class="方法的返回结果"

@Configuration  //代表当前类是一个配置类
public class UserConfig {

    @Bean(name = "user1")   //构建一个实例,放到spring容器中
    public User user(){
        User user=new User();
        user.setId(1);
        user.setName("张三");
        return user;
    }

    /*
    <beans...>      @Configuration
        <bean id="user1" class="com.qf.firstspringboot.entity.User"/>
    </beans
    */
}

3.2 @SpringBootApplication 启动类中注解

1.@SpringBootConfiguration就是@Configuration注解, 代表启动类就是一个配置类

2.@EnableAutoConfiguration帮你实现自动装配的, SpringBoot工程启动时, 运行一个SpringFactoriesLoader的类, 加载META-INF/spring.factories配置类(已经开启的), 通过SpringFactoriesLoader方法, 一for循环的方式, 一个一个加载

好处: 无序编写大量的整合配置信息, 只需要安装SpringBoot提供好了约定去整合即可.

坏处: 如果说你导入了一个starter依赖, 那么你就需要填写他必要的配置信息.

手动关闭自动装配指定内容: @SpringBootApplication(exclude=QuartzAutoConfiguration.class)

3.@ComponenScan就相当于<context:component-scan basePackage="包名"/>, 帮助扫描注解的. 扫描当前启动类下的,其他包下无法扫描

如果要扫描其他包,需要引入其他包名@ComponentScan(basePackages="com.qf.xxx")

四 SpringBoot常用配置

4.1SpringBoot的配置文件格式

SpringBoot的配置文件支持properties和yml, 甚至他还支持json.

更推荐使用yml文件格式

  1.yml文件, 会根据换行和缩进帮助我们管理配置文件所在位置

  2.yml文件, 相比proerties更轻量一些

yml文件的劣势:

  1.样遵循换行和缩进

  2.在填写value时, 一定要在:后面加上空格

4.2多环境配置yml

在application文件中添加一个配置项:

#下面2个都不会去运行,只会运行application.yml的文件, 这个文件可以指定使用下面那一个文件
spring:
  profiles:
    #使用dev的文件
    active: 环境名

在resource目录下, 创建多个application-环境名.yml文件即可

在部署工程时, 通过Java -jar文件 --spring.profiles=环境

配置后不起作用

我一直把active: 后面写成了dev所以不起作用, 报404错误, 加上-dev就可以了, 这个加-dev是不正确的,加了就不是运行application-dev.yml文件了

一直报错是因为, 在地址栏中直接输入了http://localhost:8080/test

应该是http://localhost:8080/boot/test 才可以访问

4.3引入外部配置文件信息

和传统的SSM方式一样,通过@Value的注解去获取properties/yml文件中的内容

如果在yml文件中需要编写大量的自定义配置, 并且具有统一的前缀时, 采用如下方式

@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
    //属性名映射成配置文件的后缀
    //@Data就是为每个属性提供了get和set方法,不用自己写get和set了
    private String xxxx;
    private String yyyy;
    private String zzzz;
    private String aaaa;
    private String bbbb;
}

yml文件中

#拿到全部以aliyun开头的自定义配置信息, 如果使用之前的@value注解需要些4个, 使用一次性接收多个的方式
#创建一个包properties,创建一个AliyunProperties类, 然后在TestController中获取
aliyun:
  xxxx: xxxxxxxxx
  yyyy: yyyyyy
  zzzz: zzzzzzz
  aaaa: aaaaaa
  bbbb: bbbbbb

如果爆红pom加下面依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

4.4热加载

避免重启项目, 修改代码直接执行

1. pom.xml加入依赖

<!--热加载,true启动-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

2.修改idea里Settings的设置

然后重启,使依赖生效

3. 修改内容然后通过Build重新构建工程, 然后看下面的控制台是否成功, 然后刷新网页

 

遇到的问题SpringBoot中用@Value读取yml中的值报错

多模块下yml文件读取问题Could not resolve placeholder xxx value '${xxx}'

问题maven引入配置出现红色

解决方式, 在pom.xml文件中有一个m刷新图标,点一下,等一段时间反应一下就不报红了

五 SpringBoot整合Mybatis

1. 导入依赖, 在pom.xml内加入

1.1mysql驱动

<!--mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

1.2druid连接池,到maven中https://mvnrepository.com/搜索

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

1.3mybatis, 到maven中https://mvnrepository.com/搜索, 找依赖次数最多的

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

2.编写配置文件

2.1.准备实体类

先添加mysql数据库,数据表,数据

idea连接mysql

连接失败, 因为本地的mysql是5.7版本,所以连接的 driver版本需要是 5.x 的版本

换成mysql5.1版本驱动; 测试连接提示缺少驱动, 点击下载即可

下载失败

使用maven手动下载一个mysql包

参考地址: https://blog.csdn.net/fan521dan/article/details/104902294/

https://blog.csdn.net/qq_44813077/article/details/107081001

https://blog.csdn.net/qq_42542609/article/details/105360459

本地maven库就有了

之前是红色的点击, 这个地方可以下载成功

有报错, 5.1不支持5.7.25

换成musql后显示时区报错, 选中utc这一行时区,->apply

提示成功->ok

连接后不显示库和表

解决地址: https://blog.csdn.net/weixin_44195615/article/details/107357143

勾选就可以显示了

选中2张表,右键直接生成实体类, 选中生成到那个目录下->点击ok

修改实体类

2.2准备Mapper接口

package com.qf.firstspringboot.mapper;

import com.qf.firstspringboot.entity.Air;

import java.util.List;

public interface AirMapper {
    //返回全部数据, 需要在启动类中加上一个扫描的mybatis的注解,@MapperScan(basePackages = "com.qf.firstspringboot.mapper")
    List<Air> findAll();
}

启动类中添加注解, 扫描mapper接口所在的包
@MapperScan(basePackages = "com.qf.firstspringboot.mapper")//扫描mybatis的接口

2.3准备映射文件

准备映射文件AirMapper.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.qf.firstspringboot.mapper.AirMapper">
    <!--        List<Air> findAll();-->
    <select id="findAll" resultType="Air">
        select * from air
    </select>
</mapper>

需要有东西扫描映射文件


<!-- 添加yml文件配置信息 -->
#mybatis配置
#mapper-locations: 扫描映射文件
#type-aliases-package: 配置别名扫描的包
#map-underscore-to-camel-case: 开启驼峰映射配置
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.qf.firstspringboot.entity
  configuration:
    map-underscore-to-camel-case: true

百度搜索: mybatis映射文件约束

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

2.3指定连接数据库的信息

# 连接数据库的信息
# driver-class-name: 连接池
# type: 使用德鲁伊数据源
# ?serverTimezone=UTC 指定时区,东八区, 是idea自动使用的mysql8.0
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url:  jdbc:mysql:///air?serverTimezone=UTC  #或者jdbc:mysql://127.0.0.1:3306/air
    username: root
    password: 1234
    type: com.alibaba.druid.pool.DruidDataSource

3.测试

在mapper接口的位置直接右键->goto-Test

自动创建当前接口的测试类, 在test目录下

让当前测试类, 继承FirstSpringbootApplicationTests测试类.(在class前添加public)

package com.qf.firstspringboot.mapper;

import com.qf.firstspringboot.FirstSpringbootApplicationTests;
import com.qf.firstspringboot.entity.Air;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;


class AirMapperTest extends FirstSpringbootApplicationTests {

    //自动注入
    @Autowired
    private AirMapper airMapper;

    @Test
    void findAll() {
        List<Air> list=airMapper.findAll();
        for(Air air: list){
            System.out.println(air);
        }
    }
}

5.2注解整合mybatis  (简单的sql语句可以,复杂的需要是xml)

1.创建District的Mapper接口

package com.qf.firstspringboot.mapper;

import com.qf.firstspringboot.entity.District;

import java.util.List;

public interface DistirctMapper {
    List<District> findAll();
}

2.添加mybatis注解

针对增删改查: @Insert, @Delete, @Update, @Select

还是需要在启动类中添加@MapperScan注解,(用于扫描接口,  不需要管xml,因为这个没有xml)


<!-- 添加yml文件配置信息 -->
#mybatis配置
#map-underscore-to-camel-case: 开启驼峰映射配置
mybatis:
  configuration:
    map-underscore-to-camel-case: true
package com.qf.firstspringboot.mapper;

import com.qf.firstspringboot.entity.District;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface DistirctMapper {

    @Select("select * from district")
    List<District> findAll();

    @Select("select * from district where id=#{id}")
    District findOneById(@Param("id") Integer id);
}

3.测试, 看到执行的sql语句

日志中看不到执行的sql, 在yml中添加配置

# 查看sql语句
# com.qf.firstspringboot.mapper:  哪个包下的
logging:
  level:
    com.qf.firstspringboot.mapper:  debug
package com.qf.firstspringboot.mapper;

import com.qf.firstspringboot.FirstSpringbootApplicationTests;
import com.qf.firstspringboot.entity.District;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

class DistirctMapperTest extends FirstSpringbootApplicationTests {

    @Autowired
    private DistirctMapper mapper;

    @Test
    void findAll() {
        List<District> list= mapper.findAll();
        for (District district:list){
            System.out.println(district);
        }
    }

    @Test
    void findOneById() {
        District district=mapper.findOneById(5);
        System.out.println(district);
    }
}

5.3 SpringBoot整合分页助手

1.导入依赖

maven中https://mvnrepository.com/搜索 pagehelper依赖

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>
 

2.测试使用

//测试分页助手
    @Test
    public void findByPage(){
        //1.执行分页
        PageHelper.startPage(1,2);//直接输入1,2
        //2.执行查询
        List<Air> list=airMapper.findAll();
        //3.封装PageInfo对象
        PageInfo<Air> pageInfo=new PageInfo<>(list);
        //4.输出
        for(Air air : pageInfo.getList()){
            System.out.println(air);
        }
    }

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值