Spring Boot 实践折腾记(19):自定义配置JPA使用多数据源

用心去看才看得清楚,本质的东西用肉眼是看不见的。——圣爱克苏佩里,《小王子》

今天的内容有点多,希望你能耐心看完,因为会复习 Spring Boot 和 Sping 的相关内容。

Java持久性API(JPA)是一个对象关系映射(ORM)框架,它是Java EE平台的一部分。

JPA通过让开发人员使用面向对象的API,而不是手动编写SQL查询来简化数据访问层的实现。目前,流行的JPA框架有Hibernate,EclipseLink和OpenJPA。而 Spring 框架本身也提供了一个Spring ORM模块,以便与ORM框架轻松集成。

除此之外,我们还可以在JPA中使用Spring的声明式事务管理功能。

除了Spring ORM模块之外,Spring家族还提供了一个Spring Data,主要专注用于访问关系数据库和NoSQL数据库。

现在,Spring Data已经集成了大多数流行的数据访问技术,包括JPA,MongoDB,Redis,Cassandra,Solr,ElasticSearch等。

本文我们将探寻Spring Data JPA,并实战演示如何将它与Spring Boot一起使用,以及如何在同一个Spring Boot应用程序中使用多个数据库方法。

Spring Data JPA

在不使用Spring Boot的情况下,我们配置数据存储,通常需要自行配置各种Bean,如DataSourceTransactionManagerLocalContainerEntityManagerFactoryBean等。

而使用Spring Boot JPA的Starter:spring-boot-starter-data-jpa便能快速启动并运行JPA了。

但是,在介绍如何使用spring-boot-starter-data-jpa之前,我们先来看看Spring Data JPA。

很多时候,我们可能需要进行数据管理应用程序的开发,对于这些程序,本质上,我们是做的CRUD(创建,读取,更新,删除)操作。

过去,我们需要一遍又一遍的写类似的操作代码,也就是我们最为熟悉的DAO层。

而Spring Data的出现,极大的改善了这种情况,我们不再一次又一次地执行相同的CRUD操作,或者每一个项目都需要实现自己的所谓“通用”的CRUD DAO实现,而直接使用,如CrudRepositoryPagingAndSortingRepositoryJpaRepository等的功能,这些功能提是开箱即用,包含了操作以及分页和排序等方法。

比如,JpaRepository的接口方法,如下图:
这里写图片描述
如图所示,JpaRepository提供了几种CRUD操作方法:

  • long count()—— 返回可用实体的总数
  • boolean existsById(ID id)—— 返回是否存在具有给定ID的实体
  • List findAll(Sort sort)—— 返回按给定选项排序的所有实体
  • Page findAll(Pageable pageable)—— 返回满足Pageable对象中提供的分页限制的实体

Spring Data JPA不仅提供了开箱即用的CRUD操作,还支持基于方法名称的动态查询生成功能。

比如,定义一个findByEmail(String email)方法,Spring Data将自动生成带有where子句的查询,如“where email =?1”。

再比如,定义一个findByEmailAndPassword(String email,String password)方法,Spring Data 将自动生成带有where子句的查询,如“where email =?1 and password =?2”所示。

但有时候,我们可能因为某些原因(比如,代码安全,编码规范等)而无法直接使用基于方法名称的动态查询,Spring Data 便提供了使用@Query注释显式配置来增强查询的灵活性。

@Query("select u from User u where u.email=?1 and u.password=?2 and u.enabled=true")
User findByEmailAndPassword(String email, String password);

还可以使用@Modifying和@Query执行数据更新操作,如下所示:

@Modifying
@Query("update User u set u.enabled=:status")
int updateUserStatus(@Param("status") boolean status)

实战1:

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值