SpringBoot入门(个人总结)

@纯属个人学习总结,不喜勿喷哈。(学习来自慕课网)我觉得学习SpringBoot需要具备的前置知识熟悉maven构建项目;懂得Spring注解开发的知识;了解restful API的理论知识(http://www.ruanyifeng.com/blog/2011/09/restful.html)一、SpringBoot介绍我们在做java的项目中经常被xml的配置搞得头大…

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请标明原博地址: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.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

<!-- 配置文件自动映射 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

<!-- 热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

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

<!--JPA-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!--数据库连接-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

二、SpringBoot版本的helloworld

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

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

三、属性配置

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

这里写图片描述

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

这里写图片描述

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

在配置文件中定义:name = xxxx ;
这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述
这里写图片描述

7、打印显示

这里写图片描述

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

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

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

这里写图片描述
这里写图片描述

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

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

这里写图片描述

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

这里写图片描述

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

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

这里写图片描述

这里写图片描述

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

四、Controller控制器的使用

想看下面三个注解

这里写图片描述

1、Controller和RestController的区别

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

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

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

SpringBoot入门(个人总结)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页面随便写点东西

这里写图片描述

把HelloController的personPorperties.getName() 改为index

这里写图片描述

好了,启动。好了。
这里写图片描述

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

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

这里写图片描述

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

这里写图片描述

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

4、处理URL里面的参数

这里写图片描述
(1)@pathVariable:获取url的数据
例如获取id :(那个{id}也可以放在say前面: /{id}/say )
这里写图片描述
url输入:127.0.0.1:8080/hello/say/23,则出现
这里写图片描述
(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,
这里写图片描述
这里写图片描述
给定默认值,这时候不写(?id=)则默认为0
这里写图片描述

(3)GetMapping
GetMapping其实就是等于默认Get请求方式的RequestMapping
这里写图片描述

效果都一样,当然还有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、添加依赖包
这里写图片描述
4、配置数据库
这里写图片描述

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

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

要生成无参构造函数和getter setter方法
这里写图片描述

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

这里写图片描述

六、数据库操作(下)

开始实现功能

1、创建一个PersonController

这里写图片描述

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

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

4、添加一个人类。

这里写图片描述

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

这里写图片描述

5、实现通过id查询。

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

这里写图片描述

这里写图片描述

6、根据id更新。

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

这里写图片描述

7、根据id删除。

这里写图片描述

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

注意:定义的方法名很有讲究,必须根据这个规则来。
这里写图片描述

七、事务管理

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

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

这里写图片描述

在Controller中进行调用

这里写图片描述

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

这里写图片描述

2、现在来一个需求,我故意让第二条数据插入失败,同时第一条也插入不了。(我把数据库name改为只有四个长度)
这里写图片描述

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

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

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

启动,运行,发现两天都没有插入。这就是事务管理。(aaaa和aaaaaa都没有插入)
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119806.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • navicat永久激活码最新【2021免费激活】

    (navicat永久激活码最新)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0X1Z…

  • pycharm激活码2022年(JetBrains全家桶)

    (pycharm激活码2022年)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 简易的倒计时代码_简单的网页代码

    简易的倒计时代码_简单的网页代码在一些活动项目中,大多会涉及倒计时。以下为倒计时代码,供小白参考。关键词:计时器、时间差具体代码如下:&lt;!DOCTYPEhtml&gt;&lt;html&gt; &lt;head&gt; &lt;metacharset="utf-8"/&gt; &lt;title&gt;倒计时代码&lt;/title&gt; &lt;styletype="te

  • tess4j linux so文件,linux上安装tess4j项目「建议收藏」

    tess4j linux so文件,linux上安装tess4j项目「建议收藏」本文主要介绍了linux上安装tess4j项目,通过具体的解释说明,让我们从中学到linux上安装tess4j项目的精髓所在,让我们对Linux内部原理越来越熟悉,希望大家能够在以后的学习中更加快速的弄明白其中的关键。便于更好的操作。linuxtesseract安装及部署tess4j项目会遇到一些的问题,总结如下:在windows上项目是可以正常运行的,部署到Linux上后,运行报异常,异常内…

  • 磁盘,硬盘,软盘,光盘的区别[通俗易懂]

    磁盘,硬盘,软盘,光盘的区别[通俗易懂]计算机存储器分为两大类:内存存储器和外部存储器(简称内存或内存条和外存)。内存容量小,存取速度快,只能临时保存信息(经cup处理后的数据),断电后信息就会消失。外存容量大,存取速度比内存慢,能永久

  • kali如何更换源(怎样换一个kali源)

    KaliLinux的换源和更新1.修改源文件(需要用root权限)[plain]viewplaincopyvim /etc/apt/sources.list  2.这里修改两个我认为还好的源,因为每个地方不同,选择源的时候建议使用一些常用的吧。比如:阿里云源,中科大源之类的官方源更新的速度太慢了,所以我注释掉了,只使用两

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号