欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-15 21:01:57
报错...

 

 

创建springboot报错

 

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

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

解决方法

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

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

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

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

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

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

 

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

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

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

 

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

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

maven原本下载位置

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

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

 

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

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!";
    }
}

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

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

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

成功显示在浏览器

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

SpringBoot目录结构

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

 

 

 

SpringBoot三种启动方式

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

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

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

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

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

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

浏览器访问就可以了

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

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

ctrl+cc  停掉maven

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

3.采用jar包的方式运行

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

mvn clean package

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

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

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

解决之后如下

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

target下面出现jar包

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

通过java-jar jar文件

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

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

启动成功

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

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文件了

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

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

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

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

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

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

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的设置

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

然后重启,使依赖生效

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

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

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

 

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

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

问题maven引入配置出现红色

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

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

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

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

五 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>

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

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

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>

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

2.编写配置文件

2.1.准备实体类

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

idea连接mysql

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

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

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

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

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

下载失败

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

使用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

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

本地maven库就有了

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

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

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

有报错, 5.1不支持5.7.25

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

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

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

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

提示成功->ok

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

连接后不显示库和表

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

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

勾选就可以显示了

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

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

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

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

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

修改实体类

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

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

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">

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

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)

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

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

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

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);
        }
    }
}

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

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语句

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

日志中看不到执行的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);
    }
}

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

5.3 SpringBoot整合分页助手

1.导入依赖

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

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

<!-- 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);
        }
    }

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

 

 

 

 

 

 

 

 

 

 

 

本文地址:https://blog.csdn.net/qq_42058441/article/details/109170600

相关标签: java Java整理