初步学习使用SpringBoot框架

news2024/11/16 19:29:21

对于SpringBoot框架介绍大家可以看看这个这篇文章,SpringBoot优缺点以及如何安装使用

以下我是按照老师给的安装方法进行安装使用SpringBoot框架:
大家安装SpringBoot框架时候,最好安装3.0以下的,不然需要对应较高版本的JDK版本(Java Development ToolKit )以及较高版本的tomcat版本,会出现一些列问题,所以最好使用3.0以下的版本不要用最新的SpringBoot版本。

以下老师推荐使用2.x的SpringBoot,安装Tomcat9.0的版本。

由于要使用SpringBoot,我们准备新建一个聚合项目,以下图片仅仅只为记录我之前的项目的春出位置。

 首先创建一个maven的聚合项目,命名framework,然后GroupId填写一下一般是com.+公司英文简称

 由于这个项目我们不希望在里面写代码,主要的作用是聚合,我们主要是想在里面建子项目,为了不在IDEA中打开很多个项目而建的,所以我们就直接把src给直接去掉。

 然后右键单击建子项目。

 还是和之前一样的创建界面:

 点击next之后我们能够发现和之前的还是有一定的区别,因为此次,我们是在framework下建的子项目,所有正在建的项目和framework实际上是父子关系,会有一个parent选项:

 我们给子项目取一个名字:01-springboot-helloword,GroupId是直接继承framework项目的GroupId,即com.neuedu,如下图所示:

 然后按照以下步凑进行:

1.首先引入引入springboot的parent

springboot项目文件的pom.xml是可以直接用外层的framework项目的pom.xml中的配置文件和依赖

也就是说我们不用一个一个添加dependency依赖,我们只需要最外层的项目的pom.xml添加dependency等需要的配置文件,内层的pom.xml就可以不用一一添加了,都可以直接使用parent项目中的pom.xml中的所有内容。只需要在parent项目中添加完依赖,子项目就都可以使用了。类似于java中的继承的关系。

我们先在最外层的framework项目中的pom.xml文件中编写如下代码

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.14</version>
    </parent>

 放置的位置如下

 注意,在ctrl + shift +o之前的代码是红色的是正常的,并且IDEA会显示报错:

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.14</version>
    </parent>

实际上我们可以看到 <artifactId>spring-boot-starter-parent</artifactId>里面内嵌了很多东西,已经给我们定义好了启动mvc,tomcat,等的,所以只需要启动这一个就可以了。我们可以点进去看看ctrlr然后点进去看看内部结果:

 不需要再像之前学校老师上课还需要启动tomcat容器,这里已经启动好了。

 

配置完成之后,就正常了,就不会报错了,如下所示:

 然后我们需要在内部springboot项目中的pom.xml中添加一个

<dependencies></dependencies>,我们想要用SpringBoot,就得在<dependencies></dependencies>启动一个MVC的框架。 

=========================================================================

这里有个小的提示事项:我们之所以要写成parent加子类的形式,是因为为了对应版本号,父类的<parent></parent>中需要对应版本号,而子类中的<dependencies></dependencies>就不需要写版本号了,由于继承关系会自动对应相应的版本号,保证不会出现版本问题;这是写成一个父项目加子项目的一个重要原因,避免因为版本问题,项目跑不起来。

framework中的<parent></parent>中的一个最大的作用就是,统一jar包的版本号,避免程序因为版本问题跑不起来。

 =========================================================================

 然后我们将以下代码加到内层springboot项目中的pom.xml的之前写的<dependencies></dependencies>中,进行springMVC框架的配置,然后ctrl +shift+o即可完成配置:

  <!--    mvc的框架  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

这里我要说明一下一般来说<dependency></dependency>由三部分组成,即<groupId><artifactId><version>,但是这里之所以没有写version,前面有提到过,是为了避免版本错误,让framework中的pom.xml中的<parent></parent>自动为我们对应版本,以避免因为项目与项目之间的版本对应不上,项目而无法执行。

 然后我们在spring项目的java源文件中,写一个main函数启动前面配置的springMVC中的框架。

我们在蓝色java文件中创建一个com.neuedu包,然后创建一个App的java class文件:

 我们在主函数中启动一个容器,用于替换掉servlet API,不需要我们自己写servlet(Servlet是java语言编写的运行在服务器端的程序)了

这个App.class上面需要一个注解@SpringBootApplication

 然后我们就需要写之前介绍的三层架构了,controller ,service ,dao(已经被mybatis代替 )

首先我们写一下controller,创建在com.neuedu下面

 

 然后我们添加一个注解@RestController

 controller(相当于原来的servlet,实际上还是servlet那些东西只是做了一些封装而已)层能够访问我们的数据库 (也可以写service层,调用dao,调用JDBC)

我们先写一个测试的代码:

比如我们想要从数据库查询一个集合,然后放到一个页面上去。我们模拟一下从数据库中查询出阿里的信息。

我们添加一个@RequestMapping的注解用于建立请求URL和处理请求方法之间的对应关系。

URL是Uniform Resource Locator(统一资源定位器) 它是专为表示网路上资源位置而设的一种编码方式。

URL一般是由三部分组成

1,应用层协议。

2,主机IP地址或域名。

3,资源所在路径/文件名。

URL的格式如下:

应用层协议://主机IP或者域名/资源所在路径/文件名

我们先写一个List类型的数,模拟是从数据库上面取出的(实际上是我们自己手动插入的数据)

 然后我们启动一下:

首先进入App java class文件中启动SpringBoot的一个容器:

执行代码之后,我们可以看到他启动了一个容器叫做Tomcat

 正常我们访问servlet得有一个URL,这里需要我们去构造一下。 

我们可以首先在UserController的的注释里面写:

 其中文本注释的快速写法是:

先写一个/**

 然后回车就可以形成可以写注释的区域:

 然后可以通过以下url访问刚刚发布的list文件里面的资源:

http://localhost:8080/list

 如下图所示:

 同理我们也可以将数据库中的数据打印在网页上面

以下演示一下利用SpringBoot框架打印出数据中的内容。

我们创建一个entity实体层用来接收从数据库中去取出的数据。

在实体层中创建一个User对象

编写几个简单的属性,

利用generate生成set get方法。

 

 然后再利用generate生成函数的构造方法:

 

有参的构造函数和无参的构造函数都写一下,

先生成有参的构造方法:ctrl按住不放一个一个选中然后点击ok就可以了

 即生成了有参的构造方法;

 然后再点击generate中的constructor生成无参的构造方法:
只需要点击selec none即可生成无参的构造方法:

 

 然后我们就可以将之前的list以user实体对象的形式,插入实体对象了。

以下仍然是模拟从数据库中查出来的数据:

 然后我们重新启动一下容器:

 然后,我们再看看http://localhost:8080/list是否发布成功了:

http默认的端口号就是tomcat的端口号。

https 实际上就是http+SSL 端口号为443. 

如何将8080容器改成80端口的容器,然后敲击地址的时候80可以省略、

==========================================================

然后我们就需要在resources文件中配置SpringBoot配置所需要的配置文件了。

首先我们需要在resource里面创建一个后缀名为properties或者yml /yaml的文件。

 我们可以在新创建的properties.properties文件中将端口号改成我们自己设置的一个数值,比如说70,以后我们访问的时候就不用8080了而是用70

按照一下路径访问:http://localhost:70/list

 

我们还可以使用

server.port=70
server.servlet.context-path=/springboot

输入的时候用http://localhost:70/springboot/list

输入网址进去之后,

 由于没有80端口被占用了,无法启动,所以就没有使用80端口作为替换,80端口输入后,浏览器上会省略。例如输入http://localhost:80/springboot/list回车之后,浏览器上就只有localhost:springboot/list了。但是换成其他端口不行。例如换成70,回车之后还是会出现端口号:

然后我们还可以在yml文件下进行书写,我们可以将application.properties中的注释掉,然后再yml文件下进行书写,yml文件下写和在properties文件下写法有些不同。

yml文件中的server的配置是以树形结构的形式进行配置的。

port之前还有两个空格,然后port和90之间还有1个空格。

 然后我们重新启动一下,报错了,原因是context:path:和后面新加的路径也要空一格,不空格的话,不会出现橙色高亮,也就不能执行,如下图所示就不行

 我们在context:path:和后面新加的路径添加空格之后,context:path就变成高亮

 然后再重新启动容器就可以发布了:

 

然后我们以http://localhost:90/springboot/list就可以访问发布的数据了

 

 

=========================================================================

 当然以上操作全都使用默认的也行,即http://localhost:8080/list,以上操作是为了和后面的mybatis整合做铺垫。

下面我们就开始将mybatis整合到SpringBoot里面了

补充这个注解才能加载application.properties

 下面我们模拟一下三层架构:
先构造一个包,controller包已经之前构建了,我们在构建一个service包

service里面我们模拟的是用户的业务逻辑。在service我们创建一个java class 类UserService。

 我们在UserService里面写一个用户的查询,之前在controller里面我们写的是假的查询(手动插入数据)

 现在我们写一个真的访问数据库的用户查询。

 但是service层之前我们说了是负责业务的,负责跟JDBC打交道的是dao。(data access object)

于是除了三层架构之外,我们再加一个dao层

 然后在这下面建一个UserDao 的java class文件

 其实这两步一步就可以完成点击创建java class文件然后输入dao.UserDao即可创建一个dao包,然后再在dao的包下面创建一个UserDao的java class文件。

 以下现用UserService模拟调用UserDao访问数据库(实际上还是在访问手动插入的数据,后面会换成访问JDBC)

 

 大家可以看到我们在使用userDao的时候使用了new 对象,但是实际上,我们可以通过依赖,将new封装到容器中,按照以下方式进行即可。

在UserDao java class文件中的函数类头部,添加一个注解,这就在容器中声明了UserDao这个对象了,

 然后再在UserService对象里面添加一个注解@Autowired

然后直接就可以直接申明容器里面已经有的对象了,即从容器中拿一个userDao对象放到UserService里面。

 那么UserService也是需要一个容器管理起来,所以我们可以写一个@service然后UserService和UserDao都可以被容器管理起来了。

 

 其实@Service和注解@Repository我们可以统一地用@Component来表示容器,之所以用@Service和注解@Repository @Controller来表示容器,实际上还是体现了一种三层架构的概念,区分3个不同的层。

为什么写一个@Service和注解@Repository @Controller,就好使了,是因为App java class文件下的@SpringBootApplication的作用,我们点进去看,可以看到加载@SpringBootApplication注解之后,就能够进行构建扫描看是service,repository,controller中的哪一种。

 @SpringBootApplication的扫描方式是扫描com.neuedu包,以及com.neuedu的子包。

我们尝试一下,如何从容器中获取对象。我们可以在test中写一个测试的方法。这里又要运用到单元测试的方法了。首先需要我们需要添加一个依赖——添加devtools的依赖:

找到springboot的项目的pom.xml文档加依赖,记得ctrl + shift +o,我们可以看到我们仍然没有写版本号<version></version>因为在父项目里面我们已经规定好了。

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

如下图所示:

 

 在安装好的配置文件里面我们可以看到含有junit(单元测试)需要的配置文件。

然后我们就可以创建Test的java class文件进行测试了:

 首先我们想要测试的是UserService对象从容器中能否获取到。

在service中想要用容器中的dao,应该@Autowired

如下所示:

 但是要想不在main进行测试,就需要添加注解启动容器。

@SpringBootTest其实和之前使用@Test进行单元测试原理差不多。

@SpringBootTest是加载容器入口类App

 然后再编写测试函数,仍然要添加@Test注解

 然后我们执行一下进行测试。

 因为这个过程需要加载容器,因此是比较慢的,右下角是绿色的,说明执行成功了,然后控制台上面也是打印出了相应的对象。

 上到这里实际上Springboot主要就说了两件事,一个是自动配置,一个容器,都是以App入口的注解作为启动,

 该注解里面具有扫描包的作用的类。

========================================================================

然后下面我们开始将mybatis整合到SpringBoot中。

我们在framework框架之下新建一个项目,整合mybatis。

 

 

 我们先将springboot-01项目中使用的pom.xml中,添加的springboot的配置依赖以及单元测试所需要的依赖,添加到springboot-02所需要的依赖当中。

 以下是新建的APP02填写的代码:注意controller,service一定要放在com.neuedu.mp中否则扫描不到比较麻烦。

 

 然后下面编写UserController java class文件

@RestController //@Controller + @ResponseBody实际上是这两个的集合,返回到浏览器

 然后我们编写以下函数到UserController函数体中:

 

 然后我们执行一下,可以看到是能够执行成功的。

 在浏览器中打开也是没有问题的;

 证明我们mvc的程序是okk的,接下来我们整合mybatis

首先用到数据库了,我们得把mysql的驱动装上。  

安装这几个依赖

<!--        连接数据库,需要用到数据源-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--        简化sqlsessionfactory重复的模块,需要添加自动配置-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
<!--mysql的驱动的安装-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

 然后我们运行一下会发现报错,是因为连接数据的url没有给出。

连接数据库肯定是需要数据源的,因此我们需要在配置文件里面写url。

 添加之后我们在执行就没有问题了

加上之后我们就执行成功了:

 以下代码,我们后期将不用再重复写,我们直接会用其他的一句代替。

 我们只需要写方框之下的mapper对象了,于是我们创建一个mapper包的对象。

‘’

 

 然后我们还需要写一个代码对应的sql语句:我们创建一个包和com.neuedu.mp同名方便对应 。

 

 将以下代码复制到UserMapper.xml文件中,然后进行调试:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.neuedu.mybatis.mapper.UserMapper">

    <select id="list" resultType="map">
        select * from  ums_user
    </select>

</mapper>

然后修改成一一对应

 然后表的名字也换一下:换成nefu中表格

 然后再APP02中写上注解,

@MapperScan("com.neuedu.mp.mapper")

 然后再UserMapper中添加上

@Repository

 APP02就可以直接使用UserMapper中的代理对象了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导航栏,封装Api接口,数据处理 过滤器,Echarts使用(二)

文章目录 一、左侧导航栏El的元素颜色重写导航开启router模式导航栏折叠&#xff08;兄弟页面传数据 借助父亲&#xff09; 二、封装请求的Api接口接口地址管理配置跨域 三、数据处理 过滤器四、使用EchartsDemo: 使用 ECharts项目中使用Echarts 接上篇&#xff08;一&#xff…

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测 目录 时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测效果一览基本介绍研究过程程序设计参考资料效果一览

好视力、南卡、欧普护眼台灯哪个护眼效果更出色?看完这篇测评你就明白了

现在的孩子&#xff0c;学习任务都非常繁重&#xff0c;想想我们小时候基本上没什么作业&#xff0c;但是现在的孩子感觉每天都有做不完的功课和试卷&#xff0c;除此之外&#xff0c;还有家长给报的各种学习班、技艺班&#xff0c;为了一个更好的前途&#xff0c;这也是没办法…

office 2003 default regedit

office版本这么多&#xff0c;感觉还是2003简单&#xff0c;唉 "D:\Microsoft-Office-2003\OFFICE11\EXCEL.EXE" /regserver "D:\Microsoft-Office-2003\OFFICE11\WINPROJ.EXE" /regserver "D:\Microsoft-Office-2003\OFFICE11\POWERPNT.exe" /r…

IDEA恢复误删除的文件

idea将删除的文件放在idea文件缓存中&#xff0c;文件的更改等信息都放在这个缓存中&#xff0c;所以短时间内删除的文件可以尝试恢复。

每日一面系列-spring中@Autowired 和 @Resource 区别?

Autowired注解是由Spring提供的&#xff0c;它可以用来对构造方法、成员变量及方法参数进行标注&#xff0c;它能够根据对象类型完成自动注入&#xff0c;代码如下。 public class Service {// 构造方法注入 Autowired public Service(Service service) { this.s…

0122 绪论

目录 1.绪论 1.1数据结构的基本概念 1.1部分习题 1.2算法和算法评价 1.2部分习题 1.绪论 1.1数据结构的基本概念 数据&#xff1a;信息的载体 数据元素&#xff1a;数据的基本单位&#xff0c;由若干数据项组成 数据项&#xff1a;构成数据元素的不可分割的最小单位 数…

leetcode-060-排列序列

题目及测试 package pid060; /* 60. 排列序列 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a;"123" "132" "213" "23…

银行数字化转型导师坚鹏:银行数字化营销面临的5大痛点

银行数字化营销在助力银行业实现转型与发展的同时&#xff0c;也面临一些痛点问题。以下是银行数字化营销必须解决的五大痛点&#xff1a; 1) 数据质量和完整性&#xff1a;银行在数字化营销中需要利用大数据技术&#xff0c;但数据质量和完整性仍然是一个关键问题。银行需要确…

最强的″矛″ 验关键的″盾″|赛宁数字孪生靶场验证湖南工业互联网安全

​​为深入推动“智赋万企”数字安全屏障工程&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;湖南省工信厅和湖南省通管局主办的“铸网—2023”湖南省工业互联网企业网络安全实战攻防演练&#xff0c;于近日圆满收官。赛宁网安以数字孪生靶场为基础&#xff0c;构…

SpringMVC (八) 拦截器+文件上传下载

学习回顾&#xff1a;SpringMVC &#xff08;七&#xff09; Ajax研究 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 过滤器与拦截器的区别&#xff1a;拦截器是AOP思想的…

实现窗户特效的Unity Shader解析

本文将详细介绍一种使用Unity Shader实现窗户特效的方法。通过分析代码&#xff0c;我们将解释每个关键部分的作用&#xff0c;以及如何将其组合在一起以实现逼真的窗户效果。希望本文能为Shader编程初学者和Unity开发者提供一些有用的指导。 引言&#xff1a; 在游戏和虚拟现实…

taro 小程序自定义地图选点功能

效果&#xff1a; 1、添加中心点 icon, 保证icon 处于地图中间 .map-box {width: 100vw;height: 36vh;position: relative;// 中心icon.center-icon-box {position: absolute;top: calc(50% - 30rpx); // 保证icon 处于地图中心点left: 50%;transform: translate(-50%, -50%)…

JavaScript内存管理和闭包

1 JavaScript内存管理 2 垃圾回收机制算法 3 闭包的概念理解 4 闭包的形成过程 5 闭包的内存泄漏 一个函数只有调用了外部的变量&#xff0c;才算是闭包。函数内和函数外会写成闭包。 深入JS闭包-闭包的访问过程 <!DOCTYPE html> <html lang"en"> &l…

Jenkins用户权限设置和运行节点配置实战

这里写目录标题 一、Jenkins用户权限设置实战1、用户权限配置2、用户权限分配 二、Jenkins运行节点配置实战1、增加运行节点的好处2、实战B-1:添加Jenkins运行节点实战1、相关字段说明&#xff1a;2、SSH连接方式 实战B-2:配置不同类型的节点-Python 节点实战B-3:配置不同类型的…

STM32F4 读/写 EEPROM【EEPROM、串口显示】

将姓名&#xff08;拼音&#xff09;学号写入EEPROM并在启动时通过串口显示 本篇博客将介绍如何使用STM32F4开发板将姓名&#xff08;拼音&#xff09;学号写入EEPROM&#xff0c;并在启动时通过串口显示。我们将使用核心实现函数EEPROM_WR_Test来完成这个功能。 准备工作 在…

Dubbo【Dubbo实战(用户更新业务消费者实现、用户删除业务消费者实现、复习内容) 】(六)-全面详解(学习总结---从入门到深化)

目录 Dubbo实战_用户更新业务消费者实现 Dubbo实战_用户删除业务消费者实现 复习内容&#xff1a; Dubbo实战_用户更新业务消费者实现 在Consumer中调用更新用户业务 /*** 根据用户id修改用户名字* param users* return*/Integer updateUsers(User users);/*** 根据用户id查…

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

JAVA设计模式介绍

一、什么是设计模式 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计…

前端Vue自定义手机号文本格式化组件手机号码文本转星号

前端Vue自定义手机号文本格式化组件, 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13231 效果图如下: # cc-format-phone #### 使用方法 使用方法 <!-- phone:手机号 isStar: 是否转星号 --> <cc-format-phone :phon…