SpringBoot入门及整合其他技术

内容包括介绍SpringBoot和整合其他技术,例如Mybatis、Redis、定时任务、Thymleaf等
只看SSM整合的请直接看 六、Springboot整合mybatis(详细图文步骤搭建)

一、什么是SpringBoot

SpringBoot是基于Spring Framwor5.0开发的项目.目的是快速开发、减少配置;

特点:

①快速开发

②零配置,遵守约定大于配置(例如tomcat的端口:8080;这种类似配置,会被自动配置)

③集成第三方库配置,开箱即用;

④提供大型项目非功能特征;嵌入服务器,不需要配置tomcat或maven的tomcat插件

二、SpringBoot核心功能

spingboot不是什么新框架,只是一些库的集合;以前我们开发项目不可避免的步骤:导入依赖;配置spring相关文件,现在都由SpringBoot自动完成;我们只需要完成核心代码编写即可.

  • 起步依赖

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

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

我们创建的所有工程都是需要继承父工程spring-boot-starter-parent;源码中我们可以看到通过spring-boot-starter-dependencies的pom.xml中我们发现,一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了(不会出现版本冲突的问题)。所以起步依赖的作用就是进行依赖的传递。

<parent>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>
  • 自动配置

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

我们打印以下配置类

在这里插入图片描述

通过答应springboot的启动类可以看出他帮我已经加载了像DispatcherServlet这样的类;所以我们之前配置的spring相关类.例如核心控制器,编码过滤器,等都已经自动配置了;原理就是通过引导类的注解SpringBootApplication中的EnableAutoConfiguration做到的;他通过classpath:/META-INF/spring.factories已经自动配置好了.如果要自己添加或者更改,需要再resources下添加一个META-INF/spring.factories进行配置

三、SpringBoot引导类

// 声明该类是一个SpringBoot引导类
@SpringBootApplication
public class MySpringBootApplication {
    // main是java程序的入口
    public static void main(String[] args) {
        // run方法 表示运行SpringBoot的引导类 run参数就是SpringBoot引导类的字节码对象
        SpringApplication.run(MySpringBootApplication.class,args);
    }
}

Ctrl+鼠标左键点@SpringBootApplication;进入引导类;其中三个关键注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

@ComponentScan 扫描当前包及其子包下被 @Component@Controller@Service@Repository注解标记的类并纳入到spring容器中进行管理,所以这个注解会自动注入所有在主程序所在包下的组件。默认把当前启动类所在的包作为扫描包的起点,

@SpringBootConfiguration 表示当前类具有配置类的作用

@EnableAutoConfiguration(最重要)

自动配置:根据当前引入的依赖包,猜测需要创建的工程类型,以及工程中有可能创建的对象,根据猜测自动创建工程所需的相关实例bean;;程序启动,会自动加载扫描所有 classpath:/META-INF/spring.factories文件 ,并且创建对应实例

四、SpringBoot的配置文件

有application.propertie、application.yaml和application.yml(推荐使用);如下格式;以’:'分割并且带有空格

mybatis:
  type-aliases-package: com.atguigu.domain # 指定mybatis别名包
  mapper-locations: classpath:com/atguigu/dao/*.xml # 指定xml映射文件路径
logging:
  level:
    com.atguigu.dao: debug # 配置日志
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8
    driver-class-name: com.mysql.jdbc.Driver
server:
  port: 18081

五、SpringBoot整合Juint

导入依赖

<!--测试的起步依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

在测试类上面添加注解即可(@SrpingBootTets替代了之前spring测试类@ContextConfiguration(locations = “classpath:applicationContext.xml”))

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

六、Springboot整合mybatis

详细搭建流程如下
①创建普通maven项目
(可以用spring引导项目,可以不用导入依赖,但是版本不能控制,开发中推荐使用maven工程)
在这里插入图片描述
②配置项目名和路径
在这里插入图片描述
③导入依赖pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <!--SpingBoot集成junit测试的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mybatis起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

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

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

④搭建项目框架并在application.yml 添加配置
在这里插入图片描述
application.yml文件了类容附上(数据库用户名和密码用自己的)

mybatis:
  type-aliases-package: com.atguigu.domain # 指定mybatis别名包
  mapper-locations: classpath:com/atguigu/dao/*.xml # 指定xml映射文件路径
logging:
  level:
    com.atguigu.dao: debug # 配置日志
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8
    driver-class-name: com.mysql.jdbc.Driver
server:
  port: 18081

⑤给出各个类的代码
User 类

package com.zhao.bean;

import java.io.Serializable;

/**
 * @author zhao
 * @date 2021/3/26
 * @desc
 */
public class User implements Serializable {
    private Long id;
    private String username;
    private String password;
    private String name;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                '}';
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

UserController 类

package com.zhao.controller;

import com.zhao.bean.User;
import com.zhao.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author zhao
 * @date 2021/3/26
 * @desc
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public List<User> getAll(){
        return userService.getAll();
    }
}


UserDao 类

package com.zhao.dao;

import com.zhao.bean.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserDao {
    List<User> getAll();
}

UserService 类

package com.zhao.service;



import com.zhao.bean.User;

import java.util.List;

public interface UserService {
    List<User> getAll();
}

UserServiceImpl 类

package com.zhao.service.impl;

import com.zhao.bean.User;
import com.zhao.dao.UserDao;
import com.zhao.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhao
 * @date 2021/3/26
 * @desc
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;		//爆红没有关系
    @Override
    public List<User> getAll() {
        return userDao.getAll();
    }
}

Application 启动类

package com.zhao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author zhao
 * @date 2021/3/26
 * @desc
 */
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

UserDao.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.atguigu.dao.UserDao">

    <select id="getAll" resultType="com.zhao.bean.User">
        select * from user
    </select>

</mapper>

七、SpringBoot整合Redis

在项目中添加redis依赖

<!-- 配置使用redis启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在application.yml中添加redis的配置

spring:
  redis: #Redis
    port: 6379
    host: 127.0.0.1

通过注入RedisTemplate调用

boundValueOps(key).get() 根据"key"取值;

boundValueOps(key).set(val) 根据val给key赋值

八、SpringBoot整合定时任务

添加依赖

<!-- 添加 Scheduled 坐标 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>

在SpringBoot的引导类上面添加@EnableScheduling注解

@SpringBootApplication
@EnableScheduling		//这里
public class BootApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootApplication.class, args);
    }
}

在编写的类上面添加注解@Scheduled(),其中有三个属性,值都为毫秒单位

cron: 和石英表达式类似 0/3 * * * * * 表示3秒执行一次

fixedDelay: 距离上一次定时任务执行完毕后N毫秒在执行,

fixedRate: 执行周期,执行频率;定时任务执行开始,在过N毫秒后执行

@Scheduled(fixedDelay = 3000)
    public void myTask() {	...}

九、SpringBoot整合Spring data jpa

导入依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- springBoot JPA的起步依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

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

       

        <!-- 配置使用redis启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>


    </dependencies>

配置yml

logging:
  level:
    com.atguigu.dao: debug # 配置日志
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    database: mysql
    show-sql: true
    generate-ddl: true
    hibernate:
      ddl-auto: update
      naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
server:
  port: 18081

代码和整合spring整合jpa一样.

十、SpringBoot整合Thymeleaf

Thymeleaf是完全替代jsp的模板引擎,是官方推荐使用的(就像内置tomcat,gson,log4f这些一样,不用额外配置拆箱即用).注意所有html的页面需要放到resources下面的templates文件中(很重要,没有自己创建)

依赖和一般SpringBoot一样,无需添加其他;在Html页面中要引入Thymeleaf的标签;放在就行;

<!--这句声明使用thymeleaf标签-->
<html xmlns:th="http://www.thymeleaf.org">

常用取值方法;在标签中通过th:方法取值

<!--1.通过String取值-->
<p th:text="${hello}"></p>	

<!--2.表单提交-->
<form id="login-form" th:action="@{/test/hello}">
    <button>提交</button>
</form>

<!--3.通过each遍历list取值-->
<tr th:each="user,userStat:${users}">
        <td>
            下标:<span th:text="${userStat.index}"></span>,
        </td>
        <td th:text="${user.id}"></td>
        <td th:text="${user.name}"></td>
        <td th:text="${user.address}"></td>
</tr>

<!--4.通过each遍历map取值/或通过key取值-->
<div>
      获取Key=NO的值:<span th:text="${dataMap.No}"></span><br/>
      获取key=address的值:<span th:text="${dataMap.address}"></span> <br/>
</div>
<div th:each="map:${dataMap}">
 	<span th:text="${map.key}"></span>:<span th:text="${map.value}"></span>
</div>

<!--5.格式化后台传过来的new Date()-->
<span th:text="${#dates.format(now,'yyyy-MM-dd HH:mm:ss')}"></span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值