[jOOQ/jOOQ#5412] Generate a Record to POJO mapper on generated records
This commit is contained in:
parent
385887eb51
commit
45c298a4bc
@ -75,6 +75,7 @@ abstract class AbstractGenerator implements Generator {
|
||||
boolean generateEmbeddables = true;
|
||||
boolean generateRecords = true;
|
||||
boolean generateRecordsImplementingRecordN = true;
|
||||
boolean generateRecordToPojoMappers = true;
|
||||
boolean generatePojos = false;
|
||||
boolean generatePojosEqualsAndHashCode = false;
|
||||
boolean generatePojosToString = true;
|
||||
@ -389,6 +390,16 @@ abstract class AbstractGenerator implements Generator {
|
||||
this.generateRecordsImplementingRecordN = generateRecordsImplementingRecordN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean generateRecordToPojoMappers() {
|
||||
return generateRecords() && generatePojos() && generateRecordToPojoMappers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenerateRecordToPojoMappers(boolean generateRecordToPojoMappers) {
|
||||
this.generateRecordToPojoMappers = generateRecordToPojoMappers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean generatePojos() {
|
||||
|
||||
|
||||
@ -668,6 +668,8 @@ public class GenerationTool {
|
||||
generator.setGenerateRecords(g.getGenerate().isRecords());
|
||||
if (g.getGenerate().isRecordsImplementingRecordN() != null)
|
||||
generator.setGenerateRecordsImplementingRecordN(g.getGenerate().isRecordsImplementingRecordN());
|
||||
if (g.getGenerate().isRecordToPojoMappers() != null)
|
||||
generator.setGenerateRecordToPojoMappers(g.getGenerate().isRecordToPojoMappers());
|
||||
if (g.getGenerate().isPojos() != null)
|
||||
generator.setGeneratePojos(g.getGenerate().isPojos());
|
||||
if (g.getGenerate().isImmutablePojos() != null)
|
||||
|
||||
@ -232,6 +232,16 @@ public interface Generator {
|
||||
*/
|
||||
void setGenerateRecordsImplementingRecordN(boolean generateRecordsImplementingRecordN);
|
||||
|
||||
/**
|
||||
* Whether out of the box record to POJO mappers should be generated.
|
||||
*/
|
||||
boolean generateRecordToPojoMappers();
|
||||
|
||||
/**
|
||||
* Whether out of the box record to POJO mappers should be generated.
|
||||
*/
|
||||
void setGenerateRecordToPojoMappers(boolean generateRecordToPojoMappers);
|
||||
|
||||
/**
|
||||
* Whether POJO's should be generated in addition to records
|
||||
*/
|
||||
|
||||
@ -94,6 +94,7 @@ import org.jooq.OrderField;
|
||||
import org.jooq.Package;
|
||||
import org.jooq.Parameter;
|
||||
import org.jooq.Record;
|
||||
import org.jooq.RecordMapper;
|
||||
import org.jooq.Result;
|
||||
import org.jooq.Row;
|
||||
import org.jooq.Schema;
|
||||
@ -1589,6 +1590,53 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.tab(1).println("}");
|
||||
}
|
||||
|
||||
if (generateRecordToPojoMappers()) {
|
||||
final String pojoName = out.ref(getStrategy().getFullJavaClassName(tableUdtOrEmbeddable, Mode.POJO));
|
||||
|
||||
// Feature not supported in the Scala generator
|
||||
if (scala) {
|
||||
}
|
||||
else {
|
||||
out.println();
|
||||
out.tab(1).println("public %s<%s, %s> mapper() {", RecordMapper.class, className, pojoName);
|
||||
out.tab(2).println("return new %s<%s, %s>() {", RecordMapper.class, className, pojoName);
|
||||
out.tab(3).override();
|
||||
out.tab(3).println("public %s map(%s record) {", pojoName, className);
|
||||
|
||||
if (generateImmutablePojos()) {
|
||||
out.tab(4).println("return new %s(", pojoName);
|
||||
|
||||
for (int i = 0; i < degree; i++) {
|
||||
final TypedElementDefinition<?> column = columns.get(i);
|
||||
final String columnGetter = getStrategy().getJavaGetterName(column, Mode.RECORD);
|
||||
|
||||
out.tab(5).println("%s()[[%s]]", columnGetter, list(i == degree - 1 ? null : ","));
|
||||
}
|
||||
|
||||
out.tab(4).println(");");
|
||||
}
|
||||
else {
|
||||
out.tab(4).println("%s result = new %s();", pojoName, pojoName);
|
||||
out.println();
|
||||
|
||||
for (int i = 0; i < degree; i++) {
|
||||
final TypedElementDefinition<?> column = columns.get(i);
|
||||
final String columnGetter = getStrategy().getJavaGetterName(column, Mode.RECORD);
|
||||
final String columnSetter = getStrategy().getJavaSetterName(column, Mode.POJO);
|
||||
|
||||
out.tab(4).println("result.%s(%s());", columnSetter, columnGetter);
|
||||
}
|
||||
|
||||
out.println();
|
||||
out.tab(4).println("return result;");
|
||||
}
|
||||
|
||||
out.tab(3).println("}");
|
||||
out.tab(2).println("};");
|
||||
out.tab(1).println("}");
|
||||
}
|
||||
}
|
||||
|
||||
if (tableUdtOrEmbeddable instanceof TableDefinition)
|
||||
generateRecordClassFooter((TableDefinition) tableUdtOrEmbeddable, out);
|
||||
else if (tableUdtOrEmbeddable instanceof EmbeddableDefinition)
|
||||
|
||||
@ -65,6 +65,8 @@ public class Generate implements Serializable
|
||||
protected Boolean records = true;
|
||||
@XmlElement(defaultValue = "true")
|
||||
protected Boolean recordsImplementingRecordN = true;
|
||||
@XmlElement(defaultValue = "true")
|
||||
protected Boolean recordToPojoMappers = true;
|
||||
@XmlElement(defaultValue = "false")
|
||||
protected Boolean pojos = false;
|
||||
@XmlElement(defaultValue = "false")
|
||||
@ -601,6 +603,30 @@ public class Generate implements Serializable
|
||||
this.recordsImplementingRecordN = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* If both {@link #records} and {@link #pojos} are generated, then an auxiliary default {@link org.jooq.RecordMapper} can be generated as well, that bypasses reflection.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link Boolean }
|
||||
*
|
||||
*/
|
||||
public Boolean isRecordToPojoMappers() {
|
||||
return recordToPojoMappers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the recordToPojoMappers property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link Boolean }
|
||||
*
|
||||
*/
|
||||
public void setRecordToPojoMappers(Boolean value) {
|
||||
this.recordToPojoMappers = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate POJOs.
|
||||
*
|
||||
@ -1869,6 +1895,11 @@ public class Generate implements Serializable
|
||||
return this;
|
||||
}
|
||||
|
||||
public Generate withRecordToPojoMappers(Boolean value) {
|
||||
setRecordToPojoMappers(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Generate withPojos(Boolean value) {
|
||||
setPojos(value);
|
||||
return this;
|
||||
@ -2202,6 +2233,11 @@ public class Generate implements Serializable
|
||||
sb.append(recordsImplementingRecordN);
|
||||
sb.append("</recordsImplementingRecordN>");
|
||||
}
|
||||
if (recordToPojoMappers!= null) {
|
||||
sb.append("<recordToPojoMappers>");
|
||||
sb.append(recordToPojoMappers);
|
||||
sb.append("</recordToPojoMappers>");
|
||||
}
|
||||
if (pojos!= null) {
|
||||
sb.append("<pojos>");
|
||||
sb.append(pojos);
|
||||
@ -2619,6 +2655,15 @@ public class Generate implements Serializable
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (recordToPojoMappers == null) {
|
||||
if (other.recordToPojoMappers!= null) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!recordToPojoMappers.equals(other.recordToPojoMappers)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (pojos == null) {
|
||||
if (other.pojos!= null) {
|
||||
return false;
|
||||
@ -3076,6 +3121,7 @@ public class Generate implements Serializable
|
||||
result = ((prime*result)+((embeddables == null)? 0 :embeddables.hashCode()));
|
||||
result = ((prime*result)+((records == null)? 0 :records.hashCode()));
|
||||
result = ((prime*result)+((recordsImplementingRecordN == null)? 0 :recordsImplementingRecordN.hashCode()));
|
||||
result = ((prime*result)+((recordToPojoMappers == null)? 0 :recordToPojoMappers.hashCode()));
|
||||
result = ((prime*result)+((pojos == null)? 0 :pojos.hashCode()));
|
||||
result = ((prime*result)+((pojosEqualsAndHashCode == null)? 0 :pojosEqualsAndHashCode.hashCode()));
|
||||
result = ((prime*result)+((pojosToString == null)? 0 :pojosToString.hashCode()));
|
||||
|
||||
@ -1075,6 +1075,10 @@ jOOQ version used for source code.]]></jxb:javadoc></jxb:property></appinfo></an
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate TableRecord classes that implement Record[N] super types]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="recordToPojoMappers" type="boolean" default="true" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[If both {@link #records} and {@link #pojos} are generated, then an auxiliary default {@link org.jooq.RecordMapper} can be generated as well, that bypasses reflection.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="pojos" type="boolean" default="false" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user