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);
		}
	}







刚开始写,写的不好希望给为大神不要喷我。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值