Mybatis Generator自定义扩展
哈哈自己真懒
转自
https://www.cnblogs.com/se7end/p/9293755.html
看了看别人的代码然后,自己在做想项目时候遇到个批量插入这个东西然后尝试改了改代码
在这里插入代码片
在原来的CustomAbstractXmlElementGenerator类里添加mapper的批量方法
//增加batchInsert
@Override
public void addElements(XmlElement parentElement) {
// 增加base_query
XmlElement sql = new XmlElement("sql");
sql.addAttribute(new Attribute("id", "base_query"));
//在这里添加where条件
XmlElement selectTrimElement = new XmlElement("trim"); //设置trim标签
selectTrimElement.addAttribute(new Attribute("prefix", "WHERE"));
selectTrimElement.addAttribute(new Attribute("prefixOverrides", "AND | OR")); //添加where和and
StringBuilder sb = new StringBuilder();
for(IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
XmlElement selectNotNullElement = new XmlElement("if"); //$NON-NLS-1$
sb.setLength(0);
sb.append("null != ");
sb.append(introspectedColumn.getJavaProperty());
selectNotNullElement.addAttribute(new Attribute("test", sb.toString()));
sb.setLength(0);
// 添加and
sb.append(" and ");
// 添加别名t
sb.append("t.");
sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
// 添加等号
sb.append(" = ");
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
selectNotNullElement.addElement(new TextElement(sb.toString()));
selectTrimElement.addElement(selectNotNullElement);
}
sql.addElement(selectTrimElement);
parentElement.addElement(sql);
// 公用select
sb.setLength(0);
sb.append("select ");
sb.append("t.* ");
sb.append("from ");
sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
sb.append(" t");
TextElement selectText = new TextElement(sb.toString());
// 公用include
XmlElement include = new XmlElement("include");
include.addAttribute(new Attribute("refid", "base_query"));
// // 增加find
// XmlElement find = new XmlElement("select");
// find.addAttribute(new Attribute("id", "find"));
// find.addAttribute(new Attribute("resultMap", "BaseResultMap"));
// find.addAttribute(new Attribute("parameterType", introspectedTable.getBaseRecordType()));
// find.addElement(selectText);
// find.addElement(include);
// parentElement.addElement(find);
//
// // 增加list
// XmlElement list = new XmlElement("select");
// list.addAttribute(new Attribute("id", "list"));
// list.addAttribute(new Attribute("resultMap", "BaseResultMap"));
// list.addAttribute(new Attribute("parameterType", introspectedTable.getBaseRecordType()));
// list.addElement(selectText);
// list.addElement(include);
// parentElement.addElement(list);
//
// // 增加pageList
// XmlElement pageList = new XmlElement("select");
// pageList.addAttribute(new Attribute("id", "pageList"));
// pageList.addAttribute(new Attribute("resultMap", "BaseResultMap"));
// pageList.addAttribute(new Attribute("parameterType", introspectedTable.getBaseRecordType()));
// pageList.addElement(selectText);
// pageList.addElement(include);
// parentElement.addElement(pageList);
//增加batchInsert
XmlElement batchInser = new XmlElement("insert");
batchInser.addAttribute(new Attribute("id","batchInser"));
batchInser.addAttribute(new Attribute("parameterType","List"));
StringBuilder insertClause = new StringBuilder();
StringBuilder valuesClause = new StringBuilder();
insertClause.append("insert into "); //$NON-NLS-1$
insertClause.append(introspectedTable
.getFullyQualifiedTableNameAtRuntime());
insertClause.append(" ("); //$NON-NLS-1$
valuesClause.append(" ("); //$NON-NLS-1$
List<String> valuesClauses = new ArrayList<String>();
List<IntrospectedColumn> columns = ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns());
for (int i = 0; i < columns.size(); i++) {
IntrospectedColumn introspectedColumn = columns.get(i);
insertClause.append(MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn));
// valuesClause.append(MyBatis3FormattingUtilities
// .getParameterClause(introspectedColumn));
//这里吧#{id,jdbcType=BIGINT}加工成#{item.id,jdbcType=BIGINT}
String parameterClause = MyBatis3FormattingUtilities.getParameterClause(introspectedColumn);
if(parameterClause.indexOf('{')>0){
StringBuilder sbs = new StringBuilder();
sbs.append(parameterClause.substring(0,2))
.append("item.").append(parameterClause.substring(2));
parameterClause= sbs.toString();
}
valuesClause.append(parameterClause);
if (i + 1 < columns.size()) {
insertClause.append(", "); //$NON-NLS-1$
valuesClause.append(", "); //$NON-NLS-1$
}
if (valuesClause.length() > 80) {
batchInser.addElement(new TextElement(insertClause.toString()));
insertClause.setLength(0);
OutputUtilities.xmlIndent(insertClause, 1);
valuesClauses.add(valuesClause.toString());
valuesClause.setLength(0);
OutputUtilities.xmlIndent(valuesClause, 1);
}
}
insertClause.append(") values");
batchInser.addElement(new TextElement(insertClause.toString()));
valuesClause.append(')');
valuesClauses.add(valuesClause.toString());
XmlElement foreach = new XmlElement("foreach");
foreach.addAttribute(new Attribute("collection","list"));
foreach.addAttribute(new Attribute("item","item"));
foreach.addAttribute(new Attribute("separator",","));
for (String clause : valuesClauses) {
foreach.addElement(new TextElement(clause));
}
batchInser.addElement(foreach);
parentElement.addElement(batchInser);
}
在在原项目里面的CustomAbstractXmlElementGenerator类里添加xml 的批量方法
private void addInterfaceBatchInsert(Interface interfaze){
// 先创建import对象
Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
// 添加Lsit的包
importedTypes.add(FullyQualifiedJavaType.getNewListInstance());
// 创建方法对象
Method method = new Method();
// 设置该方法为public
method.setVisibility(JavaVisibility.PUBLIC);
// 设置返回类型是List
FullyQualifiedJavaType returnType = FullyQualifiedJavaType.getIntInstance();
// 方法对象设置返回类型对象
method.setReturnType(returnType);
// 设置方法名称为我们在IntrospectedTable类中初始化的 “selectByObject”
method.setName("batchInsert");
// 设置参数类型是对象
FullyQualifiedJavaType parameterType;
parameterType = FullyQualifiedJavaType.getNewListInstance();
//list参数的<>泛型 类型
parameterType.addTypeArgument(new FullyQualifiedJavaType(introspectedTable.getBaseRecordType()));
importedTypes.add(parameterType);
// 为方法添加参数,变量名称list
method.addParameter(new Parameter(parameterType, "list")); //$NON-NLS-1$
addMapperAnnotations(interfaze, method);
context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);
if (context.getPlugins().clientSelectByPrimaryKeyMethodGenerated(method, interfaze, introspectedTable)) {
interfaze.addImportedTypes(importedTypes);
interfaze.addMethod(method);
}
}
刚开始写,写的不好希望给为大神不要喷我。。