SpringBoot简介

SpringBoot

1 SpringBoot 概述

SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

版本锁定

  • 解决是maven依赖版本容易冲突的问题,集合了常用的并且测试过的所有版本

起步依赖

  • 解决了完成某一个功能要整合的jar包过多的问题,集合了常用的jar包,xxxx-starter

自动配置

  • 解决了整合框架或者技术的配置文件过多,集合了所有的约定的默认配置

内置Tomcat

  • 通过内置的tomcat,无需再用其他外置的Tomcat就直接可以运行javaEE程序

总之:人们把Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。

2.SpringBoot 快速入门

需求:浏览器访问http://localhost:8080/hello, 返回hello, springboot! 这句话

开发步骤:

  1. 新建模块

  2. pom.xml导入springboot相关启动依赖

  3. 创建启动类(引导类)

    注意:一定要创建在某个包目录下,不允许创建在根目录

  4. 提供配置文件(缺省)

  5. 实现具体业务功能

2.1 搭建环境

创建springboot-qucik java模块,导入依赖

<!--继承springboot的父工程-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
</parent>

<!--依赖管理-->
<dependencies>
    <!--web环境起步依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

2.2 HelloController


@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        System.out.println("调用服务端,HelloController中hello方法。。。");
        return "hello, springboot!";
    }

    
    @GetMapping("/")
    public String helloWorld(){
        return "index helloWorld";
    }

}

2.3 启动类

@SpringBootApplication  //标识应用为 springboot应用
public class HelloApplication {

    public static void main(String[] args) {
        //运行启动springboot应用 参数一:当前启动类字节码  参数二:可有可无  传入main方法参数
        SpringApplication.run(HelloApplication.class, args);
    }
}

启动测试

在这里插入图片描述

浏览器地址栏输出localhost:8080/hello得到结果如下:
在这里插入图片描述

3.SpringBoot 配置文件

3.1自定义配置文件
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,可以通过在resources下创建文件:

  1. application.yml*
  2. application*.yaml
  3. application*.properties

注意:如果多个配置文件同时配置了相同的内容,SpringBoot以properties(优先级最高)文件为准。

一般建议使用application*.yml

3.2 YAML简介

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 xml、properties 格式方便。
YAML语法

# 严格区分大小写,层级之间使用缩进表示,属性值和冒号之间必须有空格
server:
  port: 8082

YAML数据格式:

# 基本类型,username 和 name 属性比较特殊,不要使用
nickname: lucy

# 对象类型,yml中也支持spel表达式
user:
  username: ${nickname}
  age: 18
  
# 集合类型
addressList:
  - '北京'
  - '上海'
  - '广州'

3.3 读取配置文件
@ConfigurationProperties注解
此注解是Spring Boot框架提供的,用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对应属性中。

在这里插入图片描述
注意:
在这里插入图片描述

@Autowired
private UserProperties userProperties;


/**
 * 从配置文件中获取自定义配置信息:采用@ConfigurationProperties方式读取
 * @return
 */
@GetMapping("/userinfo3")
public String userInfo3(){
    return "姓名:"+userProperties.getNickname() +  ", 年龄:"+userProperties.getAge()+",去过:"+userProperties.getAddressList();
}

3.SpringBoot 整合其他框架

3.1 整合Junit

spring官方提供了junit起步依赖,在pom.xml当中导入即可

<!--引入junit起步依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

在这里插入图片描述

@RunWith(SpringRunner.class)
@SpringBootTest  // 加载 HelloApplication 启动类,初始化环境
public class QuickTest {

    @Autowired
    private UserProperties userProperties;

    @Test
    public void test01() throws Exception {
        System.out.println(userProperties);
    }
}

当测试类所在包,跟启动类 不再同一个包下,测试会出现问题。解决方式为:通过属性指定启动类
在这里插入图片描述

3.2 整合SpringMVC

3.2.1 访问静态资源

现在,我们的项目是一个jar工程,那么就没有webapp,我们的静态资源该放哪里呢?

springboot启动时,加载org.springframework.boot.autoconfigure.web.ResourceProperties资源属性类

在这里插入图片描述
在这里插入图片描述
将一些静态资源: html文件,css样式,js类库,images图片都定义在static文件夹下

3.2.2 拦截器配置

拦截器也是我们经常需要使用的,在SpringBoot中该如何配置呢?
在这里插入图片描述

自定义一个springMVC拦截器类,实现 HandlerInterceptor 接口

@Component
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 定义拦截器逻辑
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入了自定义拦截器:LoginInterceptor");
        return false;
    }
}

自定义一个springMVC的配置类,实现WebMvcConfigurer接口

//配置类
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;

	/**
     * 向SpringMVC中注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {      registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/hello");//排除指定请求

    }
}


测试: /hello 因为被放行 ,请求可正常访问

4.4整合Mybatis Plus

4.4.1 简介

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

那么它是怎么增强的呢?其实就是它已经封装好了单表crud方法,我们不需要再写xml了,直接调用这些方法就行。

官网:https://mybatis.plus/

4.4.2 环境搭建

① 创建java模, 并导入依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bs4v0BmW-1626231926200)(assets/image-20210709151114395.png)]

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--mybatisPlus 起步依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.0</version>
    </dependency>
</dependencies>
② 编写启动类
@SpringBootApplication // 启动类
@MapperScan("com.isben.mapper")
public class MPApp {
    
    public static void main(String[] args) {
        SpringApplication.run(MPApp.class, args);
    }
}
③ application.yml配置文件
# 数据库连接池 HiKariCP
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot_db
    username: 
    password: 


# 开启日志
logging:
  level:
    com.itheima: debug # 日志级别 warn、info、debug

4.4.3 案例练习

需求

完成用户列表查询

① User实体
@Data
@TableName("tb_user") // 指定连接表名
public class User {

    private Long id;
    private String username;
    private String password;
    private String nickName;
    private Integer age;
    private String email;
}
② UserMapper接口
public interface UserMapper extends BaseMapper<User> {
}
④ 单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MPTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test01() throws Exception {
        List<User> list = userMapper.selectList(null);
        list.forEach(user -> {
            System.out.println(user);
        });
    }
}

4.4.4 CRUD

@RunWith(SpringRunner.class)
@SpringBootTest
public class MPTest {

    @Autowired
    private UserMapper userMapper;

    // 查询所有
    @Test
    public void test01() throws Exception {
        List<User> list = userMapper.selectList(null);
        list.forEach(user -> {
            System.out.println(user);
        });
    }

    // 根据id查询
    @Test
    public void test02() throws Exception {
        User user = userMapper.selectById(5L);
        System.out.println(user);
    }

    // 新增
    @Test
    public void test03() throws Exception {
        User user = User.builder()
                .username("haha").password("123654")
                .nickName("哈哈").age(17).email("123@qq.com").build();

        userMapper.insert(user);
    }

    // 修改
    @Test
    public void test04() throws Exception {
        User user = User.builder().username("hehe").id(1336880123013599234L).build();
        userMapper.updateById(user);
    }

    // 删除
    @Test
    public void test05() throws Exception {
        userMapper.deleteById(1336880123013599234L);
    }
}

默认情况下MP产生的主键值过大-,如果数据库主键字段设置的位数较小,可以配置文件application中配置mybatisPLus 主键策略为 数据自增

mybatis-plus:
  global-config:
    db-config:
      id-type: auto #主键策略 数据库ID自增

4.4.5 条件查询

官网QueryWrapper用于生成 sql 的 where 条件

查询方法说明
eq等于=
ne不等与<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
between区间查询 数字 日期
/**
 * 条件查询:
 * 1.查询年龄在18-23之间
 */
@Test
public void test06(){
    //参数Wrapper  实体对象(ORM)封装操作类  - 通过java代码设置生成的sql语句
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //查询条件1 查询年龄在18-23之间 参数为字段名称
    queryWrapper.between("age", 18, 23);
    //查询条件2:查询姓张的用户信息
    //queryWrapper.like("nick_name", "张");
    //排序字段
    queryWrapper.orderByDesc("age");

    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

4.4.6 分页查询

分页查询,需要在mybatis中引入pageHelper插件,现在MP内置分页插件

第一步:给MP开启分页插件功能


@Configuration
public class MybatisPlusConfig {

    // 最新版 配置分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }

}

第二步:代码查询时,可以使用分页

/**
 * 分页查询:
 */
@Test
public void test07() {
    //参数一:分页信息封装分页信息(当前页码,页大小)  参数二:封装查询条件
    IPage<User> page = new Page<User>(1, 3);

    //增加条件
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.ge("age", 19);


    page = userMapper.selectPage(page, queryWrapper);
    System.out.println("总记录数:"+page.getTotal());
    System.out.println("总页数:"+page.getPages());
    System.out.println("当前页数据:"+page.getRecords());
}

SpringBoot热部署

在开发过程中,通常会对一段业务代码不断地修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作极大的降低了程序开发效率。为此,Spring Boot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目

  1. pom.xml
<!-- 引入热部署依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
</dependency>
  1. 选择IDEA工具界面的【File】->【Settings】选项,打开Compiler面板设置页面

在这里插入图片描述
3.在项目任意页面中使用组合快捷键“Ctrl+Shift+Alt+/”打开Maintenance选项框,选中并打开Registry
在这里插入图片描述
4.找到“compiler.automake.allow.when.app.running”,将该选项后的Value值勾选
在这里插入图片描述
5.执行快捷键 ctrl+shift+f9刷新资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值