diff options
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java')
-rw-r--r-- | container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java new file mode 100644 index 0000000..fe50e17 --- /dev/null +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java @@ -0,0 +1,65 @@ +package io.trygvis.persistence; + +import io.trygvis.container.compiler.model.ClassG; +import io.trygvis.container.compiler.model.ParameterRef; +import io.trygvis.container.compiler.model.TypeRef; + +import javax.lang.model.type.TypeMirror; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.commons.lang.StringUtils.join; + +public class EntityMirror { + public final GeneratorSupport generatorSupport; + public final List<FieldMirror> fields = new ArrayList<>(); + public final TypeMirror javaName; + public final String tableName; + + public EntityMirror(GeneratorSupport generatorSupport, TypeMirror javaName, String tableName) { + this.generatorSupport = generatorSupport; + this.javaName = javaName; + this.tableName = tableName; + } + + public void add(FieldMirror field) { + fields.add(field); + } + + public String insertIntoSql() { + List<String> names = new ArrayList<>(); + List<String> placeholders = new ArrayList<>(); + for (FieldMirror field : fields) { + names.add(field.sqlName); + placeholders.add("?"); + } + + return "INSERT INTO " + tableName + "(" + join(names, ", ") + ") " + + "VALUES(" + join(placeholders, ", ") + ");"; + } + + public void insertInto(ClassG g) { + TypeRef conType = g.addImport(Connection.class); + TypeRef psType = g.addImport(PreparedStatement.class); + TypeRef objectType = g.addImport(javaName); + ParameterRef con = new ParameterRef(conType, "con"); + ParameterRef object = new ParameterRef(objectType, "o"); + + List<String> body = new ArrayList<>(); + + body.add("try(" + psType.name + " stmt = " + con.name + ".prepareStatement(insertIntoSql)) {"); + for (int i = 0; i < fields.size(); i++) { + FieldMirror field = fields.get(i); + TypeHandler typeHandler = generatorSupport.typeHandler(field.element); + body.add(" stmt." + typeHandler.resultSetSetter(i + 1, "o", field) + ";"); + } + body.add(" stmt.executeUpdate();"); + body.add("}"); + + g.addMethod(body, TypeRef.VOID, "insertInto", con, object). + exception(g.addImport(SQLException.class)); + } +} |