SpringBoot

A.SpringBoot快速入门以及简介

1.为什么需要使用SpringBoot框架

SSM框架 Spring + SpringMVC + Mybatis,通过XML方式配置

SpringBoot快速开发框架,能够帮助我们程序员快速整合第三方框架

能够帮助我们程序员快速整合第三方框架原理封装Maven依赖方式实现

SpringBoot特性:

  • 去除XML配置
  • 全部采用注解化的方式配置
  • 内嵌入Tomcat
  • 能够帮助程序员快速开发
  • SpringBoot框架默认的情况下spring-boot-starter-web已经帮助我们整合好SpringMVC框架

2.SpringBoot和SpringCloud的区别

  • SpringCloud是微服务解决框架,提供微服务技术解决方案。
  • SpringCloud RPC远程调用接口 feign客户端
  • 接口的协议采用Http协议
  • SpringCloud依赖于SpringBoot默认的情况下已经整合好SpringMVC,所以SpringCloud可以使用SpringMVC编写接口

补充:建包的区别

eg:com.dsa.controller和com.dsa.service

com.dsa.controller:含有视图层(web)和接口(业务逻辑)

com.dsa.service:只含有接口

3.SpringBoot依赖引入介绍

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE </version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies> 
spring-boot-starter-parent作用:
	在pom.xml中引入spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供dependency management,也就是说依赖管理,引入以后在申明其它dependency的时候就不需要version了,后面可以看到。
spring-boot-starter-web作用:
	引入很多Spring系列的依赖,包括内嵌Tomcat的依赖
springweb 核心组件

4.RestController注解(和Controller注解作比较)

@RestController

  • 如果在类上加上@RestController,该类中所有SpringMVCUrl接口映射都是返回JSON格式
  • 相当于在每个方法上加上@ResponseBody注解,返回JSON格式
  • @RestController是我们SpirngMVC提供的,而不是SpringBoot提供的
  • Rest,微服务接口开发中Rest风格,数据传输格式json格式,协议为Http协议

@Controller

  • 控制层注解,SpringMVCUrl接口映射,默认的情况下返回页面跳转,如果需要返回json格式的情况下需要@ResponseBody注解

5.SpringBoot启动方式(有三种方式)

启动方式一:1.@EnableAutoConfiguration 注解 + SpringApplication.run(HelloController.class,args)

@EnableAutoConfiguration注解:

作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置
这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。

@RestController
@EnableAutoConfiguration
public class HelloController {
	@RequestMapping("/hello")
	public String index() {
		return "Hello World";
	}	
public static void main(String[] args) {
		SpringApplication.run(HelloController.class, args);
	}
}

启动方式二:@ComponentScan(basePackages = “com.dsa.controller”)—控制器扫包范围

@ComponentScan(basePackages = "com.dsa.controller")
@EnableAutoConfiguration
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

启动方式三:@SpringBootApplication

@SpringBootApplication 被 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 注解所组合,换言之 Springboot 提供了统一的注解来替代以上三个注解

扫包范围:在启动类上加上@SpringBootApplication注解,当前包下或者子包下所有的类都可以扫到。(同一个包下的类或者是子包下的类都会被扫描到)

6.SpringBoot简介

回顾什么是Spring
Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。

Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。

Spring是如何简化Java开发的
为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;

2、通过IOC,依赖注入(DI)和面向接口实现松耦合;

3、基于切面(AOP)和惯例进行声明式编程;

4、通过切面和模版减少样式代码,RedisTemplate,xxxTemplate;

什么是SpringBoot
学过javaweb的同学就知道,开发一个web应用,从最初开始接触Servlet结合Tomcat, 跑出一个Hello Wolrld程序,是要经历特别多的步骤;后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过一两年又会有其他web框架出现;你们有经历过框架不断的演进,然后自己开发项目所有的技术也在不断的变化、改造吗?建议都可以去经历一遍;

言归正传,什么是SpringBoot呢,就是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置, you can “just run”,能迅速的开发web应用,几行代码开发一个http接口。

所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景 衍生 一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点;发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案。

是的这就是Java企业级应用->J2EE->spring->springboot的过程。

随着 Spring 不断的发展,涉及的领域越来越多,项目整合开发需要配合各种各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置地狱。Spring Boot 正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用 Spring 、更容易的集成各种常用的中间件、开源软件;

Spring Boot 基于 Spring 开发,Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。

简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。

Spring Boot 出生名门,从一开始就站在一个比较高的起点,又经过这几年的发展,生态足够完善,Spring Boot 已经当之无愧成为 Java 领域最热门的技术。

Spring Boot的主要优点:

为所有Spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求
真的很爽,我们快速去体验开发个接口的感觉吧!

B.SpringBoot整合Web开发

1.SpringBoot整合静态资源访问

我们在开发Web应用的时候,需要引入大量的JS、CSS、图片等静态资源

Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

/static

/public

/resources

/META-INF/resources

举例:我们可以在src/main/resources/目录下创建static,然后在static下放置一张图片文件,然后启动层序,尝试访问http://localhost:8080/D.jpg,如果能访问成功,则说明配置成功!(如果不在resources目录下创建static,然后把图片放在static下,则访问图片失败!)

微服务项目

前后端分离思想

  • 前端–vue–前端工程师(前端交给专业的人来做(前端工程师))
  • 后端–SpringBoot–后端工程师(后端工程师负责写接口就可以了)

动静分离思想

我们不可能将所有的静态资源都放在我们的项目上,应该部署在cdn

cdn作用:减少带宽距离传输,减少自己服务器带宽。

2.yml与Properties格式的区别

读取本地配置文件可以使用@value注解

@Value("${CodePeng.name}")//配置文件里的CodePeng.name
private String name;

SpringBoot支持两种配置方式,一种是properties文件,一种是yml

使用yml可以减少配置文件的重复性

例如:application.properties

例如:application.yml

properties格式如下:
	CodePeng.name = 机车
	CodePeng.age = 99

yml格式如下:
	CodePeng:
		name: 机车//冒号后面有个空格(切记)没有空格的话IDEA会检测到配置文件有错误
		age: 99//冒号后面有个空格(切记)没有空格的话IDEA会检测到配置文件有错误

3.模板引擎框架

前后端

渲染Web页面

在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象。那么如果需要渲染html页面的时候,要如何实现呢?

模板引擎 能够非常好的帮助seo搜索到该网页

在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。

Spring Boot提供了默认配置的模板引擎主要有以下几种:

  • Thymeleaf

  • FreeMarker

  • Velocity

  • Groovy

  • Mustache

Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置

当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。

4.使用Freemarker模板引擎渲染web视图

1.pom文件引入

<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2.后台代码

@Controller
public class freeMarkerController{
	@RequestMapping("/freemarkerIndex")
	public String freeMarkerIndex(Map<String,String> m){
		//转发到页面数据name
		m.put("name","freeMarkerIndex");
		//mvc跳转页面freemarkerIndex.ftl
		return "freemarkerIndex";
	}
}

3.前台代码(在src/main/resources/创建一个templates文件夹,后缀为.ftl*)

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
	  ${name}
</body> 
</html>

5.ftl模板引擎条件判断用法(SpringBoot整合FreeMarker配置)

1.新建application.yml文件

spring:
  http:
    encoding:
      force: true
      ### 模版引擎编码为UTF-8
      charset: UTF-8
  freemarker:
    allow-request-override: false
    cache: false
    check-template-location: true
    charset: UTF-8
    content-type: text/html; charset=utf-8
    expose-request-attributes: false
    expose-session-attributes: false
    expose-spring-macro-helpers: false
    ## 模版文件结尾.ftl
    suffix: .ftl
    ## 模版文件目录
    template-loader-path: classpath:/templates

2.后台代码

@RequestMapping("/freemarkerIndex")
	public String index(Map<String, Object> result) {
		result.put("name", "yushengjun");
		result.put("sex", "0");
		List<String> listResult = new ArrayList<String>();
		listResult.add("zhangsan");
		listResult.add("lisi");
		listResult.add("mayikt");
		result.put("listResult", listResult);
		return "index";
	}

3.前台代码(ftl模板引擎判断)

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title>首页</title>
</head>
<body>
	  ${name}
<#if sex=="1">
            男
      <#elseif sex=="2">
            女
     <#else>
        其他      
	  
</#if>	  
	 <#list userlist as user>
	   ${user}
	 </#list>
</body> 
</html>
    
    
两种方法 
1 用符号代替: > gt , >=  gte  ,< lt  , <= lte
2 加括号 <#if(x>y)>

6.使用thymeleaf渲染Web页面

1.什么是thymeleaf

thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎,类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。

2.导入thymeleaf依赖

<!--引入thymeleaf的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.新建application.yml文件(SpringBoot整合thymeleaf)

###ThymeLeaf配置
spring:
  thymeleaf:
    #prefix:指定模板所在的目录
    prefix: classpath:/templates/
    #check-tempate-location: 检查模板路径是否存在
    check-template-location: true
    #cache: 是否缓存,开发模式下设置为false,避免改了模板还要重启服务器,线上设置为true,可以提高性能。
    cache: true
    suffix:  .html
    encoding: UTF-8
    mode: HTML5

4.后台代码

import com.mayikt.entity.UserEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
public class IndexController {
    @RequestMapping("/myThymeleaf")
    public String myThymeleaf(Map<String, Object> result) {
        result.put("user", new UserEntity("mayikt", 22));
        return "myThymeleaf";
    }
}

5.实体类

public class UserEntity {
    private String userName;
    private Integer age;

    public UserEntity(String userName, Integer age) {
        this.userName = userName;
        this.age = age;
    }

    public String getUserName() {
        return userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

6.前台代码

<!DOCTYPE html>
<!--需要在HTML文件中加入以下语句: -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Show User</title>
</head>
<body>
<table>
    姓名:<span th:text="${user.userName}"></span>
    年龄:<span th:text="${user.age}"></span>
</table>
</body>
</html>

C.数据库访问

1.SpringBoot整合使用JdbcTemplate

1.pom文件引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

2.application.yml新增配置

 datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

3.UserService类

@RestController
public class UserService(){

	@AutoWired
	private jdbcTemplate jdbcTemplate;

	//插入数据到User表中
	@RequestMpping("/insertUser")
	public String insertUser(String userName,Integer age){
		int update = jdbcTemplate.update("insert into user values(null,?,?),userName,age");
		return update>0?"success":"fail";
	}
}

4.启动类

@SpringBootApplication
public class App(){
	public static void main(String[] args){
		SpringApplication.run(App.class);
	}
}

5.数据库表结构

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT '用户名称',
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

2.SpringBoot整合Mybatis

1.pom文件引入

<!-- springboot 整合mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

2.application.yml引入

datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

3.Mapper代码(先创建一个Mapper包,里面放Mapper代码)

public interface UserMapper {
	@Select("SELECT * FROM USERS WHERE NAME = #{name}")
	User findByName(@Param("name") String name);
	@Insert("INSERT INTO USERS(NAME, AGE) VALUES(#{name}, #{age})")
	int insert(@Param("name") String name, @Param("age") Integer age);
}

4.实体类

public class UserEntity {
    private String userName;
    private Integer age;

    public UserEntity(String userName, Integer age) {
        this.userName = userName;
        this.age = age;
    }

    public String getUserName() {
        return userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

5.启动方式(@MapperScan注解

@SpringBootApplication
@MapperScan("com.mayikt.mapper")
public class AppMybatis {
    public static void main(String[] args) {
        SpringApplication.run(AppMybatis.class);
    }
}

6.后台代码

//Mybatis查询
@RequestMpping("/mybatisFindById")
public userEntity mybatisFindById(Integer id){
	return userMapping.selectByUserId(Id);
}

D.整合热部署框架

1.整合devtools框架

1.什么是热部署?

修改java类或页面或者静态文件,不需要手动重启

原理:类加载器

适合于本地开发

2.导入Maven依赖(devtools依赖)

<!--SpringBoot热部署配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

3.Idea工具设置(热部署设置)

(1)“File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project automatically” 。

在这里插入图片描述

(2) 组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running”

在这里插入图片描述

(3)idea配置完成后,然后按住保存键,保存完后自动实现重启

2.SpringBoot集成lombok插件

1.需要在idea中安装lombok插件

在这里插入图片描述

2.搜索lombok插件即可

在这里插入图片描述

3.安装完lombok插件后点击重启idea即可

4.整合lombok插件的注意事件

  • 需要在idea中安装lombok插件,如果只是在pom文件中加入了lombok依赖而已的话,等你加上注解的话,根本没有生成get和set方法
  • 引入lombok依赖

5.lombok原理

实际上在开发写代码的时候是不需要写get和set方法的,但是在编译class文件的时候,它会自动帮你生成get和set方法的,然后放入到class文件中

6.添加lombok依赖

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

7.实体类展示

@Slf4j
@Data
public class UserEntity {
	// @Getter
	// @Setter
	private String userName;
	// @Getter
	// @Setter
	private Integer age;

	@Override
	public String toString() {
		return "UserEntity [userName=" + userName + ", age=" + age + "]";
	}
	public static void main(String[] args) {
		UserEntity userEntity = new UserEntity();
		userEntity.setUserName("zhangsan");
		userEntity.setAge(20);
		System.out.println(userEntity.toString());
		log.info("####我是日志##########");
	}
}

8.其他特性

@Data 标签,生成getter/setter toString()等方法 
@NonNull : 让你不在担忧并且爱上NullPointerException 
@CleanUp : 自动资源管理:不用再在finally中添加资源的close方法 
@Setter/@Getter : 自动生成set和get方法 
@ToString : 自动生成toString方法 
@EqualsAndHashcode : 从对象的字段中生成hashCode和equals的实现 
@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 
自动生成构造方法 
@Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法 
@Value : 用于注解final类 
@Builder : 产生复杂的构建器api类 
@SneakyThrows : 异常处理(谨慎使用) 
@Synchronized : 同步方法安全的转化 
@Getter(lazy=true) : 
@Log : 支持各种logger对象,使用时用对应的注解,如:@Log4

9.打印日志(直接在类上加上@Slf4j)

private static Logger log = Logger.getLogger(App.class);
直接在类上加上@Slf4j 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值