Skip to content

Commit

Permalink
update documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
vzakharchenko committed Mar 11, 2020
1 parent 50084ed commit 006db4c
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 44 deletions.
148 changes: 108 additions & 40 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
- cache queries based on Primary Key, Column, and Column and Values
- synchronization cache with crud operations
- support clustering( if use distributed cache)
- support create Sql sequence on runtime
- support create/update View on runtime

# dependencies
- [querydsl](http://www.querydsl.com/) - crud operation(insert, update, delete), querying (select, union, with)
Expand All @@ -51,7 +53,7 @@
<dependency>
<groupId>com.github.vzakharchenko</groupId>
<artifactId>dynamic-orm-core</artifactId>
<version>1.0.0</version>
<version>1.0.1</version>
</dependency>
</dependencies>
```
Expand Down Expand Up @@ -198,13 +200,16 @@ public class SpringAnnotationTest extends CachingConfigurerSupport {
```java
@Transactional()
public void testQuery() {
qDynamicTableFactory.buildTable("firstTable")
.addPrimaryStringKey("Id", 255)
.addPrimaryKeyGenerator(UUIDPKGenerator.getInstance())
.createStringColumn("TestStringColumn", 255, false)
.createDateTimeColumn("modificationTime", true)
qDynamicTableFactory.buildTables("firstTable")
.addColumns().addStringColumn("Id")
.size(255).useAsPrimaryKey().create()
.addStringColumn("TestStringColumn").size(255).create()
.addDateColumn("modificationTime").create()
.finish()
.addPrimaryKey().addPrimaryKeyGenerator(UUIDPKGenerator.getInstance())
.finish()
.addVersionColumn("modificationTime")
.buildSchema();
.finish().buildSchema();
}
```
- get table metadata
Expand All @@ -220,9 +225,9 @@ qDynamicTableFactory.buildTable("firstTable")
- modify table metadata
```java
// add integer column to table
qDynamicTableFactory.buildTable("firstTable")
.createNumberColumn("newColumn", Integer.class, null, null, false)
.buildSchema();
qDynamicTableFactory.buildTables("firstTable")
.addColumns().addNumberColumn("newColumn", Integer.class).create().finish()
.finish().buildSchema();
```
- update operation
```java
Expand Down Expand Up @@ -278,27 +283,32 @@ qDynamicTableFactory.buildTable("firstTable")
// suspend the current transaction if one exists.
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testQuery() {
TransactionBuilder transactionManager = ormQueryFactory.transactionManager();
TransactionBuilder transactionManager = ormQueryFactory.transactionManager();
transactionManager.startTransactionIfNeeded();
// build schema
qDynamicTableFactory.buildTable("firstTable")
.addPrimaryStringKey("Id", 255)
.addPrimaryKeyGenerator(UUIDPKGenerator.getInstance())
.createStringColumn("TestStringColumn", 255, false)
.createDateTimeColumn("modificationTime", true)
qDynamicTableFactory.buildTables("firstTable")
.addColumns().addStringColumn("Id")
.size(255).useAsPrimaryKey().create()
.addStringColumn("TestStringColumn").size(255).create()
.addDateColumn("modificationTime").create()
.finish()
.addPrimaryKey().addPrimaryKeyGenerator(UUIDPKGenerator.getInstance())
.finish()
.addVersionColumn("modificationTime")
.buildNextTable("secondTable")
.addPrimaryStringKey("Id", 255)
.addPrimaryKeyGenerator(UUIDPKGenerator.getInstance())
.createBooleanColumn("isDeleted", false)
.addColumns().addStringColumn("Id")
.size(255).useAsPrimaryKey().create()
.addBooleanColumn("isDeleted").notNull().create()
.addDateTimeColumn("modificationTime").notNull().create()
.addStringColumn("linkToFirstTable").size(255).create()
.addStringColumn("uniqValue").size(255).create()
.finish()
.addPrimaryKey().addPrimaryKeyGenerator(UUIDPKGenerator.getInstance()).finish()
.addSoftDeleteColumn("isDeleted", true, false)
.createDateTimeColumn("modificationTime", true)
.addVersionColumn("modificationTime")
.createStringColumn("linkToFirstTable", 255, false)
.createStringColumn("uniqValue", 255, false)
.addIndex("uniqValue", true)
.addForeignKey("linkToFirstTable", "firstTable")
.buildSchema();
.addIndex().buildIndex("uniqValue", true)
.addForeignKey().buildForeignKey("linkToFirstTable", "firstTable")
.finish().buildSchema();
transactionManager.commit();

QDynamicTable firstTable = qDynamicTableFactory.getQDynamicTableByName("firstTable");
Expand All @@ -325,9 +335,9 @@ qDynamicTableFactory.buildTable("firstTable")

// add integer column to table1
transactionManager.startTransactionIfNeeded();
qDynamicTableFactory.buildTable("firstTable")
.createNumberColumn("newColumn", Integer.class, null, null, false)
.buildSchema();
qDynamicTableFactory.buildTables("firstTable")
.addColumns().addNumberColumn("newColumn", Integer.class).create().finish()
.finish().buildSchema();
transactionManager.commit();


Expand Down Expand Up @@ -357,14 +367,13 @@ qDynamicTableFactory.buildTable("firstTable")

//soft delete the second row of the second Table
transactionManager.startTransactionIfNeeded();
DynamicTableModel dynamicTableModel = tableModels.get(1);
ormQueryFactory.softDeleteById(dynamicTableModel);
ormQueryFactory.softDeleteById(secondModel2);
transactionManager.commit();

// get new cache records (soft deleted values are not included)
tableModels = ormQueryFactory.selectCache().findAll(secondTable, DynamicTableModel.class);
assertEquals(tableModels.size(), 1);

// select all data from all table
List<RawModel> rawModels = ormQueryFactory.select().rawSelect(
ormQueryFactory.buildQuery().from(firstTable)
Expand All @@ -373,13 +382,14 @@ qDynamicTableFactory.buildTable("firstTable")
firstTable.getStringColumnByName("Id")))
.where(secondTable.getBooleanColumnByName("isDeleted").eq(false)))
.findAll(ArrayUtils.addAll(firstTable.all(), secondTable.all()));

assertEquals(rawModels.size(), 1);
RawModel rawModel = rawModels.get(0);
DynamicTableModel firstModelFromJoin = rawModel.getDynamicModel(firstTable);
DynamicTableModel secondModelFromJoin = rawModel.getDynamicModel(secondTable);
assertEquals(firstModelFromJoin.getValue("Id"), firstTableFromDatabase.getValue("Id"));
assertEquals(secondModelFromJoin.getValue("Id"), secondModel1.getValue("Id"));
}
```
# Static Tables(not Dynamic)
## - QueryDsl Models (Table Metadata)
Expand Down Expand Up @@ -487,14 +497,15 @@ Annotations:
TestTableVersionAnnotation staticTable = new TestTableVersionAnnotation();
ormQueryFactory.insert(staticTable);
// build dynamic Table with foreign Key to Static Table
qDynamicTableFactory.buildTable("relatedTable")
.addPrimaryStringKey("Id", 255)
.addPrimaryKeyGenerator(UUIDPKGenerator.getInstance())
.createDateTimeColumn("modificationTime", true)
qDynamicTableFactory.buildTables("relatedTable")
.addColumns().addStringColumn("Id").size(255).useAsPrimaryKey().create()
.addNumberColumn("StaticId", Integer.class).create()
.addDateTimeColumn("modificationTime").notNull().create()
.finish()
.addPrimaryKey().addPrimaryKeyGenerator(UUIDPKGenerator.getInstance()).finish()
.addVersionColumn("modificationTime")
.createNumberColumn("StaticId", Integer.class, null, null, false)
.addForeignKey("StaticId", QTestTableVersionAnnotation.qTestTableVersionAnnotation, QTestTableVersionAnnotation.qTestTableVersionAnnotation.id)
.buildSchema();
.addForeignKey().buildForeignKey("StaticId", QTestTableVersionAnnotation.qTestTableVersionAnnotation, QTestTableVersionAnnotation.qTestTableVersionAnnotation.id)
.finish().buildSchema();

// get dynamic table metadata
QDynamicTable relatedTable = qDynamicTableFactory.getQDynamicTableByName("relatedTable");
Expand Down Expand Up @@ -582,7 +593,7 @@ pom.xml
</build>
```

# Audit Database changing
# Audit database changes
[Example: Logging Audit](dynamic-orm-examples/example-test-ehcache/src/main/java/orm/query/examples/ehcache/LogAudit.java)
```java
@Component
Expand Down Expand Up @@ -634,4 +645,61 @@ public class LogAudit implements ApplicationListener<CacheEvent> {
}
}
}
```
# Create Dynamic Table With Sequence Primary Key Generator
```java
qDynamicTableFactory.
.createSequence("dynamicTestTableSequance1")
.initialValue(1000L)
.increment(10L)
.min(1000L)
.max(10000L)
.finish()
.buildSchema();
```

# Create SQL Sequence on runtime
```java
qDynamicTableFactory.buildTables("dynamicTestTable")
.addColumns().addNumberColumn("ID", Integer.class).useAsPrimaryKey().create()
.addStringColumn("testColumn").size(100).create()
.finish()
.addPrimaryKey().addPrimaryKeyGenerator(new PKGeneratorSequence("dynamicTestTableSequance1")).finish()
.finish()
.createSequence("dynamicTestTableSequance1")
.initialValue(1000L)
.finish()
.buildSchema();
```
# Create SQL View on runtime
```java
qDynamicTableFactory
.createView("testView").resultSet(ormQueryFactory.buildQuery()
.from(QTestTableVersionAnnotation.qTestTableVersionAnnotation), QTestTableVersionAnnotation.qTestTableVersionAnnotation.id)
.finish()
.buildSchema();
```
# use SQL View on select queries

```java
qDynamicTableFactory
.createView("testView").resultSet(ormQueryFactory.buildQuery()
.from(QTestTableVersionAnnotation.qTestTableVersionAnnotation), QTestTableVersionAnnotation.qTestTableVersionAnnotation.id).finish()
.buildSchema();

QDynamicTable testView = qDynamicTableFactory.getQDynamicTableByName("testView");
assertNotNull(testView);

TestTableVersionAnnotation testTableVersionAnnotation = new TestTableVersionAnnotation();
ormQueryFactory.insert(testTableVersionAnnotation);

// select from table
TestTableVersionAnnotation versionAnnotation = ormQueryFactory.select()
.findOne(ormQueryFactory.buildQuery(), TestTableVersionAnnotation.class);
assertNotNull(versionAnnotation);

// select from View
DynamicTableModel dynamicTableModel = ormQueryFactory.select()
.findOne(ormQueryFactory.buildQuery().from(testView), testView, DynamicTableModel.class);
assertNotNull(dynamicTableModel);
```
Original file line number Diff line number Diff line change
Expand Up @@ -396,11 +396,10 @@ public void testViewTestUnsupported() {
.findOne(ormQueryFactory.buildQuery(), TestTableVersionAnnotation.class);
assertNotNull(versionAnnotation);


// select from View
Object[] one = ormQueryFactory.select()
.findOne(ormQueryFactory.buildQuery().from(testView), Wildcard.all);
assertNotNull(one);
DynamicTableModel dynamicTableModel = ormQueryFactory.select()
.findOne(ormQueryFactory.buildQuery().from(testView), testView, DynamicTableModel.class);
assertNotNull(dynamicTableModel);
}

@Test
Expand Down

0 comments on commit 006db4c

Please sign in to comment.