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
    评论
MyBatis Generator 是一个非常方便的代码生成工具,可以根据数据库中的表结构自动生成对应的 Java 实体类、Mapper 接口和 XML 配置文件,提高开发效率。在使用 MyBatis Generator 时,我们可以通过编写自定义插件来扩展其功能,使其更符合我们的需求。 下面是一个简单的示例,演示如何在 MyBatis Generator自定义生成代码。 首先,我们需要创建一个 Java 类,继承自 org.mybatis.generator.api.PluginAdapter 类,并实现其方法: ```java public class ExamplePlugin extends PluginAdapter { @Override public boolean validate(List<String> warnings) { // 在此方法中可以校验插件的参数,如果校验失败需要返回 false return true; } @Override public void initialized(IntrospectedTable introspectedTable) { // 在此方法中可以获取表的信息,并对生成的代码进行自定义操作 } } ``` 该类中最重要的是 `initialized` 方法,它会在生成代码时被调用,我们可以在其中获取表的信息,并对生成的代码进行自定义操作。比如,我们可以在该方法中添加自定义注解、修改生成的 Java 实体类的属性类型等等。 接下来,我们需要在 MyBatis Generator 的配置文件中指定该插件的路径。可以在 `<generatorConfiguration>` 标签中添加如下节点: ```xml <plugin type="com.example.ExamplePlugin"> <!-- 在此可以添加插件的参数 --> </plugin> ``` 其中,`type` 属性指定了插件类的完整路径。 最后,我们运行 MyBatis Generator 即可生成自定义代码。如果使用 Maven,可以在 pom.xml 文件中添加如下插件: ```xml <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <configurationFile>src/main/resources/mybatis-generator.xml</configurationFile> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>example-plugin</artifactId> <version>1.0.0</version> </dependency> </dependencies> </plugin> </plugins> </build> ``` 其中,`configurationFile` 指定了 MyBatis Generator 的配置文件路径,`overwrite` 指定是否覆盖已存在的文件。在 `<dependencies>` 标签中,我们需要添加自定义插件的依赖。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值