/** * Copyright 2006-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mybatis.generator.runtime.dynamic.sql.elements; import java.util.HashSet; import java.util.Set; import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType; import org.mybatis.generator.api.dom.java.Interface; import org.mybatis.generator.api.dom.java.Method; public class SelectByPrimaryKeyMethodGenerator extends AbstractMethodGenerator { private FullyQualifiedJavaType recordType; private FragmentGenerator fragmentGenerator; private SelectByPrimaryKeyMethodGenerator(Builder builder) { super(builder); recordType = builder.recordType; fragmentGenerator = builder.fragmentGenerator; } @Override public MethodAndImports generateMethodAndImports() { if (!introspectedTable.getRules().generateSelectByPrimaryKey()) { return null; } Set<FullyQualifiedJavaType> imports = new HashSet<>(); imports.add(new FullyQualifiedJavaType("org.mybatis.dynamic.sql.select.SelectDSL")); imports.add(recordType); Method method = new Method("selectByPrimaryKey"); method.setDefault(true); context.getCommentGenerator().addGeneralMethodAnnotation(method, introspectedTable, imports); method.setReturnType(recordType); StringBuilder sb = new StringBuilder(); sb.append("return SelectDSL.selectWithMapper(this::selectOne, "); sb.append(fragmentGenerator.getSelectList()); sb.append(')'); method.addBodyLine(sb.toString()); method.addBodyLine(" .from(" + tableFieldName + ")"); //$NON-NLS-2$ MethodAndImports.Builder builder = MethodAndImports.withMethod(method) .withStaticImport("org.mybatis.dynamic.sql.SqlBuilder.*") .withImports(imports); MethodParts methodParts = fragmentGenerator.getPrimaryKeyWhereClauseAndParameters(); acceptParts(builder, method, methodParts); method.addBodyLine(" .build()"); method.addBodyLine(" .execute();"); return builder.build(); } @Override public boolean callPlugins(Method method, Interface interfaze) { return context.getPlugins().clientSelectByPrimaryKeyMethodGenerated(method, interfaze, introspectedTable); } public static class Builder extends BaseBuilder<Builder, SelectByPrimaryKeyMethodGenerator> { private FullyQualifiedJavaType recordType; private FragmentGenerator fragmentGenerator; public Builder withRecordType(FullyQualifiedJavaType recordType) { this.recordType = recordType; return this; } public Builder withFragmentGenerator(FragmentGenerator fragmentGenerator) { this.fragmentGenerator = fragmentGenerator; return this; } @Override public Builder getThis() { return this; } @Override public SelectByPrimaryKeyMethodGenerator build() { return new SelectByPrimaryKeyMethodGenerator(this); } } }