基于Springboot技术的博客系统实践及应用之三(Spring Data JPA)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gyshun/article/details/83445157

本博客将从JPA简介、Spring Data JPA用法介绍、Spring Data JPA、Hibernate与SpringBoot集成以及数据持久化实战四个方面进行详细描述Spring Data JPA的用法和应用。

1、JAP简介:

       JPA是Java Persistence API的简称,是用于管理Java EE和Java SE环境中的持久化,以及对象关系映射的JAVA API,它遵从的规范,目前是JSR338:java Persistence 2.1 而Spring Data JPA 是Spring用来整合ORM框架而设计的JPA,Spring Data JPA诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,百度百科说是JDK为了实现ORM的天下归一,目前也是在按照这个方向发展,但是还没能完全实现。在ORM框架中,Hibernate是一支很大的部队,使用很广泛,也很方便,能力也很强,同时Hibernate也是和JPA整合的比较良好,我们可以认为JPA是标准,JPA几乎都是接口,实现都是Hibernate在做,宏观上面看,在JPA的统一之下Hibernate很良好的运行。

  上面阐述了JPA和Hibernate的关系,那么Spring-data-jpa又是个什么东西呢?这地方需要稍微解释一下,我们做Java开发的都知道Spring的强大,到目前为止,企业级应用Spring几乎是无所不能,无所不在,已经是事实上的标准了,企业级应用不使用Spring的几乎没有,这样说没错吧。而Spring整合第三方框架的能力又很强,他要做的不仅仅是个最早的IOC容器这么简单一回事,现在Spring涉及的方面太广,主要是体现在和第三方工具的整合上。而在与第三方整合这方面,Spring做了持久化这一块的工作,我个人的感觉是Spring希望把持久化这块内容也拿下。于是就有了Spring-data-**这一系列包。包括,Spring-data-jpa,Spring-data-template,Spring-data-mongodb,Spring-data-redis,还有个民间产品,mybatis-spring,和前面类似,这是和mybatis整合的第三方包,这些都是干的持久化工具干的事儿。

  我们都知道,在使用持久化工具的时候,一般都有一个对象来操作数据库,在原生的Hibernate中叫做Session,在JPA中叫做EntityManager,在MyBatis中叫做SqlSession,通过这个对象来操作数据库。我们一般按照三层结构来看的话,Service层做业务逻辑处理,Dao层和数据库打交道,在Dao中,就存在着上面的对象。那么ORM框架本身提供的功能有什么呢?答案是基本的CRUD,所有的基础CRUD框架都提供,我们使用起来感觉很方便,很给力,业务逻辑层面的处理ORM是没有提供的,如果使用原生的框架,业务逻辑代码我们一般会自定义,会自己去写SQL语句,然后执行。在这个时候,Spring-data-jpa的威力就体现出来了,ORM提供的能力他都提供,ORM框架没有提供的业务逻辑功能Spring-data-jpa也提供,全方位的解决用户的需求。使用Spring-data-jpa进行开发的过程中,常用的功能,我们几乎不需要写一条sql语句,至少在我看来,企业级应用基本上可以不用写任何一条sql,当然spring-data-jpa也提供自己写sql的方式。

    Spring Data JPA是更大的Spring Data家族的一部分,对基于JPA的数据访问层的增强支持,更容易构建基于使用Spring家族的技术栈的支持;

JPA涉及的概念:

实体:

1、表示关系数据库中的一个表

2、每个实体的实例都对应于该表中的一行数据

3、实体必须标注@entity的注解

4、实体类必须有一个Public或Protected的无参数的构造函数

5、实体实例被当作值以分离对象的方式进行传递(例如通过会话Bean远程业务接口),则该类必须实现Serializable接口、

扫描二维码关注公众号,回复: 3968328 查看本文章

6、实体必须有唯一的对象标识符,一般情况下用ID来表示,加上两注解(@id  @generateValue)

关系:

1、一对一:@OneToOne

2、一对多:@OneToMany

3、多对一:@ManyToOne

4、多对多:@ManyToMany

EntityManager

1、定义用于与持久性上下文交互的方法

2、创建和删除持久实体实例,通过实体的主键查询实体

3、允许在实体上运行查询

如何获取EntityManager,简单代码如下:

查找实体,

2、Spring Data JPA用法介绍

Spring DataJPA常用接口:

1、CrudRepository ,用于简单的增删改查,它的源代码如下:

2、PagingAndSortingRepository 用于数据分页和排序,源代码如下:

3、自定义接口,根据方法名创建查询,不需要编写任何代码,如下图代码:

3、Spring Data JPA 、Hibernate与Spring Boot集成

需要创建配置环境,主要使用的软件和JAR包有如下:

1、Mysql 2、Spring Data JPA  3、Hibernate 4、Mysql Connector

添加依赖,注意需要自定义Hibernate版本5.2.8,因为Spring-boot-starter-data-jpa默认是5.0版本的Hibernate

自定义Hibernate版本:

4、数据持久化实战

4.1、将数据持久化到H2内存数据库中

先增加依赖:

H2提供一个控制台,像Mysql数据库一样查看后台中的数据,如果想启用这个控制台,需要修改application.properties,如下图:

这样就可以通过:http://localhost:8080/h2-console 如下图:

 
  H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
  H2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。
  它的另一个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。
  H2的第三个用处是作为缓存,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它当Memcached使,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。不过这样系统架构就会比较复杂了。

使用H2我们不用设计表结构,是通过JPA自动生产表结构,我们只关注业务对象就OK。

4.2、将数据持久到Mysql数据库中

首先加载Mysql相关的依赖包。

其次在application.proerpties中配置数据源、账号、密码、驱动,如下图:

上图中对JPA进行两项目配置,说明如下:

1、spring.jpa.show-sql = true 是配置在控制台显示打印SQL语句

2、spring.jpa.hibernate.ddl-auto = create-drop 是配置在项目启动的时候删除掉表,重新生产表结构,这样我们只需要在启动之前创建对应的数据库,不再需要创建表结构了。

注意:如果我们在配置中增加了数据源的配置,系统会自动的不使用H2。

到此为止,Spring Data JPA的应用与实践讲解完毕。


 

猜你喜欢

转载自blog.csdn.net/gyshun/article/details/83445157