SpringBoot入门(个人总结)

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请标明原博地址:https://blog.csdn.net/m0_37898659/article/details/82383467
@纯属个人学习总结,不喜勿喷哈。(学习来自慕课网)

我觉得学习SpringBoot需要具备的前置知识

  1. 熟悉maven构建项目;

  2. 懂得Spring注解开发的知识;

  3. 了解restful
    API的理论知识(http://www.ruanyifeng.com/blog/2011/09/restful.html)

一、SpringBoot介绍

我们在做java的项目中经常被xml的配置搞得头大,也会花很多时间在配置项目上面,SpringBoot的出现就帮我们解决了这个问题。

SpringBoot的好处和特点:

  1. 创建独立的Spring应用程序

  2. 嵌入的Tomcat,无需部署WAR文件

  3. 简化Maven配置

  4. 自动配置Spring

  5. 提供生产就绪型功能,如指标,健康检查和外部配置

  6. 绝对没有代码生成和对XML没有要求配置

  7. 编码变得简单,配置变得简单,部署变得简单,监控变得简单

  8. 备受关注,是下一代框架

  9. 微服务的入门级微框架。微服务是当下火热的技术之一,spring推出一套专门做微服务的SpringCloud,而学习SpringCloud就必须先学习SpringBoot。

附上maven的pom.xml文件代码:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-testartifactId>
    <scope>testscope>
dependency>


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-configuration-processorartifactId>
    <optional>trueoptional>
dependency>


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-devtoolsartifactId>
    <optional>trueoptional>
dependency>


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-thymeleafartifactId>
dependency>


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-jpaartifactId>
dependency>


<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
dependency>

二、SpringBoot版本的helloworld

注意:我使用的开发工具是 idea

1、在idea中使用maven创建一个SpringBoot项目

SpringBoot入门(个人总结)_第1张图片

2、打开启动类,右键点击run,让程序跑起来。

SpringBoot入门(个人总结)_第2张图片

3、可以看到,在控制台中已经启动了,而且Tomcat也已经启动了

SpringBoot入门(个人总结)_第3张图片

4、接下来,写一个类,在浏览器上显示点东西,创建一个HelloController

SpringBoot入门(个人总结)_第4张图片

5、在浏览器上访问 http://127.0.0.1:8080/hello,显示信息。

SpringBoot入门(个人总结)_第5张图片

三、属性配置

1、在项目结构中,有个application.properties文件 ,它是SpringBoot项目的配置文件,尝试在里面配置端口和项目名称。

SpringBoot入门(个人总结)_第6张图片

2、启动项目,显示tomcat已经在8081端口启动了。

SpringBoot入门(个人总结)_第7张图片

3、尝试把配置文件里的内容通过注解注入到类的属性中。

在配置文件中定义:name = xxxx ;
SpringBoot入门(个人总结)_第8张图片

4、在Controller中通过\@Value注解注入到name中

SpringBoot入门(个人总结)_第9张图片

5、启动程序,打印在浏览器上

SpringBoot入门(个人总结)_第10张图片

6、同时,也可以在配置文件中调用配置文件的name

SpringBoot入门(个人总结)_第11张图片
这里写图片描述

7、打印显示

SpringBoot入门(个人总结)_第12张图片

8、但是这样发现,每个属性都要写\@Value注解,有点麻烦。

使用\@ConfigurationProperties和\@component注释将属性绑定到JavaBean。也可以用不同的形式指定属性名称。
例如,person.first-name,person.firstName和PERSON_FIRSTNAME可以互换使用。
我们称这个功能为“宽松绑定”。
可以加一个实体类person,使用配置注入,
定义实体的前缀为 prefix = Person
SpringBoot入门(个人总结)_第13张图片
在实体中定义这个前缀,可以获取配置文件中前缀是Person的配置,映射过来。
注意:pom.xml文件中记得要导入自动映射的依赖包,不然会报错;
SpringBoot入门(个人总结)_第14张图片

9、在HelloController中使用@Autowired对javaBean进行装配使用

SpringBoot入门(个人总结)_第15张图片
SpringBoot入门(个人总结)_第16张图片

10、配置文件中,我们可以通过使用 spring.profiles.active 参数,搭配\@Profile注解,可以实现不同环境下(开发、测试、生 产)配置参数的切换。

我们复制多两份application.prooperties,并加上dev和prod代表开发环境和生产环境

这里写图片描述

在application.porperties中通过spring.profiles.active 参数调用dev或者prod。

SpringBoot入门(个人总结)_第17张图片

我们在dev中定义name为AA,在prod中定义name为BB

切换spring.profiles.active的参数就可以实现不同环境下切换

SpringBoot入门(个人总结)_第18张图片

SpringBoot入门(个人总结)_第19张图片

当然,多环境配置还有其他的方式。

四、Controller控制器的使用

想看下面三个注解

SpringBoot入门(个人总结)_第20张图片

1、Controller和RestController的区别

(1)@RestController注解相当于\@ResponseBody + \@Controller合在一起的作用。

如果用@RestController进行注解,视图解析器
InternalResourceViewResolver不起作用,返回的内容就是Return 里的
内容,而不能返回jsp页面,或者html页面。

例如:使用RestController注解是return上的 index 只是返回一个字符串。

https://img-blog.csdn.net/20180904154226872?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3ODk4NjU5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70” alt=”这里写图片描述” title=”” />70)

(2)使用@Controller 注解,在对应的方法上,视图解析器可以解析return
的jsp,html页面,并且跳转到相应页面

若返回json等内容到页面,则需要加\@ResponseBody注解

例如:如果直接用Controller的话(加了依赖包的话),运行。

会发现,页面报错,说你没有模板 “BB”这个模板,因为personPorperties.getName()
返回的是一个字符串 “BB”,

但是视图解析器会认为这个是一个网页,但是没找到。

这里写图片描述

既然没有,那就创建一个页面,在resource目录下templates目录,里面再创建一个index.html页面随便写点东西

SpringBoot入门(个人总结)_第21张图片

把HelloController的personPorperties.getName() 改为index

SpringBoot入门(个人总结)_第22张图片

好了,启动。好了。
SpringBoot入门(个人总结)_第23张图片

2、如果我们想在浏览器中无论是访问 http://127.0.0.1:8080/hello 还是 http://127.0.0.1:8080/hi 都可以访问到这个方法

可以在\@RequestMapping中用集合来定义value

SpringBoot入门(个人总结)_第24张图片

3、@RequestMapping也可以给整个类指定URL。

SpringBoot入门(个人总结)_第25张图片

这个时候,访问路径就变为
http://127.0.0.1:8080/hello/say

4、处理URL里面的参数

SpringBoot入门(个人总结)_第26张图片
(1)@pathVariable:获取url的数据
例如获取id :(那个{id}也可以放在say前面: /{id}/say )
SpringBoot入门(个人总结)_第27张图片
url输入:127.0.0.1:8080/hello/say/23,则出现
SpringBoot入门(个人总结)_第28张图片
(2)@RequestParam:像上面那个的URL比较简洁,但是传统的URL并不是那样写,例如:127.0.0.1:8080/hello/say?id=12
所有我们要用\@RequestParam获取这样的id值
注意:(1)@RequestParam(“id”)里面的id必须跟URL的相同,但是后面Integer id
里面的id可以不相同。
(2)@RequestParam(“id”)在页面中不传(?id=)则显示为空,如果连(?id=)都不写则报400,
SpringBoot入门(个人总结)_第29张图片
这里写图片描述
给定默认值,这时候不写(?id=)则默认为0
SpringBoot入门(个人总结)_第30张图片

(3)GetMapping
GetMapping其实就是等于默认Get请求方式的RequestMapping
SpringBoot入门(个人总结)_第31张图片

效果都一样,当然还有PostMapping等、、

五、数据库操作(上)

使用: Spring-Data-Jpa ( 老师说是类似Hibernate的东西)
             MySQL
1、JPA: 定义了一系列对象持久化的标准,目前实现这一规范的产品又Hibernate、TopLink
2、这次定义 五个RESTful API 的设计

请求类型 请求路径 功能
GET /persons 获取人列表
POST /persons 创建一个人
GET /persons/id 通过id查一个人
PUT /persons/id 通过id更新一个人
DELETE /persons/id 通过id删除一个人

3、添加依赖包
SpringBoot入门(个人总结)_第32张图片
4、配置数据库
SpringBoot入门(个人总结)_第33张图片

5、配置jpa。选择update:创建的时候自动帮我们生成表,如果里面已经存在表或者已经有数据则不会重新创建;
注意:jpa选择create,每次启动之后都会创建新的表,里面的数据会没掉。
配置showsql,可以让我们在控制台看到sql语句
这里写图片描述
6、定义实体类Person

\@Entity是定义这个类是实体类,\@id指定该属性为id,\@GeneratedValue是自增(但是由于jpa策略升级问题,要改为(\@GeneratedValue(strategy
= GenerationType.IDENTITY )))

要生成无参构造函数和getter setter方法
SpringBoot入门(个人总结)_第34张图片

编译,启动,就会自动生成数据库表

SpringBoot入门(个人总结)_第35张图片

六、数据库操作(下)

开始实现功能

1、创建一个PersonController

SpringBoot入门(个人总结)_第36张图片

2、Spring-data-jpa操作数据库十分简单,不需要写一句sql语句

创建一个接口PersonRepository
继承JpaRepository接口,第一个参数是:你要操作的实体类,第二个参数是:这个实体类的id的类型.(后面可以直接根据这个id进行操作,类似直接调用已经定义好的findAll()方法,会根据你这个id去找)

SpringBoot入门(个人总结)_第37张图片

3、查询人类列表。因为这次只是尝试一下SpringBoot,就直接在Controller中调用Dao,勿怪勿怪。在方法中直接调用接口的findAll方法。(会自动根据实体id去查所有的数据)

SpringBoot入门(个人总结)_第38张图片

启动项目,可以看到已经把数据库的内容取出来了。

SpringBoot入门(个人总结)_第39张图片

4、添加一个人类。

SpringBoot入门(个人总结)_第40张图片

这次用了post,所以选择用postman这个软件
填入name和age两个值作为参数。可以看到成功插入一个person

SpringBoot入门(个人总结)_第41张图片

5、实现通过id查询。

注意:在springBoot低版本中,根据主键查找一个数据使用的是findOne()这个方法。

SpringBoot入门(个人总结)_第42张图片

SpringBoot入门(个人总结)_第43张图片

6、根据id更新。

注意是使用put请求,但是在put请求下在postman中不能在from-data中插入参数,而在x-www-from-urlencoded,这个http的一种格式。

SpringBoot入门(个人总结)_第44张图片

7、根据id删除。

SpringBoot入门(个人总结)_第45张图片

8、在查询中,如果不是只是通过id查询,可以拓展接口,实现其他的查询方式(根据年龄查询)

注意:定义的方法名很有讲究,必须根据这个规则来。
SpringBoot入门(个人总结)_第46张图片

七、事务管理

在做项目的时候很多情况会出现需要两边同时要成功或者不成功。例如银行取钱,要么存进去了,卡也扣钱了;要么存不进去,卡不扣钱。不可能说卡扣钱了,机器却提示没存成功。

1、写一个PersonService管理事务。插入两个person 。

SpringBoot入门(个人总结)_第47张图片

在Controller中进行调用

SpringBoot入门(个人总结)_第48张图片

启动,数据库成功插入两条数据

这里写图片描述

2、现在来一个需求,我故意让第二条数据插入失败,同时第一条也插入不了。(我把数据库name改为只有四个长度)
SpringBoot入门(个人总结)_第49张图片

启动,执行插入(控制台报错了),说name太长;
这里写图片描述

但是在数据库中第一条已经插进去了。
这里写图片描述

3、给service中方法加上事务\@Transactional
(一般哪怕操作一条,尽量都加上事务,除非是查询操作。)
然后删掉刚才添加的第一条数据。
再次之前,提醒一件事,只有InnoDB引擎的数据库表才支持事务。(这个我查了半天)记得要修改。
SpringBoot入门(个人总结)_第50张图片
SpringBoot入门(个人总结)_第51张图片

启动,运行,发现两天都没有插入。这就是事务管理。(aaaa和aaaaaa都没有插入)
SpringBoot入门(个人总结)_第52张图片

你可能感兴趣的:(SpringBoot)