Spring Boot 学习心得
Spring Boot 开发项目基本步骤,提醒大家,一定要有耐心去看Spring 官网的技术文档,每次阅读技术文档都会有不同的感受和收获。
Spring Boot 学习地址:https://spring.io/projects/spring-boot
在Spring 官网上可以下载一些小的Demo,在开发工具中做简单的配置就可以跑起来了,但是到底是如何实现的呢,对于新手来说,还是需要仔细研究一下源码的。
开发工具:IDEA
数据库:MySQL
JDK: 1.8
项目名称:demo
Maven:3.39
1,MySQL 数据库准备,要求本地 localhost 能访问到数据库表,对表的操作这里就不多说了,自行百度。
2,IDEA 开发工具准备,自行下载安装。
3,JDK 安装。
4,Maven 安装。
下面使用Spring Boot 开发一个Maven 项目。
IDEA ->File>New->Project->Spring Assistant->Next->(自定义项目的信息)->Next->(选择:Spring Boot DevTools, Lombok, Spring Configuration Processor, Spriing Web, Spring Data JPA, MySQL Driver)Finish.
配置数据库连接池信息:将src->main->resources->application.proporties 改成 application.yml 后缀名。内容为:
spring:
datasource:
url: "jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false"
username: "root"
password: "123456"
jpa:
open-in-view: false
format-sql: true
新建MainController.java,User.java,UserRepository.java,UserService.java,UserVo.java
UserRepository 接口继承了JpaRepository.JpaSpecificationExecutor 接口,实现分页查询,和封装查询条件,通过Spring-data-jpa 实现数据库操作。
User.java 实体类,通过@Entity 注解,Hibernate 将实体类与数据库表实现映射,@Table 注解指定实体类对应的表,如何不指定,默认以类名与数据库表匹配。
UserService.java 做业务逻辑处理,将从接口查询的数据做处理,注意:PageResult 是我自己定义的数据封装类,也可以用List<UserVo>返回。
最后是MainController.java,做http 请求响应的类,
启动DemoApplication.java 类,在浏览器输入:localhost:8080/demo/all 回车,就能看到 t_user 表中的数据。
以上是一个快速简单的Spring boot 的一个demo,下面是学习Spring boot 实现原理的记录:
第一、pom.xml文件解说
首先我们看到项目的根目录下的pom.xml文件,
pom.xml文件必须要加上这个 parent节点, spring-boot-parent是干什么的呢,我们点进去发现它什么也没做,而是向上继承了dependencies,
我们再点击dependencies, 进去看到了很多信息,添加了很多Spring boot 开发中需要用的maven仓库的jar包及版本信息,包括一些插件的信息和版本号。回到项目的pom.xml文件中,
看到我们这里的dependency 的内容,都是省略了版本号的,因为在parent 下的dependencies 中已经做了版本的管理,因而我们在这里就缩减了一些代码。这是Spring boot 的特性之一,我们也可以不通过依赖parent 和dependencies, 那我们就得一一指定jar包和版本号了,比较麻烦,我目前没有试过,感兴趣可以尝试一下。
第二、SpringApplication解说
我们看到项目的src/main/java包下的SpringBootAppliction.java 入口文件,也就是有main方法的文件。这个文件必须放在整个项目的最根目录,Spring 在扫描注解的时候扫描这个文件所在包下的所有class,如果其他类放在了高于这个类或其他目录下就会扫描不到。