Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs(feature/doc-update): errata document. #28

Merged
merged 1 commit into from
Apr 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/mapping/advanced/logical-deleted/entity.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ public interface Book {
@Key
int edition();

// hightlight-next-line
// highlight-next-line
@LogicalDeleted
long deletedMillis();

Expand Down Expand Up @@ -404,7 +404,7 @@ interface Book {
@Key
val edition: String

// hightlight-next-line
// highlight-next-line
@LogicalDeleted
val deletedMillis: Long

Expand Down
6 changes: 3 additions & 3 deletions docs/query/paging/usage.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ Finally, in the obtained pagination, each object conforms to the data structure

```json
{
// hightlight-next-line
// highlight-next-line
"content":[ // Current page
{
"id":12,
Expand Down Expand Up @@ -828,9 +828,9 @@ Finally, in the obtained pagination, each object conforms to the data structure
]
}
],
// hightlight-next-line
// highlight-next-line
"totalPages":3, // Total page count is 3
// hightlight-next-line
// highlight-next-line
"totalElements":12, // Total row count before pagination is 12

...Spring Data's Page object has too many properties, ommitted...
Expand Down
2 changes: 1 addition & 1 deletion docs/showcase/other-query.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ val newestBooks = sqlClient

## Native SQL

为了支持特有数据库产品特有的能力,Jimmer的SQL DSL支持潜入Native SQL表达式。以正则表达式查询为例。
为了支持特有数据库产品特有的能力,Jimmer的SQL DSL支持嵌入Native SQL表达式。以正则表达式查询为例。

<Tabs groupId="language">
<TabItem value="java" label="Java">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: 复合字段
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

复合字段将来数据库的多个列合并为一个整体,将其映射为一个非实体的自定义类型,然后利用此自定义属性为实体声明一个属性。
复合字段是将数据库的多个列合并为一个整体,将其映射为一个非实体的自定义类型,然后利用此自定义属性为实体声明一个属性。

## 作为普通字段

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: 实体表
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

想让实体支持逻辑删除,需要添加一个被`org.babyfish.jimmer.sql.LogicalDeleted`的标志属性,以表示该数据是正常的还是已经被删除。
想让实体支持逻辑删除,需要添加一个被`org.babyfish.jimmer.sql.LogicalDeleted`标记的标志属性,以表示该数据是正常的还是已经被删除。

一旦为实体配置了逻辑删除属性

Expand Down Expand Up @@ -376,7 +376,7 @@ public interface Book {
@Key
int edition();

// hightlight-next-line
// highlight-next-line
@LogicalDeleted
long deletedMillis();

Expand Down Expand Up @@ -404,7 +404,7 @@ interface Book {
@Key
val edition: String

// hightlight-next-line
// highlight-next-line
@LogicalDeleted
val deletedMillis: Long

Expand Down Expand Up @@ -446,7 +446,7 @@ alter table BOOK

## 对中间表的影响

如果实体被逻辑删除,那么和他相关的基于中间表 *(采用`@JoinTable`的注解)* 的关联会收到何种影响呢
如果实体被逻辑删除,那么和它相关的基于中间表 *(采用`@JoinTable`的注解)* 的关联会受到何种影响呢

- 如果中间表也支持逻辑删除,即`@JoinTable`注解的`logicalDeletedFilter`参数被指定,与被逻辑删除实体相关的中间表记录也会被逻辑删除。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import TabItem from '@theme/TabItem';

想让中间表支持逻辑删除,需要为注解`org.babyfish.jimmer.sql.JoinTable`指定属性,以表示该数据是正常的还是已经被删除。

- 一旦为中间表配置了逻辑删除属性,当任何一端的实体被逻辑删除是,所有相关的中间表记录将会被逻辑删除。
- 一旦为中间表配置了逻辑删除属性,当任何一端的实体被逻辑删除时,所有相关的中间表记录将会被逻辑删除。

- 所有针对当前关联的JOIN操作都会被自动加上` and 软删除标志 <> 已经被删除`的条件,从而营造出某些关联已经被删除的假象。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem';

`org.babyfish.jimmer.sql.MappedSuperclass`用于提供可供实体继承的抽象超类型。

该超类型不并是实体,但可以被多个实体类型继承,从而避免多个实体重复声明相同的属性。
该超类型并不是实体,但可以被多个实体类型继承,从而避免多个实体重复声明相同的属性。

让我们来看一个例子,先定义超类型

Expand Down Expand Up @@ -170,6 +170,7 @@ public interface TenantAware {

```kotlin title="TenantAware.kt"
// highlight-next-line
@MappedSuperclass
interface TenantAware {

val tenant: String
Expand Down Expand Up @@ -209,7 +210,7 @@ interface Book : BaseEntity, TenantAware {
修改`Book`,让它不光继承`BaseEntty`,还继承`TenantAware`

:::tip
`@MapperSuperclass`的作用不仅仅是减少重复代码,还可以其他另外两个功能配合使用
`@MapperSuperclass`的作用不仅仅是减少重复代码,还可以和其他另外两个功能配合使用

- [全局过滤器](../../query/global-filter)
- [拦截器](../../mutation/draft-interceptor)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: 多对多
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

本通过介绍如何使用`@org.babyfish.jimmer.sql.ManyToMany`注解可以声明多对多关联属性
本文通过介绍如何使用`@org.babyfish.jimmer.sql.ManyToMany`注解可以声明多对多关联属性

多对多可支持双向关联,对于双向关联而言,其中一方必须主动方,另外一方为从动方。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: 多对一
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

本通过介绍如何使用`@org.babyfish.jimmer.sql.ManyToOne`注解可以声明多对一关联属性
本文通过介绍如何使用`@org.babyfish.jimmer.sql.ManyToOne`注解可以声明多对一关联属性

有两种方法可以实现多对一关联,基于外键和基于中间表。

Expand Down Expand Up @@ -120,7 +120,6 @@ public interface Book {
@Entity
interface Book {

@Nullable
@ManyToOne
@JoinTable
val store: BookStore?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: 一对一
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

本通过介绍如何使用`@org.babyfish.jimmer.sql.OneToOne`注解可以声明一对一关联属性
本文通过介绍如何使用`@org.babyfish.jimmer.sql.OneToOne`注解可以声明一对一关联属性

一对一可支持双向关联,对于双向关联而言,其中一方必须主动方,另外一方为从动方。

Expand Down Expand Up @@ -237,12 +237,14 @@ alter table CUSTOMER_ADDRESS_MAPPING

// 这两个约束非常重要。
// 否则这张中间表表达的是多对多关联,而非一对一关联
// 为中间表 CUSTOMER_ID 字段设置唯一约束
alter table CUSTOMER_ADDRESS_MAPPING
add constraint UQ_CUSTOMER_ADDRESS_MAPPING__CUSTOMER_ID
unique(CUSTOMER_ID);
// 为中间表 ADDRESS_ID 字段设置唯一约束
alter table CUSTOMER_ADDRESS_MAPPING
add constraint UQ_CUSTOMER_ADDRESS_MAPPING__ADDRESS_ID
unique(CUSTOMER_ID);
unique(ADDRESS_ID);
```

- 中间表的只有两个外键,而且都非null。中间表靠插入数据和删除数据维护关联,本身从不存储null数据
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Jimmer中外键有两种
:::info
在保存数据时

- 真外键靠关系性数据库本身的能力保证引用完整性
- 真外键靠关系型数据库本身的能力保证引用完整性

- 伪外键靠ORM在上层代码中植入额外检查来保证引用完整性

Expand Down Expand Up @@ -127,7 +127,7 @@ Jimmer中外键有两种
:::

:::caution
如果数据方言不支持外键, *(比如:`org.babyfish.jimmer.sql.dialect.TiDBDialect`)*,则不能明确指定真外键。
如果数据库方言不支持外键, *(比如:`org.babyfish.jimmer.sql.dialect.TiDBDialect`)*,则不能明确指定真外键。

因为,作为一个分布式关系型数据库,TiDB不支持外键约束。
:::
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ sidebar_position: 1
title: 基础映射
---

在这一系列文章中,我们会介绍基本映射,包括可空性、真假外间、实体、id和关联关系。
在这一系列文章中,我们会介绍基本映射,包括可空性、真假外键、实体、id和关联关系。
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import TabItem from '@theme/TabItem';

- 可以使用`@JoinTable(name = "...")`明确地为基于中间表的关联属性指定中间表表名以及其所有列名。

然而,为了提高开发效率,我们不可能到过多地使用这些注解。大部分情况下,默认的名字推导行为应该可以工作,少数情况下,才在代码中使用这些注解。
然而,为了提高开发效率,我们不可能过多地使用这些注解。大部分情况下,默认的名字推导行为应该可以工作,少数情况下,才在代码中使用这些注解。

对于某个类或属性,如果用户**不**用这类注解,如何自动决定数据库中的标识名,被称为命名策略,是一个可定制的Java接口

Expand Down Expand Up @@ -84,15 +84,15 @@ DefaultDatabaseNamingStrategy类有两个静态字段

生成的数据库标识名全部小写。

一些数据库,比如MySQL,可以配置是否大小写敏感。所以,你很有可能接手一个MySQL数据库,被设置为大小敏感模式且大部分表名和列名都是小写的,这是,你需要用此策略覆盖默认策略。
一些数据库,比如MySQL,可以配置是否大小写敏感。所以,你很有可能接手一个MySQL数据库,被设置为大小敏感模式且大部分表名和列名都是小写的,这时,你需要用此策略覆盖默认策略。

:::tip
即使`UPPER_CASE`和`LOWER_CASE`都无法满足你的要求,你需要实现自己的策略,也可以考虑继承这个默认策略,而非从头实现。
:::

在介绍默认策略的行为之前,我们先引入一个字符变换规则:snake。

所谓snake,即使把大小写交替的文本转化为下划线拼接的文本,比如类名`BookStore`的snake变形为`BOOK_STORE`,属性名`firstName`的snake变形为`FIRST_NAME`。
所谓snake,即把大小写交替的文本转化为下划线拼接的文本,比如类名`BookStore`的snake变形为`BOOK_STORE`,属性名`firstName`的snake变形为`FIRST_NAME`。

考虑到大小写问题,我们定义两个函数, `u_snake`和`l_snake`,其行为如下

Expand Down Expand Up @@ -197,7 +197,7 @@ DefaultDatabaseNamingStrategy类有两个静态字段

## 覆盖策略

现在,我们来掩饰如何用`DefaultDatabaseNamingStrategy.LOWER_CASE`覆盖默认的`DefaultDatabaseNamingStrategy.UPPER_CASE`。
现在,我们来演示如何用`DefaultDatabaseNamingStrategy.LOWER_CASE`覆盖默认的`DefaultDatabaseNamingStrategy.UPPER_CASE`。

### 使用SpringBoot时

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ sidebar_position: 1
title: 可空性
---

实体对象属性是否许为null这个问题,Jimmer用非常严格的方式处理。即便对Java开发者而言,也要求如同kotlin开发者一样认知考虑思考每个属性是否允许为null。
实体对象属性是否允许为null这个问题,Jimmer用非常严格的方式处理。即便对Java开发者而言,也要求如同kotlin开发者一样认知考虑思考每个属性是否允许为null。

:::caution
明确说明实体对象的每个属性是否允许为null,对Jimmer而言非常重要,很多功能都会其影响
明确说明实体对象的每个属性是否允许为null,对Jimmer而言非常重要,很多功能都会受其影响
:::

## 定义属性的可空性
Expand Down Expand Up @@ -50,7 +50,7 @@ Java下属性是否为null,靠以下规则制定

- JPA/Hibernate推荐将id属性声明为可空类型,比如,对Java而言,就是`Long`而非`long`,这样,保存数据时可表达没有id而需要自动分配的情况。

- Jimmer必须将id属性声明为非空了类型,比如,对Java而言,就是`long`而非`Long`。Jimmer靠实体对象本身的动态性来表达id属性的缺失。
- Jimmer必须将id属性声明为非空类型,比如,对Java而言,就是`long`而非`Long`。Jimmer靠实体对象本身的动态性来表达id属性的缺失。

- 一对多和多对多属性必须非null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ sidebar_position: 4
title: 映射篇
---

在这个章节中,我们会介绍如何映射关系性数据库和实体模型
在这个章节中,我们会介绍如何映射关系型数据库和实体模型

- 对于有ORM经验 *(尤其是JPA经验)* 的读者,可以快速阅读。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ sqlClient.save(store) {
where
STORE_ID = ? /* 2 */
and
// hightlight-next-line
// highlight-next-line
ID not in ( // Be careful, this is `not in`
? /* 10 */, ? /* 100 */
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@ val page = bookRepository.findBooks(

```json
{
// hightlight-next-line
// highlight-next-line
"content":[ // 当前页
{
"id":12,
Expand Down Expand Up @@ -825,9 +825,9 @@ val page = bookRepository.findBooks(
]
}
],
// hightlight-next-line
// highlight-next-line
"totalPages":3, // 共3页
// hightlight-next-line
// highlight-next-line
"totalElements":12, // 分页前共12条数据

...Spring Data的Page对象属性太多,忽略...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ class BookRepository(

## 编写BookController

虽然DTO语言更适合于Java/Kotlin应用内部自己使用查询结果,但你也可以用它们作为HTTP API的返回信息,和实用普通的POJO没有任何区别
虽然DTO语言更适合于Java/Kotlin应用内部自己使用查询结果,但你也可以用它们作为HTTP API的返回信息,和使用普通的POJO没有任何区别

<Tabs groupId="language">
<TabItem value="java" label="Java">
Expand Down Expand Up @@ -902,7 +902,7 @@ data class ShallowBookView(

## Flat关联对象

很大一部分服务端开发团队,会接触到一种前端开开发团队,他们不接受由关联连接多个对象而成的数据结构,只愿意接受一个庞大的孤单对象。因此他们要求讲所有非集合关联都平坦化。即
很大一部分服务端开发团队,会接触到一种前端开发团队,他们不接受由关联连接多个对象而成的数据结构,只愿意接受一个庞大的孤单对象。因此他们要求讲所有非集合关联都平坦化。即

- 他们不接受结构化的返回信息

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ insert into tree_node(

- 中间关联表:
`book_author_mapping`为中间关联表,简称中间表,表示Book和Author之间的多对多关联。
- 中间表在UML图中没有对实体,因为它仅是关系性数据库表示多对多关联的技术手段
- 中间表在UML图中没有对实体,因为它仅是关系型数据库表示多对多关联的技术手段
- 中间表只应该有两个外键字段,指向关联两端的实体。
- 中间表不具备独立id,两个外键联合起来形成主键。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ title: 7. 综合查询
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

截止到目前为止,我们快熟展示了如下功能
截止到目前为止,我们快速展示了如下功能

- 对象抓取器,也就是查询任意形状的数据结构,也就是[抓取关联](./fetch-association)和[递归查询](./recursive-query)中所展示的内容。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ val newestBooks = sqlClient

## Native SQL

为了支持特有数据库产品特有的能力,Jimmer的SQL DSL支持潜入Native SQL表达式。以正则表达式查询为例。
为了支持特有数据库产品特有的能力,Jimmer的SQL DSL支持嵌入Native SQL表达式。以正则表达式查询为例。

<Tabs groupId="language">
<TabItem value="java" label="Java">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ val books = sqlClient
:::caution
Java代码中,第一个whereIf采用Lambda传入表达式。

这是是因为除了`eq`和`ne`能接受null值*(翻译为`is null`和`is not null`)*外,
这是因为除了`eq`和`ne`能接受null值*(翻译为`is null`和`is not null`)*外,
其他条件*(比如,这里的`ilike`)*不接受null并视之为开发人员犯下的BUG。
:::

Expand Down