Commit 1f5e57dc authored by hewei's avatar hewei

对于Model生成WithBLOBs类时,SelectOneByExample插件实现行为和官方插件保持一致

parent 9b500d99
...@@ -38,6 +38,7 @@ import static org.mybatis.generator.internal.util.StringUtility.stringHasValue; ...@@ -38,6 +38,7 @@ import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
*/ */
public class SelectOneByExamplePlugin extends BasePlugin { public class SelectOneByExamplePlugin extends BasePlugin {
public static final String METHOD_SELECT_ONE_BY_EXAMPLE = "selectOneByExample"; // 方法名 public static final String METHOD_SELECT_ONE_BY_EXAMPLE = "selectOneByExample"; // 方法名
public static final String METHOD_SELECT_ONE_BY_EXAMPLE_WITH_BLOBS = "selectOneByExampleWithBLOBs"; // 方法名
/** /**
* Java Client Methods 生成 * Java Client Methods 生成
...@@ -50,18 +51,35 @@ public class SelectOneByExamplePlugin extends BasePlugin { ...@@ -50,18 +51,35 @@ public class SelectOneByExamplePlugin extends BasePlugin {
*/ */
@Override @Override
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
// 方法生成 // 方法生成 selectOneByExample
Method method = JavaElementGeneratorTools.generateMethod( Method method = JavaElementGeneratorTools.generateMethod(
METHOD_SELECT_ONE_BY_EXAMPLE, METHOD_SELECT_ONE_BY_EXAMPLE,
JavaVisibility.DEFAULT, JavaVisibility.DEFAULT,
introspectedTable.getRules().calculateAllFieldsClass(), JavaElementGeneratorTools.getModelTypeWithoutBLOBs(introspectedTable),
new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example") new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example")
); );
commentGenerator.addGeneralMethodComment(method, introspectedTable); commentGenerator.addGeneralMethodComment(method, introspectedTable);
// interface 增加方法 // interface 增加方法
interfaze.addMethod(method); interfaze.addMethod(method);
logger.debug("itfsw(查询单条数据插件):"+interfaze.getType().getShortName()+"增加SelectOneByExample方法。"); logger.debug("itfsw(查询单条数据插件):"+interfaze.getType().getShortName()+"增加selectOneByExample方法。");
// 方法生成 selectOneByExampleWithBLOBs
if (introspectedTable.getRules().generateRecordWithBLOBsClass()){
// 方法生成 selectOneByExample
Method method1 = JavaElementGeneratorTools.generateMethod(
METHOD_SELECT_ONE_BY_EXAMPLE_WITH_BLOBS,
JavaVisibility.DEFAULT,
JavaElementGeneratorTools.getModelTypeWithBLOBs(introspectedTable),
new Parameter(new FullyQualifiedJavaType(introspectedTable.getExampleType()), "example")
);
commentGenerator.addGeneralMethodComment(method1, introspectedTable);
// interface 增加方法
interfaze.addMethod(method1);
logger.debug("itfsw(查询单条数据插件):"+interfaze.getType().getShortName()+"增加selectOneByExampleWithBLOBs方法。");
}
return true; return true;
} }
...@@ -75,9 +93,7 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable); ...@@ -75,9 +93,7 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable);
*/ */
@Override @Override
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
//数据库表名 // ------------------------------------ selectOneByExample ----------------------------------
String tableName = introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime();
// 生成查询语句 // 生成查询语句
XmlElement selectOneElement = new XmlElement("select"); XmlElement selectOneElement = new XmlElement("select");
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated) // 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
...@@ -85,14 +101,10 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable); ...@@ -85,14 +101,10 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable);
// 添加ID // 添加ID
selectOneElement.addAttribute(new Attribute("id", METHOD_SELECT_ONE_BY_EXAMPLE)); selectOneElement.addAttribute(new Attribute("id", METHOD_SELECT_ONE_BY_EXAMPLE));
// ----------------------------------------- 表中是否有blob类型字段 ---------------------------------------
if (introspectedTable.hasBLOBColumns()){
// 添加返回类型 // 添加返回类型
selectOneElement.addAttribute(new Attribute("resultMap", introspectedTable.getResultMapWithBLOBsId())); selectOneElement.addAttribute(new Attribute("resultMap", introspectedTable.getBaseResultMapId()));
// 添加参数类型 // 添加参数类型
selectOneElement.addAttribute(new Attribute("parameterType", introspectedTable.getExampleType())); selectOneElement.addAttribute(new Attribute("parameterType", introspectedTable.getExampleType()));
// 添加查询SQL
selectOneElement.addElement(new TextElement("select")); //$NON-NLS-1$ selectOneElement.addElement(new TextElement("select")); //$NON-NLS-1$
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
...@@ -102,10 +114,7 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable); ...@@ -102,10 +114,7 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable);
sb.append("' as QUERYID,"); //$NON-NLS-1$ sb.append("' as QUERYID,"); //$NON-NLS-1$
selectOneElement.addElement(new TextElement(sb.toString())); selectOneElement.addElement(new TextElement(sb.toString()));
} }
selectOneElement.addElement(XmlElementGeneratorTools.getBaseColumnListElement(introspectedTable)); selectOneElement.addElement(XmlElementGeneratorTools.getBaseColumnListElement(introspectedTable));
selectOneElement.addElement(new TextElement(",")); //$NON-NLS-1$
selectOneElement.addElement(XmlElementGeneratorTools.getBlobColumnListElement(introspectedTable));
sb.setLength(0); sb.setLength(0);
sb.append("from "); //$NON-NLS-1$ sb.append("from "); //$NON-NLS-1$
...@@ -120,40 +129,57 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable); ...@@ -120,40 +129,57 @@ commentGenerator.addGeneralMethodComment(method, introspectedTable);
// 只查询一条 // 只查询一条
selectOneElement.addElement(new TextElement("limit 1")); selectOneElement.addElement(new TextElement("limit 1"));
} else { // 添加到根节点
document.getRootElement().addElement(selectOneElement);
logger.debug("itfsw(查询单条数据插件):"+introspectedTable.getMyBatis3XmlMapperFileName()+"增加selectOneByExample方法。");
// ------------------------------------ selectOneByExampleWithBLOBs ----------------------------------
if (introspectedTable.getRules().generateRecordWithBLOBsClass()){
// 生成查询语句
XmlElement selectOneWithBLOBsElement = new XmlElement("select");
// 添加注释(!!!必须添加注释,overwrite覆盖生成时,@see XmlFileMergerJaxp.isGeneratedNode会去判断注释中是否存在OLD_ELEMENT_TAGS中的一点,例子:@mbg.generated)
commentGenerator.addComment(selectOneWithBLOBsElement);
// 添加ID
selectOneWithBLOBsElement.addAttribute(new Attribute("id", METHOD_SELECT_ONE_BY_EXAMPLE_WITH_BLOBS));
// 添加返回类型 // 添加返回类型
selectOneElement.addAttribute(new Attribute("resultMap", introspectedTable.getBaseResultMapId())); selectOneWithBLOBsElement.addAttribute(new Attribute("resultMap", introspectedTable.getResultMapWithBLOBsId()));
// 添加参数类型 // 添加参数类型
selectOneElement.addAttribute(new Attribute("parameterType", introspectedTable.getExampleType())); selectOneWithBLOBsElement.addAttribute(new Attribute("parameterType", introspectedTable.getExampleType()));
selectOneElement.addElement(new TextElement("select")); //$NON-NLS-1$ // 添加查询SQL
selectOneWithBLOBsElement.addElement(new TextElement("select")); //$NON-NLS-1$
StringBuilder sb = new StringBuilder(); sb.setLength(0);
if (stringHasValue(introspectedTable.getSelectByExampleQueryId())) { if (stringHasValue(introspectedTable.getSelectByExampleQueryId())) {
sb.append('\''); sb.append('\'');
sb.append(introspectedTable.getSelectByExampleQueryId()); sb.append(introspectedTable.getSelectByExampleQueryId());
sb.append("' as QUERYID,"); //$NON-NLS-1$ sb.append("' as QUERYID,"); //$NON-NLS-1$
selectOneElement.addElement(new TextElement(sb.toString())); selectOneWithBLOBsElement.addElement(new TextElement(sb.toString()));
} }
selectOneElement.addElement(XmlElementGeneratorTools.getBaseColumnListElement(introspectedTable));
selectOneWithBLOBsElement.addElement(XmlElementGeneratorTools.getBaseColumnListElement(introspectedTable));
selectOneWithBLOBsElement.addElement(new TextElement(","));
selectOneWithBLOBsElement.addElement(XmlElementGeneratorTools.getBlobColumnListElement(introspectedTable));
sb.setLength(0); sb.setLength(0);
sb.append("from "); //$NON-NLS-1$ sb.append("from "); //$NON-NLS-1$
sb.append(introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()); sb.append(introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());
selectOneElement.addElement(new TextElement(sb.toString())); selectOneWithBLOBsElement.addElement(new TextElement(sb.toString()));
selectOneElement.addElement(XmlElementGeneratorTools.getExampleIncludeElement(introspectedTable)); selectOneWithBLOBsElement.addElement(XmlElementGeneratorTools.getExampleIncludeElement(introspectedTable));
XmlElement ifElement = new XmlElement("if"); //$NON-NLS-1$ XmlElement ifElement1 = new XmlElement("if"); //$NON-NLS-1$
ifElement.addAttribute(new Attribute("test", "orderByClause != null")); //$NON-NLS-1$ //$NON-NLS-2$ ifElement1.addAttribute(new Attribute("test", "orderByClause != null")); //$NON-NLS-1$ //$NON-NLS-2$
ifElement.addElement(new TextElement("order by ${orderByClause}")); //$NON-NLS-1$ ifElement1.addElement(new TextElement("order by ${orderByClause}")); //$NON-NLS-1$
selectOneElement.addElement(ifElement); selectOneWithBLOBsElement.addElement(ifElement1);
// 只查询一条 // 只查询一条
selectOneElement.addElement(new TextElement("limit 1")); selectOneWithBLOBsElement.addElement(new TextElement("limit 1"));
}
// 添加到根节点 // 添加到根节点
document.getRootElement().addElement(selectOneElement); document.getRootElement().addElement(selectOneWithBLOBsElement);
logger.debug("itfsw(查询单条数据插件):"+introspectedTable.getMyBatis3XmlMapperFileName()+"增加SelectOneByExample方法("+(introspectedTable.hasBLOBColumns() ? "有" : "无")+"Blob类型))。"); logger.debug("itfsw(查询单条数据插件):"+introspectedTable.getMyBatis3XmlMapperFileName()+"增加selectOneByExampleWithBLOBs方法。");
}
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment