Spring 加强版 ORM 框架 Spring Data 入门

本文介绍了 Spring Data 框架的基础知识,包括模块划分、核心概念 Repository、自定义 Repository 接口及方法,以及 Spring Web 的支持。Spring Data 提供了一种简化数据库操作的方式,通过解析接口方法生成查询语句,支持分页、排序等高级功能。文章以 spring-data-jdbc 为例,展示了如何创建和定制 Repository,并提供了实例说明。
摘要由CSDN通过智能技术生成

概述

Spring 中有多种操作数据库的方式,通常来说我们优先选择的是 MyBatis,如果业务比较简单我们还会使用 JdbcTemplate,另外据说国外使用 spring-data-jpa 比较多?

最近发现了 Spring 中另一款操作关系型数据库的框架,相对 JdbcTemplate 来说使用上又简化了一些,它也是 Spring Data 大家族中的一员,即 spring-data-jdbc,分享给大家。

由于 Spring Data 内容较多,分为上下两篇介绍,本篇我们先介绍一些 Spring Data 的基础知识,下篇再介绍 spring-data-jdbc。

模块划分

Spring Data 大家族中有一些每个模块都要遵守的规范,这些规范定义在 spring-data-commons 模块中,理解这些规范后,切换到具体的实现模块能很快上手。这些模块之间的关系可以用下面的图来表示。
在这里插入图片描述

核心概念

Spring Data 的实现借鉴了领域驱动设计 DDD 的设计原则,规范中的核心概念是 Repository,它表示一个管理 Domain 的仓库,所有的数据库操作都要经过 Repository。
在这里插入图片描述

Domain 则表示数据库表在 Java 中的映射,每个 Domain 都必须有一个唯一的 ID 标识,可以通过 @Id 注解标识。例如,我们有一个关系型数据库表 user,结构如下:

create table user
(
    id          bigint unsigned auto_increment
        primary key,
    username    varchar(20)  null,
    password    varchar(20)  null
);

可以使用如下的类表示。

@Data
public class User {

    @Id
    private Long id;

    private String username;
    
    private String password;
}

Repository 作为一个接口,接收具体的 Domain 类型和 Domain 的 ID 类型作为泛型参数。接口定义如下。

public interface Repository<T, ID> {
}

自定义 Repository 接口

Repository

Repository 只是一个标记接口,对于开发者来说需要提供一个 Repository 的子接口,然后再定义一些操作数据库的方法。例如,针对上面的 Domain User 我们可以定义一个这样的 Repository

public interface UserRepository extends Repository<User, Long> {

    Optional<User> findById(Long id);
}

Spring Data 实现模块会根据特定的语法规则将方法解析为具体的查询方式,例如对于 spring-data-jdbc 模块来说,上面的 findById 可以解析为如下 SQL。

select id,username,password from user where id = ?

如果多个 Domain 相同的操作比较多,我们还可以将方法定义到一个 BaseRepository 中,示例如下。

@NoRepositoryBean
public interface BaseRepository<T, ID> extends Repository<T, ID> {

    Optional<T> findById(ID id);
}

public interface UserRepository extends BaseRepository<User, Long> {    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值