SpringBoot-入门
ssm整合的步骤回顾
1. 引入jar包
(spring-context spring-webmvc mybatis spring-jdbc mybatis-spring mysql驱动,druid连接池,lombok工具,jackson,servlet,)
2. 编写xml
2.1 web.xml
前端控制器(dispatcherservlet)
<!-- 配置spring官网提供的前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 拦截所有以.do结尾的请求-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
容器的监听器(初始化spring容器)
<!-- 配置spring官网提供的监听器-->
<context-param>
<!--web项目的全局配置-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
字符编码过滤器
<!-- 设置字符编码,将所有的字符编码同意设置为utf-8 -->
<filter>
<filter-name>filterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.2 applicationcontext.xml
指定扫描的包(排除controller)
<!--包扫描-->
<context:component-scan base-package="com.aaa.service,com.aaa.aspect,com.aaa.utils"/>
数据源bean的配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
myabtis相关bean的配置
<!-- mybatis的配置-->
<!--配置mybatis的sqlsessionfactory-->
<bean id="sqlsessionfactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--mapperLocations 指定mybatis映射文件所在的路径 -->
<!-- <property name="mapperLocations" value="classpath:/com/aaa/dao/*/*.xml"></property>-->
<!--引入分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor"/>
</array>
</property>
</bean>
<!-- 将mybatis的接口生成代理对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--dao接口所在的包名-->
<property name="basePackage" value="com.aaa.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlsessionfactory"/>
</bean>
其他配置
<!--引入配置文件-->
<context:property-placeholder location="classpath:jdbc.properties,classpath:oss.properties"/>
<!--开启aop自动代理-->
<aop:aspectj-autoproxy />
<!--阿里云oss配置-->
<bean id="ossEntity" class="com.aaa.entity.OssEntity">
<property name="accessKeyId" value="${oss.accessKeyId}"/>
<property name="accessKeySecret" value="${oss.accessKeySecret}"/>
<property name="bucketName" value="${oss.bucketName}"/>
<property name="endpoint" value="${oss.endpoint}"/>
</bean>
2.3 springmvc.xml
- springmvc的注解驱动
- 开启注解扫描
- 指定扫描包(controller)
- 视图(view)解析器(前缀,后缀)
- 配置拦截器
<!--springmvc的注解驱动-->
<mvc:annotation-driven/>
<!--开启注解扫描-->
<context:component-scan base-package="com.aaa.controller"/>
<!--配置二维码加载访问的IP地址和端口号-->
<bean id="loginController" class="com.aaa.controller.LoginController">
<property name="ip" value="47.104.143.50"/>
<property name="port" value="80"/>
</bean>
<!--视图解析器的配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/views/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="-1"/>
</bean>
<!--配置拦截器-->
<bean id="loginInterceptor" class="com.aaa.controller.interceptor.LoginInterceptor"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<ref bean="loginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
3. java代码
- controller层
@controller @requestmapping @responseBody - service层
@service - dao层 @repository(可以省略)
- @autowire @resource
SpringBoot
SpringtBoot其实就是Spring升级版
- Spring项目:大量的配置
- SpringBoot——尽量减少配置
1. 回忆spring的历史发展进程
Spring:
第一阶段:xml配置——
所有配置都是xml
,包括自己的类 系统的也用Bean
第二阶段:注解——自己的类用注解,系统的用Bean
第三阶段:Spring4.0之后,不要配置文件
,配置写到类里边
——配置类。@Configuration
零配置----而是配置文件不要了,放入到配置类中
SpringBoot: 第三阶段升级
系统本身自己书写了大量的配置类,常用的配置都有,加载他的启动项即可。
——也可以书写自己的配置类 以后启动:一般不用外置tomcat,内置。
Springboot推荐的包——jar包 Springboot的启动最新版本:可以直接用java -jar
运行
2. 具体内容
2.1 springboot概念
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置
。
用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。
虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的。
第一阶段:xml配置
在Spring1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件放到不同的配置文件里,那时需要频繁的在开发的类和配置文件之间进行切换
第二阶段:注解配置
在Spring 2.5时代,随着JDK1.5带来的注解支持,Spring提供了声明Bean的注解(例如@Component、@Service),大大减少了配置量。主要使用的方式是应用的基本配置(如数据库配置)用xml,业务配置用注解
第三阶段:java配置
Spring 4.0 引入了基于 Java 的配置能力,这是一种类型安全的可重构配置方式,可以代替XML。我们目前刚好处于这个时代,Spring4.x和Spring Boot都推荐使用Java配置。
2.2 springboot特征
- 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;——最新版本推荐的jar包:内置了一个tomcat
- 内嵌Tomcat或Jetty等Servlet容器;——springboot将tomcat集成——main方法来启动工程
- 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
stater是一个集成好的组件,提供相关的集成工程 - 尽可能自动配置Spring容器;
- 提供准备好的特性,如指标、健康检查和外部化配置;
- 绝对没有代码生成,不需要XML配置。——java配置,configration的配置类
2.3 关于springboot两个策略
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。
- 开箱即用: Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。
- 约定优于配置: Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。
2.4 springboot项目基础架构说明
前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它们都是用Java语言编写的,渲染模板并输出相应文本,使得界面的设计与应用的逻辑分离,同时前端开发还会使用到Bootstrap、AngularJS、JQuery等;
在浏览器的数据传输格式上采用Json,非xml,
同时提供RESTfulAPI;
SpringMVC框架用于数据到达服务器后处理请求;
到数据访问层主要有Hibernate、MyBatis、JPA等持久层框架;
数据库常用MySQL;
开发工具推荐IntelliJIDEA
2.5 构建SpringBoot项目
- 新建项目选择 Spring Initializer
下面根据自己需要引用的依赖,勾选相关的框框就行
推荐使用druid数据源
如果需要降低MySQL的版本,可以重新指定,如果本身就是MySQL8.0不需要写
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
<!--<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!–降低mysql的版本号–>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>-->
配置相关参数application.yml
spring:
datasource:
#druid数据源
druid:
url: jdbc:mysql://localhost:3306/emp1?useUnicode=true&characterEncoding=utf-8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 1234
mybatis:
#指定mybatis映射文件所在的路径
mapper-locations: classpath:mapper/*.xml
#给com.aaa.entity所有实体类起别名,默认是类名
type-aliases-package: com.aaa.entity
扫描dao接口
package com.aaa;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.aaa.dao")
public class MyspringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MyspringbootApplication.class, args);
}
}
templates里边一般放的是动态生成的东西。默认是不能直接访问的
A:直接将templates开放了
spring:
web:
resources:
static-locations: classpath:/templates,classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
B:去后台绕了一圈:转发回来
@RequestMapping("/toBBB")
public String toBBB() {
//前缀后缀会默认添加templates/ .html
return "bbb";
}
yml中会默认添加
spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html
spring boot 热部署
引入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
设置中勾选下图中所示
最后一步根据idea的版本不同,不同的设置
idea2021.2之前
idea中快捷键
ctrl+shift+alt+/
新版本idea:
热部署完成
修改banner
在resources目录下创建banner.txt文件
------------------------------------------------------------------------------------------------------------------------
.__ .__ .__ __ .___ __ .__
| |__ ____ | | | | ____ _______/ |_ __ __ __| _/____ _____/ |_ _____| |__ _____ ____ ____
| | \_/ __ \| | | | / _ \ / ___/\ __\ | \/ __ |/ __ \ / \ __\ / ___/ | \\__ \ / \ / ___\
| Y \ ___/| |_| |_( <_> ) \___ \ | | | | / /_/ \ ___/| | \ | \___ \| Y \/ __ \| | \/ /_/ >
|___| /\___ >____/____/\____/ /____ > |__| |____/\____ |\___ >___| /__| /____ >___| (____ /___| /\___ /
\/ \/ \/ \/ \/ \/ \/ \/ \/ \//_____/
------------------------------------------------------------------------------------------------------------------------
banner生成网址:
https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20