Add ordering methods to query builder in DAO classes

This commit is contained in:
2022-08-26 10:42:03 +02:00
parent db7121338d
commit a8b2e81c4c
2 changed files with 57 additions and 2 deletions

View File

@@ -0,0 +1,13 @@
package com.bartlomiejpluta.base.lib.db;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public enum Ordering {
ASC("ASC"),
DESC("DESC");
@Getter
private final String ordering;
}

View File

@@ -321,7 +321,18 @@ class DataAccessObjectCodeGenerator : CodeGenerator {
Modifier.PRIVATE, Modifier.PRIVATE,
Modifier.FINAL Modifier.FINAL
) )
.initializer("new \$T<>()", LinkedList::class.java).build() .initializer("new \$T<>()", LinkedList::class.java)
.build()
)
.addField(
FieldSpec.builder(
ParameterizedTypeName.get(ClassName.get(List::class.java), TypeName.get(String::class.java)),
"ordering",
Modifier.PRIVATE,
Modifier.FINAL
)
.initializer("new \$T<>()", LinkedList::class.java)
.build()
) )
.addMethod( .addMethod(
MethodSpec.methodBuilder("where") MethodSpec.methodBuilder("where")
@@ -334,6 +345,35 @@ class DataAccessObjectCodeGenerator : CodeGenerator {
.addStatement("return this") .addStatement("return this")
.build() .build()
) )
.addMethod(
MethodSpec.methodBuilder("orderBy")
.addModifiers(Modifier.PUBLIC)
.addParameter(COLUMN_ENUM, "column")
.addParameter(ORDERING_ENUM, "order")
.returns(QUERY_BUILDER_CLASS)
.addStatement("this.ordering.add(String.format(\"`%s %s\", column.column, order.getOrdering()))")
.addStatement("return this")
.build()
)
.addMethod(
MethodSpec.methodBuilder("orderBy")
.addModifiers(Modifier.PUBLIC)
.addParameter(String::class.java, "function")
.addParameter(ORDERING_ENUM, "order")
.returns(QUERY_BUILDER_CLASS)
.addStatement("this.ordering.add(String.format(\"`%s %s\", function, order.getOrdering()))")
.addStatement("return this")
.build()
)
.addMethod(
MethodSpec.methodBuilder("orderBy")
.addModifiers(Modifier.PUBLIC)
.addParameter(String::class.java, "function")
.returns(QUERY_BUILDER_CLASS)
.addStatement("this.ordering.add(function)")
.addStatement("return this")
.build()
)
.addMethod( .addMethod(
MethodSpec.methodBuilder("find") MethodSpec.methodBuilder("find")
.addModifiers(Modifier.PUBLIC) .addModifiers(Modifier.PUBLIC)
@@ -344,9 +384,10 @@ class DataAccessObjectCodeGenerator : CodeGenerator {
"var filter = filters.stream().map(f -> String.format(\"`%s` %s ?\", f.column.column, f.op.getOp())).collect(\$T.joining(\" AND \"))", "var filter = filters.stream().map(f -> String.format(\"`%s` %s ?\", f.column.column, f.op.getOp())).collect(\$T.joining(\" AND \"))",
COLLECTORS_CLASS COLLECTORS_CLASS
) )
.addStatement("var order = ordering.isEmpty() ? \"\" : \" ORDER BY \" + ordering.stream().collect(\$T.joining(\", \"))", COLLECTORS_CLASS)
.apply { .apply {
val sql = "SELECT * FROM `${table.name}` WHERE " val sql = "SELECT * FROM `${table.name}` WHERE "
addStatement("var statement = db.prepareStatement(\"$sql\" + filter)") addStatement("var statement = db.prepareStatement(\"$sql\" + filter + order)")
} }
.addStatement("var i = 1") .addStatement("var i = 1")
.beginControlFlow("for (var f : filters)") .beginControlFlow("for (var f : filters)")
@@ -436,6 +477,7 @@ class DataAccessObjectCodeGenerator : CodeGenerator {
private val COLUMN_ENUM = ClassName.get("", "Column") private val COLUMN_ENUM = ClassName.get("", "Column")
private val RELOP_ENUM = ClassName.get("com.bartlomiejpluta.base.lib.db", "Relop") private val RELOP_ENUM = ClassName.get("com.bartlomiejpluta.base.lib.db", "Relop")
private val ORDERING_ENUM = ClassName.get("com.bartlomiejpluta.base.lib.db", "Ordering")
private val QUERY_FILTER_CLASS = ClassName.get("", "QueryFilter") private val QUERY_FILTER_CLASS = ClassName.get("", "QueryFilter")
private val QUERY_BUILDER_CLASS = ClassName.get("", "QueryBuilder") private val QUERY_BUILDER_CLASS = ClassName.get("", "QueryBuilder")
private val COLLECTORS_CLASS = ClassName.get("java.util.stream", "Collectors") private val COLLECTORS_CLASS = ClassName.get("java.util.stream", "Collectors")