初步学习使用SpringBoot框架

对于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中的代理对象了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值