设为首页 收藏本站
查看: 705|回复: 0

[经验分享] Mybatis-generator-1.3.2 添加生成方法接口

[复制链接]

尚未签到

发表于 2016-11-27 10:38:53 | 显示全部楼层 |阅读模式
  由于近日基于Mybatis开发,而Mybatis-generator生成的查询接口又缺少针对其它属性关联查询的办法(或许是我没找到),也没找到相关添加的教程!无奈只好花点时间自己增加一个selectByCdt接口。写出来以便别人有类似需求时可以自行添加。 附近部分是根据本文需求已经改好的Jar包!可以直接下载试用!
  为了方便查找改动的相关,我在局部修改的地方加入了//@Nothing-add
  改后的源码发布到了 https://code.google.com/p/mybatis-generator-custom/ 需要的自行检出!
  下面直接贴出修改的相关类。注意路径前M:修改 A:添加此方法!
M  |  org/mybatis/generator/api/IntrospectedTable.java

protected enum InternalAttribute {
ATTR_DAO_IMPLEMENTATION_TYPE,
ATTR_DAO_INTERFACE_TYPE,
ATTR_PRIMARY_KEY_TYPE,
ATTR_BASE_RECORD_TYPE,
ATTR_RECORD_WITH_BLOBS_TYPE,
ATTR_EXAMPLE_TYPE,
ATTR_IBATIS2_SQL_MAP_PACKAGE,
ATTR_IBATIS2_SQL_MAP_FILE_NAME,
ATTR_IBATIS2_SQL_MAP_NAMESPACE,
ATTR_MYBATIS3_XML_MAPPER_PACKAGE,
ATTR_MYBATIS3_XML_MAPPER_FILE_NAME,
/** also used as XML Mapper namespace if a Java mapper is generated */
ATTR_MYBATIS3_JAVA_MAPPER_TYPE,
/** used as XML Mapper namespace if no client is generated */
ATTR_MYBATIS3_FALLBACK_SQL_MAP_NAMESPACE,
ATTR_FULLY_QUALIFIED_TABLE_NAME_AT_RUNTIME,
ATTR_ALIASED_FULLY_QUALIFIED_TABLE_NAME_AT_RUNTIME,
ATTR_COUNT_BY_EXAMPLE_STATEMENT_ID,
ATTR_DELETE_BY_EXAMPLE_STATEMENT_ID,
ATTR_DELETE_BY_PRIMARY_KEY_STATEMENT_ID,
ATTR_INSERT_STATEMENT_ID,
ATTR_INSERT_SELECTIVE_STATEMENT_ID,
ATTR_SELECT_ALL_STATEMENT_ID,
ATTR_SELECT_BY_EXAMPLE_STATEMENT_ID,
ATTR_SELECT_BY_EXAMPLE_WITH_BLOBS_STATEMENT_ID,
ATTR_SELECT_BY_PRIMARY_KEY_STATEMENT_ID,
ATTR_UPDATE_BY_EXAMPLE_STATEMENT_ID,
ATTR_UPDATE_BY_EXAMPLE_SELECTIVE_STATEMENT_ID,
ATTR_UPDATE_BY_EXAMPLE_WITH_BLOBS_STATEMENT_ID,
ATTR_UPDATE_BY_PRIMARY_KEY_STATEMENT_ID,
ATTR_UPDATE_BY_PRIMARY_KEY_SELECTIVE_STATEMENT_ID,
ATTR_UPDATE_BY_PRIMARY_KEY_WITH_BLOBS_STATEMENT_ID,
ATTR_BASE_RESULT_MAP_ID,
ATTR_RESULT_MAP_WITH_BLOBS_ID,
ATTR_EXAMPLE_WHERE_CLAUSE_ID,
ATTR_BASE_COLUMN_LIST_ID,
ATTR_BLOB_COLUMN_LIST_ID,
ATTR_MYBATIS3_UPDATE_BY_EXAMPLE_WHERE_CLAUSE_ID,
ATTR_MYBATIS3_SQL_PROVIDER_TYPE,
//@Nothing-add
ATTR_SELECT_BY_CDT_STATEMENT_ID
}
  

M  |  org/mybatis/generator/codegen/mybatis3/javamapper/JavaMapperGenerator.java

@Override
public List<CompilationUnit> getCompilationUnits() {
progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$
introspectedTable.getFullyQualifiedTable().toString()));
CommentGenerator commentGenerator = context.getCommentGenerator();
FullyQualifiedJavaType type = new FullyQualifiedJavaType(
introspectedTable.getMyBatis3JavaMapperType());
Interface interfaze = new Interface(type);
interfaze.setVisibility(JavaVisibility.PUBLIC);
commentGenerator.addJavaFileComment(interfaze);
String rootInterface = introspectedTable
.getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
if (!stringHasValue(rootInterface)) {
rootInterface = context.getJavaClientGeneratorConfiguration()
.getProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
}
if (stringHasValue(rootInterface)) {
FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType(
rootInterface);
interfaze.addSuperInterface(fqjt);
interfaze.addImportedType(fqjt);
}
addCountByExampleMethod(interfaze);
addDeleteByExampleMethod(interfaze);
addDeleteByPrimaryKeyMethod(interfaze);
addInsertMethod(interfaze);
addInsertSelectiveMethod(interfaze);
addSelectByExampleWithBLOBsMethod(interfaze);
addSelectByExampleWithoutBLOBsMethod(interfaze);
addSelectByPrimaryKeyMethod(interfaze);
//@Nothing-Add
addSelectByCdtMethod(interfaze);
addUpdateByExampleSelectiveMethod(interfaze);
addUpdateByExampleWithBLOBsMethod(interfaze);
addUpdateByExampleWithoutBLOBsMethod(interfaze);
addUpdateByPrimaryKeySelectiveMethod(interfaze);
addUpdateByPrimaryKeyWithBLOBsMethod(interfaze);
addUpdateByPrimaryKeyWithoutBLOBsMethod(interfaze);
List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
if (context.getPlugins().clientGenerated(interfaze, null,
introspectedTable)) {
answer.add(interfaze);
}
List<CompilationUnit> extraCompilationUnits = getExtraCompilationUnits();
if (extraCompilationUnits != null) {
answer.addAll(extraCompilationUnits);
}
return answer;
}

    //@Nothing-Add
protected void addSelectByCdtMethod(Interface interfaze) {
//这里我就直接和主键生成绑定吧!懒的写了!
if (introspectedTable.getRules().generateSelectByPrimaryKey()) {
AbstractJavaMapperMethodGenerator methodGenerator = new SelectByCdtMethodGenerator(false);
initializeAndExecuteGenerator(methodGenerator, interfaze);
}
}

  
A  |  org/mybatis/generator/codegen/mybatis3/javamapper/elements/SelectByCdtMethodGenerator.java

public class SelectByCdtMethodGenerator extends
AbstractJavaMapperMethodGenerator {
private boolean isSimple;
public SelectByCdtMethodGenerator(boolean isSimple) {
super();
this.isSimple = isSimple;
}
@Override
public void addInterfaceElements(Interface interfaze) {
Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
FullyQualifiedJavaType parameterType = introspectedTable.getRules()
.calculateAllFieldsClass();
FullyQualifiedJavaType returnType = FullyQualifiedJavaType.getNewListInstance().getNewListInstance();
returnType.addTypeArgument(parameterType);
method.setReturnType(FullyQualifiedJavaType.getNewListInstance());
importedTypes.add(returnType);
importedTypes.add(parameterType);
method.setName(introspectedTable.getSelectByCdtStatementId());
method.addParameter(new Parameter(parameterType, "record")); //$NON-NLS-1$
addMapperAnnotations(interfaze, method);
context.getCommentGenerator().addGeneralMethodComment(method,
introspectedTable);
if (context.getPlugins().clientSelectByPrimaryKeyMethodGenerated(
method, interfaze, introspectedTable)) {
interfaze.addImportedTypes(importedTypes);
interfaze.addMethod(method);
}
}
public void addMapperAnnotations(Interface interfaze, Method method) {
return;
}
}
  

M  |  org/mybatis/generator/codegen/mybatis3/xmlmapper/XMLMapperGenerator.java

protected XmlElement getSqlMapElement() {
FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
progressCallback.startTask(getString(
"Progress.12", table.toString())); //$NON-NLS-1$
XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$
String namespace = introspectedTable.getMyBatis3SqlMapNamespace();
answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$
namespace));
context.getCommentGenerator().addRootComment(answer);
addResultMapWithoutBLOBsElement(answer);
addResultMapWithBLOBsElement(answer);
addExampleWhereClauseElement(answer);
addMyBatis3UpdateByExampleWhereClauseElement(answer);
addBaseColumnListElement(answer);
addBlobColumnListElement(answer);
addSelectByExampleWithBLOBsElement(answer);
addSelectByExampleWithoutBLOBsElement(answer);
addSelectByPrimaryKeyElement(answer);
//@Nothing-add
addSelectByCdtElement(answer);
addDeleteByPrimaryKeyElement(answer);
addDeleteByExampleElement(answer);
addInsertElement(answer);
addInsertSelectiveElement(answer);
addCountByExampleElement(answer);
addUpdateByExampleSelectiveElement(answer);
addUpdateByExampleWithBLOBsElement(answer);
addUpdateByExampleWithoutBLOBsElement(answer);
addUpdateByPrimaryKeySelectiveElement(answer);
addUpdateByPrimaryKeyWithBLOBsElement(answer);
addUpdateByPrimaryKeyWithoutBLOBsElement(answer);
return answer;
}

  
A  |  org/mybatis/generator/codegen/mybatis3/xmlmapper/elements/SelectByCdtElementGenerator.java

public class SelectByCdtElementGenerator extends
AbstractXmlElementGenerator {
public SelectByCdtElementGenerator() {
super();
}
@Override
public void addElements(XmlElement parentElement) {
XmlElement answer = new XmlElement("select"); //$NON-NLS-1$
answer.addAttribute(new Attribute(
"id", introspectedTable.getSelectByCdtStatementId())); //$NON-NLS-1$
if (introspectedTable.getRules().generateResultMapWithBLOBs()) {
answer.addAttribute(new Attribute("resultMap", //$NON-NLS-1$
introspectedTable.getResultMapWithBLOBsId()));
} else {
answer.addAttribute(new Attribute("resultMap", //$NON-NLS-1$
introspectedTable.getBaseResultMapId()));
}
String parameterType = introspectedTable.getRules().calculateAllFieldsClass().getFullyQualifiedName();
answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$
parameterType));
context.getCommentGenerator().addComment(answer);
StringBuilder sb = new StringBuilder();
sb.append("select "); //$NON-NLS-1$
if (stringHasValue(introspectedTable
.getSelectByPrimaryKeyQueryId())) {
sb.append('\'');
sb.append(introspectedTable.getSelectByPrimaryKeyQueryId());
sb.append("' as QUERYID,"); //$NON-NLS-1$
}
answer.addElement(new TextElement(sb.toString()));
answer.addElement(getBaseColumnListElement());
if (introspectedTable.hasBLOBColumns()) {
answer.addElement(new TextElement(",")); //$NON-NLS-1$
answer.addElement(getBlobColumnListElement());
}
sb.setLength(0);
sb.append("from "); //$NON-NLS-1$
sb.append(introspectedTable
.getAliasedFullyQualifiedTableNameAtRuntime());
answer.addElement(new TextElement(sb.toString()));
XmlElement dynamicElement = new XmlElement("where"); //$NON-NLS-1$
answer.addElement(dynamicElement);
for (IntrospectedColumn introspectedColumn : introspectedTable.getBaseColumns()) {
XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
sb.setLength(0);
sb.append(introspectedColumn.getJavaProperty()); //$NON-NLS-1$
sb.append(" != null"); //$NON-NLS-1$
isNotNullElement.addAttribute(new Attribute("test", sb.toString())); //$NON-NLS-1$
dynamicElement.addElement(isNotNullElement);
sb.setLength(0);
sb.append("and ");
sb.append(MyBatis3FormattingUtilities
.getAliasedEscapedColumnName(introspectedColumn));
sb.append(" = "); //$NON-NLS-1$
sb.append(MyBatis3FormattingUtilities.getParameterClause(
introspectedColumn)); //$NON-NLS-1$
//            sb.append(',');
isNotNullElement.addElement(new TextElement(sb.toString()));
}
if (context.getPlugins()
.sqlMapSelectByPrimaryKeyElementGenerated(answer,
introspectedTable)) {
parentElement.addElement(answer);
}
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306104-1-1.html 上篇帖子: MyBatis插入数据库后,获得库自增主键ID 下篇帖子: 表主键自增长Mybatis插入数据报错
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表