深入浅出 Spring Data JPA
整体流程 创建过程: Spring 刷新上下文 -> 实例化 Bean -> 调用初始化 Hook 使用 JpaRepositoryFactoryBean 构建仓库工厂 Bean 默认非 Lazy 启动模式下创建仓库实例 -> 创建代理工厂代理该实例 -> 代理工厂使...
整体流程 创建过程: Spring 刷新上下文 -> 实例化 Bean -> 调用初始化 Hook 使用 JpaRepositoryFactoryBean 构建仓库工厂 Bean 默认非 Lazy 启动模式下创建仓库实例 -> 创建代理工厂代理该实例 -> 代理工厂使...
下面的最佳实践都是从性能角度证明双向关联的正确性。 映射 @OneToMany 双向关联 一个作者对应多本发行书,Parent 端 为 Author,Child 端为 Book...
部分项目可能需要同时适配多种不同的数据库,比如常见的 Mysql、Oracle、Mssql 这几种数据库。首先我们准备测试数据库环境。 测试数据库...
概述 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects)为数据库中的记录。 MyBatis 作为一款持久层框架,它趋向于以数据库为中心,因此主要的关注点会落在 SQL 定义、结果映射上,相对来说比较轻量,也更容易入手,对于 SQL 优化也比较容易,但也正是由于偏重 SQL,将会和使用的数据库强关联。 对比 ORM 框架 同时使用面向对象的软件和关系数据库既麻烦又费时。由于对象和关系数据库中的数据表示方式之间存在范式不匹配,因此开发成本要高得多。 相比 ORM 框架,ORM 框架更多的将关注点放在面向对象的域模型和业务逻辑层,ORM 框架一般会遵循 JPA 标准,比如最常见的实现 Hibernate。 ORM 框架的主要目的之一是降低与特定数据库的耦合性,它抽象了数据库系统,因此在不同数据库切换、移植时会更加容易,抽象的代价是与之而来的复杂性的增加,但也提供了更多丰富的功能特性:数据变更追踪、审计、一/二级缓存、并发版本控制、数据懒加载、级联操作,以及丰富的查询方式:SQL、HQL、JPQL、Criteria API、Query DSL 等; ...
问题 作为一个例子,我将使用在线图书订购应用程序的简化版本。在这样的应用程序中,我可能会创建一个如下所示的实体来代表采购订单: @Entity public class PurchaseOrder { @Id private String...
概述 在关系型数据库中我们没有直接的方法去映射类的继承到数据库表中。为了解决这个问题,JPA 标准提供了几种策略: MappedSuperclass - 父类,不能是实体 Single Table - 来自...
JPA 查询允许您获取实体或 DTO 投影。但是,有时需要一个组合的结果集。 实体模型 假设我们有下面两个实体: 这两个实体没有通过 @ManyToOne 进行关联。但是,两个实体共享一个 locale 属性,我们可以使用它来在两者之间形成连接。 ...
hibernate 默认的命名策略是不会将驼峰式命名 (cameCase) 映射到蛇形命名 (snake_case) 上去的, 虽然可以直接在 @Column 上指定需要映射的 name,但是使用策略一致地应用命名更方便些。 从...
实体模型 假设我们有以下 Post 实体: 如果你需要修改实体,则需要抓取整个实体;但是如果你只是对其中的几列感兴趣,则使用 DTO 会更有效。 如果我们只是想选择 Post 的 id 和 title,如果抓取整个实体会比较浪费资源,接下来我们看下 JPA 和 Hibernate 怎么实现我们的目标。 ...
引言 在关系数据库系统中,通过外键列来链接两个表之间的一对多关联,以便子表记录引用父表的主键。 尽管在关系型数据库管理系统(RDBMS)中可能很简单,但在涉及 JPA 时,一对多数据库关联可以通过 @ManyToOne 或 @OneToMany 关联来表示,因为面向对象编程(OOP)的关联可以是单向的,也可以是双向的。 ...