# persist4j
**Repository Path**: df270464/persist4j
## Basic Information
- **Project Name**: persist4j
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-12-03
- **Last Updated**: 2024-12-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Use by Jitpack
[](https://jitpack.io/#devezhao/persist4j)
[](https://devezhao.github.io/persist4j/index.html)
## Maven
```
jitpack.io
https://jitpack.io
com.github.devezhao
persist4j
LAST_VERSION
```
## 如何使用
### 基础操作对象
使用 [persist4j](https://github.com/devezhao/persist4j) 首先需要了解两个基础对象 `Record` 和 `Query`。`Record` 是一个 Map 实现,他承担了 DAO 职责,而 `Query` 是查询入口,是日常编码中使用最为频繁的类。
#### Record 对象
`Record` 包含了诸多 setter 和 getter 方法,在实现动态化 DAO 职责的同时,还具备对不同数据(字段)类型进行校验的能力。以下是一个基本的使用示例。
```
// 获取数据管理对象
PersistManagerFactory PMF = ...
PersistManager PM = PMF.createPersistManager();
Record record = new StandardRecord()
record.setString("FieldName", "FieldValue");
PM.create(record);
```
> 通常你可以将上述代码封装为一个工具方法进行使用
#### Query 对象
`Query` 的使用主要是对 persist4j 独有的 AJQL (Auto Join Query Language)语句进行理解。AJQL 是 Like-SQL 语法,因此学习和理解起来并不困难。
```
// 获取数据管理对象
PersistManagerFactory PMF = ...
PersistManager PM = PMF.createPersistManager();
String ajql = "select Field1, ReferenceField1.Field2 from Table1 where Field2 = ?";
Record found = PM.createQuery(ajql).setParameter(1, "SomeValue").unique();
```
> 通常你可以将上述代码封装为一个工具方法进行使用
请注意上例中 select 子句中的 `ReferenceField1.Field2` 字段,`ReferenceField1` 是一个引用型字段,因此可以使用 `.` 进行(自动)关联查询(其中 `Field2` 是关联表中的字段)。如果 `Field2` 也是一个引用字段,那么可以继续进行关联查询。
可以看出,通过 AJQL 可以大大简化我们日常查询 SQL 中的表关联操作,同时这也正是 AJQL 名称的由来。
#### Query 自动装箱
经由 `Query` 查询出来的数据并不一定是数据库底层的数据类型,例如 `ID` 主键虽然使用 `varchar` 存储,但是查询后会自动转换为 `ID` 对象(其他字段同理)。这是因为我们会根据元数据的字段定义将其自动装箱,而无需你手动二次处理,同时也保证了数据的严谨性。
### 元数据
动态元数据是支撑 [persist4j](https://github.com/devezhao/persist4j) 的核心,使用 XML 配置,也可以将其存储在数据库中动态加载。无论何种方式没有本质区别,仅在与来源不同。
```
```
以上示例片段来自 [rebuild](https://github.com/getrebuild/rebuild/) 项目,他定义了一个 `ProjectConfig` 实体及其所拥有的字段。关于各配置项的说明,请参考 [metadata.dtd](https://github.com/devezhao/persist4j/blob/master/src/main/resources/metadata.dtd) 。
元数据的配置最终会被映射为 `Entity` 和 `Field` 对象,可以对元数据进行操作。
#### 主键 ID
`ID` 对象即主键对象,其生成规则为 `([0-9]{3}-[0-9a-h]{16})`,其中前 3 位为实体码(不足 3 位前面补 0),其后为 `-` 分隔符,最后为 16 位随机 Hash 码(不区分大小写)。可以看出,通过 ID 我们可以识别其属于哪个实体。
### 最佳实践
我们建议你将 [persist4j](https://github.com/devezhao/persist4j) 与 Spring 配合使用,可以大大简化编码。当然,这不是必须的。通过参考 [rebuild](https://github.com/getrebuild/rebuild/) 项目你可以进行更多的了解。