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)


相关推荐

  • 关于ModifyStyleEx无效的问题

    关于ModifyStyleEx无效的问题在做MFC时,有时候我们需要显示选择一个项目,比如需要标记所选择的图片控件。我们可以用这个函数:BOOLModifyStyleEx(  DWORD dwRemove,  DWORD dwAdd,  UINT   nFlags)或者BOOLModif

  • bzoj2750最短路计数

    bzoj2750最短路计数

  • TCP和UDP的区别是什么_socket tcp udp区别

    TCP和UDP的区别是什么_socket tcp udp区别TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图IP:网络层协议;(高速公路)TCP和UDP:传输层协议;(卡车)HTTP:应用层协议;(货物)。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。SOCKET:套

  • Unity HLOD System[通俗易懂]

    Unity HLOD System[通俗易懂]1.1HLODSystem简介首先,HLODSystem主要的目标是为了减少DrawCall。然后,进行更多的Batch批处理。其次,减少面数和纹理,这样我们相应地节省了内存,并提升了加载时间。HLODSystem只针对当前所在的地方进行加载,它会流式加载网格和纹理,在后台进行异步的操作。本次HLOD是基于官方AutoLOD代码的扩展和改进制作出来了的,链接:https://github.com/Unity-Technologies/AutoLOD,链接里有一篇官方的文章,…

    2022年10月22日
  • Android常用对话框大全——Dialog「建议收藏」

    Android常用对话框大全——Dialog「建议收藏」唉!最近一直忙碌着写项目以至于都没有空出点时间来总结近期的学习,记录学习到的东西…现在正好有时间了就该好好记录一下学习的过程了。今天就来谈谈开发中经常用的到的一个控件——Dialog,对话框一般我们就用来提示一些信息给用户,让用户自主选择,或者在一些操作不可逆的情况下我们提示用户是否继续操作,下面就让我们一起来学习吧。老司机发车啦…一:最简单的对话框AlertDialogdialog=new

  • 下载网络直播,多个ts文件下载与合并

    下载网络直播,多个ts文件下载与合并一、chrome与迅雷批量下载视频进入录播回放的页面,右键审查元素,选择network,可以知晓目前的文件活动情况。首先出来的是第一个ts文件,如图所示:472.ts,这个是第一个文件。把进度条拉动到最后面,会下载最后一个文件,如1850.ts。接下来可以使用迅雷的批量下载功能。如:http://www.baidu.com/abc001.ts文件,把格式改为http://www.b…

发表回复

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

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