SpringBoot是什么?
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
特点:
1、SpringBoot属于敏捷开发框架,SpringBoot的web组件集成了SpringMVC,特别适合构建微服务系统,另外给我们封装了各种经常使用的套件,如mybatis、hibernate、redis、mongodb等。
2、无需tomcat(运用Java应用程序来运行,实际上就是个jar包,SpringBoot内嵌入有一个Tomcat)
3、减少XML配置(没有XML),用的是properties配置文件?简化 Maven 配置
4、SpringCloud+SpringBoot组合开发(SpringCloud用的是http协议+rest,SpringCloud它是基于SpringBoot的?)
5、SpringBoot是安全的、习惯优于配置
6、SpringBoot中的配置文件后缀名必须是.properties和YML
SpringBoot项目创建:
1、两大依赖
SpringBoot的父级依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</parent>
SpringBoot的web组件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、运行方法:
SpringBoot项目启动的入口是main方法,启动方式有两种
①、单独启动
在想要启动的controller类上面加上注解@EnableAutoConfiguration,然后在该类中编写一个main方法,在main方法中用SpringAppliction.run(当前类名.class, args),然后点击运行,即可访问该控制层中的服务(接口)
②、全部启动
创建一个单独的类,在该类上加上注解:@EnableAutoConfiguration,@ComponentScan;把@ComponentScanz扫描注解定义在要启动的控制层类的上一级目录,然后在该类中编写main方法运行,则该目录下的所有controller中的服务都可以访问
3、访问静态资源
SpringBoot框架中的static资源一般都是存放在src/main/resources目录下的,可以在该目下建一个static文件夹,用来存放静态资源(访问方法:127.0.0.1:8080/图片名称,注意:不需要文件夹名称)
4、模板引擎渲染页面
①、SpringBoot优先使用模板引擎,不建议使用jsp页面
模板引擎定义(动态页面静态化),动态的HTML格式,也成伪html,它可以提交搜索引擎,可以使用FreeMarker实现
5、FreeMarker简介:
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。
引入freemarker依赖:
<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
注:freemarker默认访问路径:src\main\resources\templates,文件的后缀名是.ftl
6、SpringBoot整合JSP页面
项目必须创建war类型的不能是jar类型的,如果是jar类型则会一直报404,,找不到页面错误,需要引入jsp依赖
7、常用注解:
@RestController:
相当于@ResponseBody和@Controller的组合注解,使该控制层中的所有接口返回都是Json格式数据
@EnableAutoConfiguration:
作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置
@SpringBootAppliction:
是Spring Boot 项目的核心注解 主要目的是开启自动配置,是一个组合注解,主要组合了@Configuration .+@EnableAutoConfiguration.+@ComponentScan
@ComponentScan:
扫包使其注解生效,扫描单独的包:@conponentscn(“com.itmayiedu.yml.controller”),扫描多个包:@ComponentScan(basePackages = { "com.itmayiedu.yml.controller", "com.itmayiedu.yml.service"})
@Autowired:
按类型装配Bean,bean注入
@EnableJpaRepositories("com.itmayiedu.dao"):
链接JPA数据源时需要用其扫描Dao才能使其生效
@MapperScan(basePackages = "com.itmayiedu.user1", sqlSessionFactoryRef = "test1SqlSessionFactory"):
指定放在com.itmayiedu.user1下的DAO操作的表是user1,引用sqlsessionfacyory工厂
@ConfigurationProperties(prefix = "spring.datasource.test1"):
指定要读取的数据源
@Primary:
自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常,装配多个数据源时,需要其中一个加该注解,即默认优先使用该数据源
@Transactional:
可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。加该注解的方法如果报错,则事务回滚
@EnableConfigurationProperties(value = { DBConfig1.class, DBConfig2.class }):
即:启动时去加载dbconfig里面的信息(加在运行的main方法上)
@Async:
异步加载,启动main方法上需要加上@EnableAsync才能使其生效
8、全局捕获异常
概念定义:把整个站点,也就是整个网站,只要抛的异常,全部把它拦截下来,然后跳转的相对应的页面去,这就叫做全局捕获异常
实现方法:创建一个全局捕获异常类,在该类上加注解:@controllerAdvice;该注解为增强型控制器,然后在该类中创建捕获异常方法,在该方法上添加注解@ExceptionHandler(RuntumeException.class),方法体中,可以编写当网站报错是你想要展示的页面,当然如果你需要报错时展示Json格式数据,那么需要加上注解@responseBody注解,在SpringBoot中的全局捕获异常是使用了Spring中AOP的特性,使用切面调用切面中的异常通知来实现的
9、SpringBoot链接数据源
①、链接JDBC数据源
创建application.properties文件,文件中创建数据源链接
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
添加,sql语句格式:
②、整合mybatis数据源:
③、整合springjpa数据源
springjpa是什么?
它是对Hibernate的封装,描述表的映射关系,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术
创建实体:
DAO层需要继承JpaRepository接口:
使用jpa注解扫包:
@EnableJpaRepositories("com.itmayiedu.dao"):扫描dao使其生效
@EntityScan("com.itmayiedu.entity"):扫描实体类使其生效
10、整合多环境配置
配置环境简称:
在一个项目中,有多个数据源,多个JDBC链接
如何区分数据源:
①、分包方式:
配置数据源:
创建datasource类配置文:
11、SpringBoot整合事物
事物管理的分类:编程事物和声明事物(XML、注解方式)
在方法上加上@Transactional即可
多数据源事物管理(分布式事物管理):jta+autoCAD,把T1、T2和T3数据源交给第三方去管理(AutoCAD)---两段提交协议、2pc(常规项目)
12、SpringBoot整合redis
①、POM引入依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>RELEASE</version>
</dependency>
②、redis的数据类型:
String类型:
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
命令:
SET name "runoob" GET name
Hash类型:
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
每个 hash 可以存储 232 -1 键值对(40多亿)
命令:
list类型:
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个链表
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)
命令:
set类型:
无需不重复集合
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
命令:sadd key member
zset类型:
有序不重复集合
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
命令:zadd key score member
③、redis怎么存放对象?
使用String类型,采用Json格式。将对象转换为json格式存放在redis中,从redis中获取json值,反序列化对象
13、SpringBoot项目打包
在pom中声明项目入口:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<maimClass>com.itmayiedu.app.App</maimClass>
//指向主函数入口(main方法)
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
首先、先进入到控制台里面去
在进入targer目录,清空目录空间
在控制输入: MVN package 进行打包
测试打包的项目是否OK:
打开dom窗口,运行命令:java –jar 打包好的jar包名称