1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.runtime.kotlin.elements;
17
18 import java.util.List;
19
20 import org.mybatis.generator.api.IntrospectedColumn;
21 import org.mybatis.generator.api.dom.kotlin.FullyQualifiedKotlinType;
22 import org.mybatis.generator.api.dom.kotlin.KotlinArg;
23 import org.mybatis.generator.api.dom.kotlin.KotlinFile;
24 import org.mybatis.generator.api.dom.kotlin.KotlinFunction;
25 import org.mybatis.generator.codegen.mybatis3.ListUtilities;
26 import org.mybatis.generator.runtime.dynamic.sql.elements.Utils;
27
28 public class InsertMultipleMethodGenerator extends AbstractKotlinFunctionGenerator {
29 private final FullyQualifiedKotlinType recordType;
30 private final String mapperName;
31 private final String supportObjectImport;
32
33 private InsertMultipleMethodGenerator(Builder builder) {
34 super(builder);
35 recordType = builder.recordType;
36 mapperName = builder.mapperName;
37 supportObjectImport = builder.supportObjectImport;
38 }
39
40 @Override
41 public KotlinFunctionAndImports generateMethodAndImports() {
42 if (!Utils.generateMultipleRowInsert(introspectedTable)) {
43 return null;
44 }
45
46
47
48 String functionImport;
49 String functionShortName;
50 if (Utils.canRetrieveMultiRowGeneratedKeys(introspectedTable)) {
51 functionImport =
52 "org.mybatis.dynamic.sql.util.kotlin.mybatis3.insertMultipleWithGeneratedKeys";
53 functionShortName = "insertMultipleWithGeneratedKeys";
54 } else {
55 functionImport = "org.mybatis.dynamic.sql.util.kotlin.mybatis3.insertMultiple";
56 functionShortName = "insertMultiple";
57 }
58
59 KotlinFunctionAndImports functionAndImports = KotlinFunctionAndImports.withFunction(
60 KotlinFunction.newOneLineFunction(mapperName + ".insertMultiple")
61 .withArgument(KotlinArg.newArg("records")
62 .withDataType("Collection<"
63 + recordType.getShortNameWithTypeArguments()
64 + ">")
65 .build())
66 .build())
67 .withImport(functionImport)
68 .withImports(recordType.getImportList())
69 .build();
70
71 addFunctionComment(functionAndImports);
72
73 KotlinFunction function = functionAndImports.getFunction();
74
75 function.addCodeLine(functionShortName + "(this::insertMultiple"
76 + ", records, " + tableFieldName
77 + ") {");
78
79 List<IntrospectedColumn> columns =
80 ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns());
81 for (IntrospectedColumn column : columns) {
82 AbstractKotlinFunctionGenerator.FieldNameAndImport fieldNameAndImport =
83 AbstractKotlinFunctionGenerator.calculateFieldNameAndImport(tableFieldName,
84 supportObjectImport, column);
85 functionAndImports.getImports().add(fieldNameAndImport.importString());
86
87 function.addCodeLine(" map(" + fieldNameAndImport.fieldName()
88 + ") toProperty \"" + column.getJavaProperty()
89 + "\"");
90 }
91
92 function.addCodeLine("}");
93
94 return functionAndImports;
95 }
96
97 @Override
98 public boolean callPlugins(KotlinFunction kotlinFunction, KotlinFile kotlinFile) {
99 return context.getPlugins().clientInsertMultipleMethodGenerated(kotlinFunction, kotlinFile, introspectedTable);
100 }
101
102 public static class Builder extends BaseBuilder<Builder> {
103 private FullyQualifiedKotlinType recordType;
104 private String mapperName;
105 private String supportObjectImport;
106
107 public Builder withRecordType(FullyQualifiedKotlinType recordType) {
108 this.recordType = recordType;
109 return this;
110 }
111
112 public Builder withMapperName(String mapperName) {
113 this.mapperName = mapperName;
114 return this;
115 }
116
117 public Builder withSupportObjectImport(String supportObjectImport) {
118 this.supportObjectImport = supportObjectImport;
119 return this;
120 }
121
122 @Override
123 public Builder getThis() {
124 return this;
125 }
126
127 public InsertMultipleMethodGenerator build() {
128 return new InsertMultipleMethodGenerator(this);
129 }
130 }
131 }