深入实践Spring Boot(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-13 14:22:06

点击下载

作者:陈韶健

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深入实践Spring Boot

深入实践Spring Boot试读:

前言

Spring Boot作为Java编程语言的一个全新开发框架,在国内外才刚刚兴起,还未得到普及使用。相比于以往的一些开发框架,Spring Boot不但使用更加简单,而且功能更加丰富,性能更加稳定而健壮。使用Spring Boot开发框架,不仅能提高开发速度,增强生产效率,从某种意义上,可以说是解放了程序员的劳动,而且一种新技术的使用,更能增强系统的稳定性和扩展系统的性能指标。本书就是本着提高开发效率,增强系统性能,促进新技术的普及使用这一目的而写的。

Spring Boot是在Spring框架基础上创建的一个全新框架,其设计目的是简化Spring应用的搭建和开发过程,它不但具有Spring的所有优秀特性,而且具有如下显著的特点:

·为Spring开发提供更加简单的使用和快速开发的技巧。

·具有开箱即用的默认配置功能,能根据项目依赖自动配置。

·具有功能更加强大的服务体系,包括嵌入式服务、安全、性能指标、健康检查等。

·绝对没有代码生成,可以不再需要XML配置,即可让应用更加轻巧和灵活。

Spring Boot对于一些第三方技术的使用,提供了非常完美的整合,使你在简单的使用中,不知不觉运用了非常高级和先进的技术。

虽然Spring Boot具有这么多优秀的特性,但它使用起来并不复杂,而且非常简单,所以不管是Java程序开发初学者,还是经验丰富的开发人员,使用Spring Boot都是一个理想的选择。

Spring Boot发展迅速,自从2014年4月发布了1.0.0版本,至今已经发布了1.4.0正式版。现在,Spring Boot正在不同的角落中悄然兴起,估计用不了多久,它将成为Java开发的又一个热潮,为众多Java开发者追捧。

本书将以一些非常切合生产实际的应用实例,带你一起使用Spring Boot框架,开始一段愉快的快速开发和探索之旅。关于本书

本书以丰富的实例,介绍了如何使用Spring Boot开发框架进行基础应用和分布式应用等方面的开发,并且介绍了如何使用Spring Boot开发的应用搭建一个高性能的服务平台,同时还对Spring Boot的一些核心功能的源代码进行了分析,从而加深对Spring Boot的理解。书中对从最基本的入门知识,到数据库的使用,以及界面设计、安全设计等领域都做了详细的介绍和探讨,并在分布式应用系统领域,以平台级应用系统的实例,介绍了如何创建和使用SSO管理系统、分布式文件系统,如何使用Spring Cloud进行云应用方面的开发,以及如何使用Docker发布和构建高可用的分布式系统服务平台。同时,对Spring Boot的程序加载、自动配置、数据管理,和Spring Cloud的配置管理、发现服务和负载均衡服务等核心功能的源代码做了深入剖析,这样在认识其实现原理的基础上,能更好地使用其相应的功能。

全书分为三个部分:第一部分(第1~5章)介绍基础应用方面的开发,包含简单入门知识、数据库使用、界面设计和安全设计等内容;第二部分(第6~9章)介绍了Spring Boot在分布式系统开发和云应用开发等方面的应用以及使用微服务构建高可用的服务平台;第三部分(第10~12章)对Spring Boot的程序加载、自动配置和数据管理的实现原理,以及Spring Cloud的配置管理、发现服务和负载均衡服务等实现原理进行了深入的剖析。本书章节编排

第1章为Spring Boot入门,介绍开发环境的搭建和开发工具的选择及安装配置,并使用一个非常简单的实例,说明如何轻易地使用Spring Boot开发框架。

第2章使用Spring Boot框架演示了以不同于以往的方式,以及如何轻易地使用数据库,并实际演示使用MySQL、MongoDB、Redis和Neo4j等数据库。

第3章使用Thymeleaf模板结合一些流行的JavaScript插件,介绍了使用Spring Boot进行界面设计的方法和技巧。

第4章对使用Spring Boot提高传统关系型数据库的性能方面做了一些探讨和尝试,并扩展了使用JPA资源库的功能。

第5章介绍了如何使用Spring Boot结合Spring Security进行安全设计,包括登录认证和角色管理、权限管理等内容。

第6章介绍如何使用Spring Security结合OAuth2进行SSO(Single Sign On)的设计,并演示如何在分布式应用系统中使用认证授权和安全管理的功能。

第7章介绍如何使用Spring Boot框架结合分布式文件系统FastDFS,并使用定制方式和富文本编辑器的方式演示了使用图片上传和建立本地图片库的方法。

第8章介绍云应用开发,包括配置管理、发现服务和监控服务的使用,以及如何使用动态路由和断路器的功能,创建高可用的微服务应用。

第9章介绍如何使用Docker引擎和docker-compose工具来发布应用和管理服务,以及如何构建一个高性能的服务平台和怎样使用Docker实施负载均衡。

第10章分析了Spring Boot的应用程序加载和自动配置原理,以及如何以改造加载配置的方式来提高应用的性能。

第11章分析了Spring Boot使用数据库的实现原理,并演示怎样利用一些技术手段提高和扩展访问数据库的功能。

第12章简要分析了微服务中配置管理、发现服务和负载均衡服务的实现原理和部分核心源代码,并使用一个实例说明配置管理中分布式消息的实现机制和原理。

附录A~附录D介绍了Neo4j、MongoDB、Redis、RabbitMQ等服务器的安装、配置和基本使用方法。读者对象

本书适于所有Java编程语言开发人员,所有对Spring Boot感兴趣并希望使用Spring Boot开发框架进行开发的人员,已经使用过Spring Boot框架但希望更好地使用Spring Boot的开发人员,以及系统设计师、架构师等设计人员。同时,本书对运维人员和DBA等也具有一定的参考价值。实例代码

本书的实例代码可以通过https://github.com/chenfromsz?tab=repositories查看和下载,推荐根据每章的提示使用IntelliJ IDEA通过GitHub检出各章的实例工程,这样可以保留原来工程的配置,并且能够直接使用。反馈与勘误

读者如有反馈意见可以通过https://github.com/chenfromsz/correct/issues发起新话题与作者进行交互,在这也可能会发布一些勘误信息,以便纠正不可避免的错误。致谢

首先,非常感谢华阳信通公司,虽然本书的编写过程大都在业余时间完成,但是公司强大的平台给本书的实例提供了更加方便的分享、验证和测试条件。同时在本书的编写过程中,也得到了我们的开发团队和众多朋友的大力支持和帮助,在此表示衷心的感谢!最后感谢华章公司的杨福川和李艺,他们在本书编辑的过程中,提出了一些宝贵而有益的建议,并为本书的出版做了许多工作。

由于时间仓促和水平有限,书中难免出现一些纰漏或不正确的地方,敬请大家批评指正!第一部分基础应用开发

·第1章 Spring Boot入门

·第2章 在Spring Boot中使用数据库

·第3章 Spring Boot界面设计

·第4章 提高数据库访问性能

·第5章 Spring Boot安全设计

这一部分从搭建开发环境,简单入门,到使用数据库、界面设计、安全管理等一系列内容,介绍了使用Spring Boot框架进行基础应用开发的方法。

第1章介绍了开发环境的搭建和开发工具的选择和安装,并以一个非常简单的实例,演示了如何使用Spring Boot框架创建工程和发布应用。

第2章介绍了如何用Spring Boot特有的方式,使用当前流行的数据库:MySQL、Redis、MongoDB、Neo4j等。

第3章介绍如何使用Thymeleaf模板结合一些流行的JavaScript插件,设计应用界面。

第4章使用Druid数据库连接池和Redis做缓存来尝试提升关系型数据库的访问性能,并扩展了JPA的资源库功能。

第5章在Spring Boot中使用Spring Security为应用系统进行安全设计,实现了登录认证和权限管理方面的功能。第1章Spring Boot入门

在使用Spring Boot框架进行各种开发体验之前,要先配置好开发环境。首先安装JDK,然后选择一个开发工具,如Eclipse IDE和IntelliJ IDEA(以下简称IDEA)都是不错的选择。对于开发工具的选择,本书极力推荐使用IDEA,因为它为Spring Boot提供了许多更好和更贴切的支持,本书的实例都是使用IDEA创建的。同时,还需要安装Apache Maven和Git客户端。所有这些都准备好之后,我们就能开始使用Spring Boot了。1.1 配置开发环境

下面的开发环境配置主要以使用Windows操作系统为例,如果你使用的是其他操作系统,请对照其相关配置进行操作。1.1.1 安装JDK

JDK(Java SE Development Kit)需要1.8及以上版本,可以从Java的官网http://www.oracle.com/technetwork/java/javase/downloads/index.html下载安装包。如果访问官网速度慢的话,也可以通过百度搜索JDK,然后在百度软件中心下载符合你的Windows版本和配置的JDK1.8安装包。

安装完成后,配置环境变量JAVA_HOME,例如,使用路径D:\Program Files\Java\jdk1.8.0_25(如果你安装的是这个目录的话)。JAVA_HOME配置好之后,将%JAVA_HOME%\bin加入系统的环境变量path中。完成后,打开一个命令行窗口,输入命令java–version,如果能正确输出版本号则说明安装成功了。输出版本的信息如下:C:\Users\Alan>java-versionjava version "1.8.0_25"Java(TM) SE Runtime Environment (build 1.8.0_25-b18)Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)1.1.2 安装InterlliJ IDEA

IDEA需要14.0以上的版本,可以从其官网http://www.jetbrains.com/下载免费版,本书的实例是使用IDEA14.1.15版本开发的。IDEA已经包含Maven插件,版本是3.0.5,这已经能够适用我们开发的要求。安装完成后,打开IDEA,将显示如图1-1所示的欢迎界面,在这里可以看到IDEA的版本号。图1-1 InterlliJ IDEA欢迎界面1.1.3 安装Apache Maven

为了能够在命令行窗口中使用Maven来管理工程,可以安装一个Maven管理工具。通过Maven的官网http://maven.apache.org/download.cgi下载3.0.5以上的版本,下载完后解压缩即可,例如,解压到D:盘上是不错的做法,然后将Maven的安装路径(如D:\apache-maven-3.2.3\bin)也加入Windows的环境变量path中。安装完成后,在命令行窗口中执行指令:mvn–v,将输出如下的版本信息以及系统的一些环境信息。C:\Users\Alan>mvn-vApache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:10+08:00)Maven home: D:\apache-maven-3.2.3\bin\..Java version: 1.8.0_25, vendor: Oracle CorporationJava home: D:\Program Files\Java\jdk1.8.0_25\jreDefault locale: zh_CN, platform encoding: GBKOS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

建议更改IDEA中Maven资源库的存放路径,可以先在Maven安装路径中创建一个资源库目录,如repository。然后打开Maven的配置文件,即安装目录conf中的settings.xml,找到下列代码,将路径更改为repository所在的位置,并保存在注释符下面。

例如找到下列代码行:/path/to/local/repo

复制出来改为如下所示:D:\apache-maven-3.2.3\repository

改好后可以拷贝一份settings.xml放置在${user.home}/.m2/下面,这样做可以不用修改IDEA的Maven这个配置。在图1-2所示的Maven配置界面中,User Settings File保持了默认位置,Local Repository使用了上面设置的路径D:\apache-maven-3.2.3\repository,而Maven程序还是使用了IDEA自带的版本。1.1.4 安装Git客户端

由于本书的实例工程都存放在GitHub(https://github.com/)中,所以还需要在GitHub中免费注册一个用户(可以通过E-mail直接注册免费用户),以方便在IDEA中从GitHub检出本书的实例工程。当然,如果不想注册,通过普通下载的方法也能取得实例工程的源代码。GitHub是世界级的代码库服务器,如果你愿意,也可以将它作为你的代码库服务器,在这里还可以搜索到全世界的开发者分享出来的源程序。图1-3是打开GitHub的首页。图1-2 Maven设置图1-3 GitHub首页

IDEA还需要Git客户端程序的支持。可以从其官网https://git-scm.com/download/下载Git客户端安装包。安装非常简单,按提示单击“下一步”并选择好安装路径即可。安装完成后,在Windows的资源管理器中,单击鼠标右键弹出的菜单中将会多出如下几个选择菜单:Git Init HereGit GuiGit Bash

其中Git Bash是一个带有UNIX指令的命令行窗口,在这里可以执行一些Git指令,用来提交或者检出项目。

在IDEA中对Git的设置,只要指定git.exe执行文件的位置即可。图1-4是IDEA中Git客户端的配置,其中Git的路径被设置在D:\Program Files\Git\bin\git.exe中,这主要由安装Git客户端的位置而定。图1-4 Git设置

如果已经在GitHub中注册了用户,即可以打开如图1-5所示的GitHub配置,输入用户名和密码,然后单击Test按钮,如果设置正确的话将会返回连接成功的提示。图1-5 GitHub配置提示 上面IDEA的一些设置界面都可以单击工具栏上的Settings按钮打开,打开File菜单,选择Settings同样也可以打开。1.2 创建项目工程

现在,可以尝试使用IDEA来创建一个项目工程。如果是第一次打开IDEA,可以选择Create New Project创建一个新工程。如果已经打开了IDEA,在File菜单中选择New Project,也能打开New Project对话框,如图1-6所示。使用IDEA创建一个Spring Boot项目有很多方法,这里只介绍使用Maven和Spring Initializr这两种方法来创建一个新项目。一般使用Maven来新建一个项目,因为这样更容易按我们的要求配置一个项目。1.2.1 使用Maven新建项目

使用Maven新建一个项目主要有以下三个步骤。图1-6 新建一个Maven项目

1.选择项目类型

在图1-6中的Project SDK下拉列表框中选择前面安装的Java 1.8,如果下拉列表框中不存在Java 1.8,可以单击New按钮,找到安装Java的位置,选择它。然后在左面侧边栏的项目类型中,选择Maven项目,即可使用Maven作为项目的管理工具。至于Maven中的archetype,因为我们并不打算使用其中任何一种类型,所以不用勾选,然后单击Next进入下一步。

2.输入GroupId和ArtifactId

在GroupId输入框中输入“springboot.example”,在ArtifactId输入框中输入“springboot-hello”,Version输入框中保持默认值,如图1-7所示,单击Next进入下一步。

3.指定项目名称和存放路径

在Project location编辑框中选择和更改存放路径,在Project name输入框中输入与ArtifactId相同的项目名称:“springboot-hello”,如图1-8所示。

单击Finish,完成项目创建,这样将在当前窗口中打开一个新项目,如图1-9所示。其中,在工程根目录中生成了一个pom.xml,即Maven的项目对象模型(Project Object Model),并生成了源代码目录java、资源目录resources和测试目录test等,即生成了一个项目的一些初始配置和目录结构。图1-7 输入GroupId和ArtifactId图1-8 指定项目名称和存放路径图1-9 初始创建的项目

下一节将使用这个项目工程来创建第一个使用Spring Boot开发框架的应用实例。1.2.2 使用Spring Initializr新建项目

新建一个Spring Boot项目,也可以使用Spring Initializr的方式,这种方式很简单,如图1-10所示。注意Initializr Service URL为https://start.spring.io,这将会连接网络,以查询Spring Boot的当前可用版本和组件列表。使用这种方式新建项目大体上也需要三个步骤。

1.选择类型

可以使用默认选项,注意Type为Maven Project,Java Version为1.8,Packaging为Jar,如图1-11所示。单击Next进入下一步。

2.选择Spring Boot版本和组件

选择Spring Boot版本和Spring Boot组件,例如,在Spring Boot Version中选择1.3.5,并勾选Web项目组件,如图1-12所示,然后单击Next进入下一步。图1-10 新建一个Spring Boot项目图1-11 选择项目类型图1-12 选择版本和组件

3.输入项目名称

选择存放路径后输入项目名称,如图1-13所示,这里使用demo作为项目的名称。图1-13 输入项目名称

单击Finish,将创建一个初始化项目,如图1-14所示。这个项目不但有完整的目录结构,还有一个完整的Maven配置,并且生成了一个默认的主程序,几乎所有的准备工作都已经就绪,并且可以立即运行起来(虽然没有提供任何可用的服务)。这也是Spring Boot引以为傲的地方,即创建一个应用可以不用编写任何代码,只管运行即可。图1-14 使用Spring Initializr创建的初始项目1.3 使用Spring Boot

任何应用的开发都需要对项目的创建、运行和发布等进行管理,使用Spring Boot框架进行开发,可以选择使用Maven或Gradle等项目管理工具。在这里我们使用的是Maven。1.3.1 Maven依赖管理

使用Maven,通过导入Spring Boot的starter模块,可以将许多程序依赖包自动导入工程中。使用Maven的parent POM,还可以更容易地管理依赖的版本和使用默认的配置,工程中的模块也可以很方便地继承它。例如,使用1.2.1节创建的工程,修改pom.xml文件,使用如代码清单1-1所示的简单Maven配置,基本上就能为一个使用Spring Boot开发框架的Web项目开发提供所需的相关依赖。代码清单1-1 Spring Boot Web基本依赖配置 4.0.0 springboot.example springboot-hello 1.0-SNAPSHOT org.springframework.boot springboot-starter-parent 1.3.2.RELEASE org.springframework.boot springboot-starter-web

这里只使用了一个依赖配置spring-boot-starter-web和一个parent配置spring-boot-starter-parent,在工程的外部库(External Libraries)列表中,它自动引入的依赖包如代码清单1-2所示。代码清单1-2 Maven加载的依赖列表

在工程的外部库列表中,Spring Boot已经导入了整个springframework依赖,以及autoconfigure、logging、slf4j、jackson、tomcat插件等,所有这些都是一个Web项目可能需要用到的东西(包括你已经考虑到的和没有考虑到的),它真是一个聪明的助手。1.3.2 一个简单的实例

Spring Boot的官方文档中提供了一个最简单的Web实例程序,这个实例只使用了几行代码,如代码清单1-3所示。虽然简单,但实际上这已经可以算作是一个完整的Web项目了。代码清单1-3 Spring Boot简单实例package springboot.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublic class Application { @RequestMapping("/") String home() { return "hello";} public static void main(String[] args) { SpringApplication.run(Application.class, args);}}

这个简单实例,首先是一个Spring Boot应用的程序入口,或者叫作主程序,其中使用了一个注解@SpringBootApplication来标注它是一个Spring Boot应用,main方法使它成为一个主程序,将在应用启动时首先被执行。其次,注解@RestController同时标注这个程序还是一个控制器,如果在浏览器中访问应用的根目录,它将调用home方法,并输出字符串:hello。1.4 运行与发布

本章实例工程的完整代码可以使用IDEA直接从GitHub的https://github.com/chen-fromsz/springboot-hello.git中检出,如图1-15所示,单击Clone按钮将整个项目复制到本地。图1-15 检出实例工程1.4.1 在IDEA环境中运行

在IDEA中打开Run菜单,选择Edit Configuration打开Run/Debug Configurations对话框,在配置界面的左边侧边栏中选择增加一个Application或Spring Boot配置项目,然后在工作目录中选择工程所在的根目录,主程序选择代码清单1-3创建的类:springboot.example.Application,并将配置保存为hello,如图1-16所示。

然后选择Run或Debug运行hello配置项目。如果启动成功,将在控制台中输出类似如下信息:"D:\Program Files\Java\jdk1.8.0_25\bin\java"..... :: Spring Boot :: (v1.3.2.RELEASE)......Starting Servlet Engine: Apache Tomcat/8.0.30......Tomcat started on port(s): 8080 (http)......

从上面的输出中可以看出,Tomcat默认开启了8080端口。要访问这个应用提供的服务,可以在浏览器的地址栏中输入http://localhost:8080/。这样就可以看到我们期望的输出字符:hello。图1-16 Spring Boot应用配置1.4.2 将应用打包发布

上面操作演示了在IDEA环境中如何运行一个应用。如果我们想把应用发布出去,需要怎么做呢?可以将代码清单1-1中的Maven配置增加一个发布插件来实现。如代码清单1-4所示,增加了一个打包插件:springboot-maven-plugin,并增加了一行打包的配置:jar,这行配置指定将应用工程打包成jar文件。代码清单1-4 包含打包插件的Maven配置 4.0.0 springboot.example springboot-hello 1.0-SNAPSHOT jar org.springframework.boot springboot-starter-parent 1.3.2.RELEASE org.springframework.boot springboot-starter-web org.springframework.boot springboot-maven-plugin repackage

这样就可以在IDEA中增加一个打包的配置,打开Run/Debug Configurations对话框,选择增加配置一个Maven打包项目,在工作目录中选择工程所在根目录,在命令行中输入package,并将配置保存为mvn,如图1-17所示。

运行mvn打包项目,就可以将实例工程打包,打包的文件将输出在工程的target目录中。

如果已经按照1.1.3节的说明安装了Maven,也可以直接使用Maven的命令打包。打开一个命令行窗口,将路径切换到工程根目录中,直接在命令行输入mvn package,同样也能将项目打包成jar文件。执行结果如下:图1-17 Maven打包配置......[INFO] --- maven-jar-plugin:2.5:jar (default-jar) @ springboot-hello ---[INFO] Building jar: E:\ideworkspace\springboot-hello\target\springboot-hello-1.0-SNAPSHOT.jar[INFO][INFO] --- springboot-maven-plugin:1.3.2.RELEASE:repackage (default) @ springboot-hello ---[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 21.450 s[INFO] Finished at: 2016-05-08T16:54:44+08:00[INFO] Final Memory: 23M/118M[INFO] ------------------------------------------------------------------------

打包成功后,在工程的target目录中将会生成jar文件spring-boot-hello-1.0-SNAPSHOT.jar。在命令行窗口中切换到target目录中,运行如下指令,就能启动应用。java -jar springboot-hello-1.0-SNAPSHOT.jar

如果希望按照传统的做法,将工程发布成war文件,应当将代码清单1-4的Maven配置jar改成war,这样就可以打包成war文件。打包完成后将war文件放置在Tomcat的webapp路径中,启动Tomcat就能自动运行程序。

这里需要注意的是,如果自主使用Tomcat运行应用,在安装JDK时必须配置JAVA_HOME环境变量,同时JDK要求1.8以上的版本,Tomcat必须是8.0以上的版本。

我更加喜欢打包成jar,然后使用Spring Boot的嵌入插件Tomcat运行应用。本书所有实例都可以打包成jar直接运行。即使对于一个包含很多页面、图片、脚本等资源的复杂应用系统,这种方法也是可行的,并且打包成jar,更方便项目发布在Docker上运行,这些将在后面的章节中详细介绍。1.5 关于Spring Boot配置

关于Spring Boot配置,可以在工程的resources文件夹中创建一个application.properties或application.yml文件,这个文件会被发布在classpath中,并且被Spring Boot自动读取。这里推荐使用application.yml文件,因为它提供了结构化及其嵌套的格式,例如,可以按如下所示配置上面的工程,将默认端口改为80,并且将Tomcat的字符集定义为UTF-8。server: port: 80 tomcat: uri-encoding: UTF-8

如果要使用application.properties文件,上面的配置就要改成如下所示的样子,其结果完全相同。server.port = 80server.tomcat.uri-enconding = UTF-8

使用这个配置文件可以直接使用Spring Boot预定义的一些配置参数,关于其他配置参数的详细说明和描述可以查看官方的文档说明:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html。在后面的开发中将在用得到的地方选择使用这些预定义的配置参数。即使没有预定义的配置参数可用,也能很容易地按照应用的需要自定义一些配置参数,这将在后续的章节中详细介绍。1.6 小结

本章主要介绍了Spring Boot开发环境的搭建,以及一些开发工具的安装配置,内容难免有点枯燥。然后创建并运行一个非常简单的实例工程,让性急的读者一睹Spring Boot的芳容。

本章实例工程只是使用Spring Boot框架进行开发的非常简单的入门指引。因为Spring Boot开发框架是一个非常轻量级的开发框架,所以也有人把它叫作微框架,从入门指引中可以看出,使用Spring Boot框架开发应用不但入门容易,而且其蕴藏的无比强大的功能,使开发过程也变得更加容易。

下面,让我们使用Spring Boot框架进行一些更加有趣的开发吧。这一章只是小试牛刀而已,在后续章节中将使用Spring Boot框架来开始一些真正的开发。第2章在Spring Boot中使用数据库

使用数据库是开发基本应用的基础。借助于开发框架,我们已经不用编写原始的访问数据库的代码,也不用调用JDBC(Java Data Base Connectivity)或者连接池等诸如此类的被称作底层的代码,我们将在高级的层次上访问数据库。而Spring Boot更是突破了以前所有开发框架访问数据库的方法,在前所未有的更加高级的层次上访问数据库。因为Spring Boot包含一个功能强大的资源库,为使用Spring Boot的开发者提供了更加简便的接口进行访问。

本章将介绍怎样使用传统的关系型数据库,以及近期一段时间异军突起的NoSQL(Not Only SQL)数据库。

本章的实例工程使用了分模块的方式构建,各模块的定义如表2-1所示。表2-1 实例工程模块定义2.1 使用MySQL

对于传统关系型数据库来说,Spring Boot使用JPA(Java Persistence API)资源库来实现对数据库的操作,使用MySQL也是如此。简单地说,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库中。2.1.1 MySQL依赖配置

为了使用JPA和MySQL,首先在工程中引入它们的Maven依赖,如代码清单2-1所示。其中,指定了在运行时调用MySQL的依赖。代码清单2-1 JPA和Mysql依赖配置 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime 2.1.2 实体建模

首先创建一些普通对象,用来与数据库的表建立映射关系,接着演示如何使用JPA对数据库进行增删查改等存取操作。

假如现在有三个实体:部门、用户和角色,并且它们具有一定的关系,即一个用户只能隶属于一个部门,一个用户可以拥有多个角色。它们的关系模型如图2-1所示。图2-1 MySQL实体-关系模型示例

Spring Boot的实体建模与使用Spring框架时的定义方法一样,同样比较方便的是使用了注解的方式来实现。

部门实体的建模如代码清单2-2所示,其中注解@Table指定关联的数据库的表名,注解@Id定义一条记录的唯一标识,并结合注解@GeneratedValue将其设置为自动生成。部门实体只有两个字段:id和name。程序中省略了Getter和Setter方法的定义,这些方法可以使用IDEA的自动生成工具很方便地生成。代码清单2-2 部门实体建模@Entity@Table(name = "deparment")public class Deparment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Deparment() { } ……}

用户实体包含三个字段:id、name和createdate,用户实体建模如代码清单2-3所示。其中注解@ManyToOne定义它与部门的多对一关系,并且在数据库表中用字段did来表示部门的ID,注解@ManyToMany定义与角色实体的多对多关系,并且用中间表user_role来存储它们各自的ID,以表示它们的对应关系。日期类型的数据必须使用注解@DateTimeFormat来进行格式化,以保证它在存取时能提供正确的格式,避免保存失败。注解@JsonBackReference用来防止关系对象的递归访问。代码清单2-3 用户实体建模@Entity@Table(name = "user")public class User implements java.io.Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createdate; @ManyToOne @JoinColumn(name = "did") @JsonBackReference private Department deparment; @ManyToMany(cascade = {}, fetch = FetchType.EAGER) @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "roles_id")}) private List roles; public User() { }……

角色实体建模比较简单,只要按设计的要求,定义id和name字段即可,当然同样必须保证id的唯一性并将其设定为自动生成。角色实体的建模如代码清单2-4所示。代码清单2-4 角色实体建模@Entity@Table(name = "role")public class Role implements java.io.Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Role() { }……2.1.3 实体持久化

通过上面三个实体的定义,实现了使用Java的普通对象(POJO)与数据库表建立映射关系(ORM),接下来使用JPA来实现

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载