SpringBoot

什么是SpringBoot

Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。

什么是 Spring Boot

  • 它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须)的理念让你的项目快速运行起来。
  • 它并不是什么新的框架,而是默认配置了很多框架的使用方式,就像 Maven 整合了所有的 jar 包一样,Spring Boot 整合了所有框架。

默认生成的项目结构:

  • SpringbootApplication: 一个带有 main() 方法的类,用于启动应用程序
  • SpringbootApplicationTests:一个空的 Junit 测试了,它加载了一个使用 Spring Boot 字典配置功能的 Spring 应用程序上下文
  • application.properties:一个空的 properties 文件,可以根据需要添加配置属性
  • pom.xml: Maven 构建说明文件

 

SpringBoot 启动类配置

Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法,这个 main 方法其实就是一个标准的 Java  应用的入口方法在应用当中,这个包含main方法的启动类需要放在项目的根目录,启动类自身是一个基于注解的配置类,@SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,该注解组合了:                          @Configuration、@EnableAutoConfiguration、@ComponentScan  若不使用 @SpringBootApplication 注解也可以使用这三个注解代替。

@ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。该注解有个特性:如果不指定需要扫描的包或者需要注册的类,则默认是扫描该使用@ComponentScan注解的类所在的包以及子包,所以将使用了@SpringBootApplication注解的包含main方法的启动类放在项目根目录,则会扫描项目的所有包。

@EnableAutoConfiguration:启用自动配置,该注解会使SpringBoot根据项目依赖的jar包自动配置项目的配置项。例如:我们添加了Spring-boot-starter-web的依赖,SpringBoot就会自动配置Tomcat和SpringMVC。

@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。

 

SpringBoot 的配置文件

配置文件:

SpringBoot项目使用一个全局的配置文件,配置文件名是固定的 application.properties 或application.yml,一般放在resources目录下或者类路径下的/config下。

Spring Boot 不仅支持常规的 properties 配置文件,还支持 yaml 语言的配置文件。yaml 是以数据为中心的语言,在配置数据的时候具有面向对象的特征。

Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。

注意: yml 需要在 ":" 后加一个空格,幸好 IDEA 很好地支持了 yml 文件的格式有良好的代码提示; 

封装配置信息:

我们可以把配置信息封装成一个类,首先在我们的 name 和 age 前加一个 student 前缀,然后新建一个 StudentProperties 的类用来封装这些信息,并用上两个注解:

  • @Component:表明当前类是一个 Java Bean
  • @ConfigurationProperties(prefix = "student"):表示获取前缀为 sutdent 的配置信息

 

SpringBoot 项目搭建

为了使搭建思路更清晰,我打算利用IntelliJ Idea搭建一个空的SpringBoot项目,然后一步一步将需要的技术集成进SpringBoot。

首先,New 一个 Spring Initializr 项目,全都下一步完成。

完成后Idea会自动配置好一个初始SpringBoot(resources文件夹下面会生成一个空的application.properties文件)。

已经自动生成了主启动类

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

pom 中已经指明了统一父版本及SpringBoot 依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

 运行启动类,可以看到SpringBoot的Logo。

 

集成Web 功能

首先引入依赖。 

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

这样就可以使用SpringMVC的功能了,并且内部集成了Tomcat。

再次启动,这次多了几行

在浏览器中输入 localhost:8080/hello,即可获取到返回的字符串 "Hello SpringBoot"。

 

devtools 热部署

在目前的 Spring Boot 项目中,当发生了任何修改之后我们都需要重新启动才能够正确的得到效果,这样会略显麻烦,Spring Boot 提供了热部署的方式,当发现任何类发生了改变,就会通过 JVM 类加载的方式,加载最新的类到虚拟机中,这样就不需要重新启动也能看到修改后的效果了。

首先引入依赖。  

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

重新启动 Spring Boot ,然后修改任意代码,就能观察到控制台的自动重启现象。

 

SpringBoot 的模板引擎及页面跳转

由于SpringBoot默认的是jar包形式,所以不支持 jsp。因此我们需要模板引擎。

    SpringBoot 在 SpringMVC 的视图解析器方面就默认集成了 ContenStNegotiatingViewResolver 和 BeanNameViewResolver,在视图引擎上就已经集成自动配置的模版引擎,如下:

  1. FreeMarker
  2. Groovy
  3. Thymeleaf
  4. Velocity (deprecated in 1.4)
  5. Mustache

    模板引擎的大致原理:页面+数据交给模板引擎,写一个页面模板,里面一些值是动态的,我们用表达式表达。模板引擎通过数据解析表达式,写到对应位置,最终显示出去。

    SpringBoot里面没有我们之前常规web开发的WebContent(WebApp),它只有src目录,在src/main/resources下面有两个文件夹,static 和 templates,springboot默认static中放静态页面,而templates中放动态页面。

Controller 跳转提供了两种方式:

  1. 是直接返回字符串,字符串为html的名字,视图会自动解析
  2. 是利用ModelAndView

注意:SpringBoot 加载 html 默认到 resources/templates 里寻找:

@Controller
public class TestController {

    @RequestMapping("/mvc1")
    public String mvc1(){
    return "index";
    }
    @RequestMapping("/mvc2")
    @ResponseBody
    public ModelAndView mvc2(){
        ModelAndView mv = new ModelAndView("index");
        return mv;
    }

 

Thymeleaf 模板引擎

首先引入依赖。

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

SpringBoot 对 Thymeleaf 的默认配置:

默认前缀:DEFAULT_PREFIX = "classpath:/templates/"
默认后缀:DEFAULT_SUFFIX = ".html"
这完全类似 Spring MVC 的映射规则,如果想修改这些配置只需要在全局配置文件中覆盖修改即可。

所以默认只要把 HTML 页面放在 classpath:/templates/ 下,thymeleaf 就能自动渲染, classpath:/templates/ 目录以外的 html 文件是无法使用 Thymeleaf 引擎的。所以我们也可以自己配置:

spring.thymeleaf.prefiX=classpath:/templates/
spring.thymeleaf.check-template-location=true 
spring.thymeleaf.suffiX=.html 
spring.thymeleaf.mode=HTML5 
spring.thymeleaf.cache=false

 

集成Freemarker

首先引入依赖。  

在application.properties配置:

spring.freemarker.prefix=.ftl

在resources文件夹下面建立templates文件夹。SpringBoot对Freemarker的默认配置就是Freemarker的模板文件放在resource / templates下面,就可以不需要做任何配置了,SpringBoot会找到它们。

@Controller
public class IndexController {

    @RequestMapping("/getFM.do")
    public String getFM(){
        return "fm";
    }
}

运行启动类后,在浏览器中输入localhost:8080/getFm.do即可访问到resources文件夹下的fm.ftl文件。

之所以在getFm()方法中直接return "fm" 。就能找到fm.ftl 而不是fm.jsp 是因为freemark模板引擎默认的文件后缀就是.ftl。

 

集成JSP

JSP技术spring boot 官方是不推荐的,原因有三:

  1. 在tomcat上,jsp不能在嵌套的tomcat容器解析即不能在打包成可执行的jar的情况下解析
  2. Jetty 嵌套的容器不支持jsp
  3. Undertow

首先引入依赖。 

<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
	<version>9.0.12</version>
</dependency>
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>

在application.properties配置:

# 端口号
server.port=8090
# 默认前缀
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp

在这里插入图片描述

@Controller
public class IndexController {

    @RequestMapping("/index")
    public String goIndex(){
        return "index";
    }
}

 

集成Mybatis

首先引入依赖:

<dependencies>
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>1.1.1</version>
	</dependency>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

application.properties 添加数据库和mybatis配置:

# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/jc?useAffectedRows=true&useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=123456

# 指定 MyBatis 主配置文件的位置
mybatis.config-location=classpath:mybatis-config.xml

指定 mapper 文件的位置。如果在项目中你的 mapper 文件是按目录来放置
mybatis.mapper-location=classpath:mapper/*.xml

mybatis-config.xml 配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="com.mybatis.domain"/>
    </typeAliases>
    <!--<mappers>-->
        <!--<mapper resource="sample/mybatis/mapper/CityMapper.xml"/>-->
        <!--<mapper resource="sample/mybatis/mapper/HotelMapper.xml"/>-->
    <!--</mappers>-->
</configuration>

也可以把 mapper 配置在此处,有多少个 mapper 就配置多少次,当然,我们已经在 application.yml中批量指定了,很方便,就不用在此处一个个写。

添加mapper文件和编写dao代码以及service和controller代码:

  1. 新建mapper文件,保存所有数据库访问的sql。
  2. 新建实体类。
  3. 在dao层下新建mapper里面的方法,方法名与mapper里的sql语句的id要一致
  4. 在service层新建调用dao层类的逻辑代码。
  5. 在controller层新建调用service层的逻辑代码。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mephisto180502

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值