【Mybatis】Mybatis-Generator-Mysql(批量更新)方法插件

版权声明:小哥哥小姐姐们,本文为小博主原创文章,转载请附上博主博文网址,并标注作者谢谢~~。违者必究 https://blog.csdn.net/HuHui_/article/details/85150537

系列

  1. 【Mybatis】Mybatis-Generator-Postgresql返回主键插件
  2. 【Mybatis】Mybatis-Generator-Oracle返回主键插件
  3. 【Mybatis】Mybatis-Generator-batchDelete(批量删除)方法插件
  4. 【Mybatis】Mybatis-Generator-Postgresql&Mysql(批量新增)方法插件
  5. 【Mybatis】Mybatis-Generator-Oracle(批量新增)方法插件
  6. 【Mybatis】Mybatis-Generator-Mysql(批量更新)方法插件
  7. 【Mybatis】Mybatis-Generator-Postgresql(批量更新)方法插件
  8. 【Mybatis】Mybatis-Generator-Oracle(批量更新)方法插件
  9. 【Mybatis】Mybatis-Generator-Tool 生成Java和Xml的Method工具类

前言

Mysql批量新增插件,核心贴出来,有需要的看我的GITHUB,准备更新微服务BLOG

github上针对mybatis-generator还有很多不同类型的插件,我实在懒的看,而且太多复杂的功能,我简单点搞自己需要的。

装备

  1. maven

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
    </dependencies>
    

Core-Code

mybatis-implement

<update id="batchUpdate" parameterType="java.util.List">
    update T_HUI_ORDER 
    <trim prefix="set" suffixOverrides=",">
      <trim prefix="ORDER_ID =case ORDER_ID" suffix="end,">
        <foreach collection="recordList" index="index" item="item">
          <if test="item.orderId !=null ">
            when #{item.orderId,jdbcType=VARCHAR} then #{item.orderId,jdbcType=VARCHAR}
          </if>
          <if test="item.orderId ==null ">
            when #{item.orderId,jdbcType=VARCHAR} then T_HUI_ORDER.ORDER_ID
          </if>
        </foreach>
      </trim>
      <trim prefix="ORDER_NAME =case ORDER_ID" suffix="end,">
        <foreach collection="recordList" index="index" item="item">
          <if test="item.orderName !=null ">
            when #{item.orderId,jdbcType=VARCHAR} then #{item.orderName,jdbcType=VARCHAR}
          </if>
          <if test="item.orderName ==null ">
            when #{item.orderId,jdbcType=VARCHAR} then T_HUI_ORDER.ORDER_NAME
          </if>
        </foreach>
      </trim>
      <trim prefix="PRODUCT_ID =case ORDER_ID" suffix="end,">
        <foreach collection="recordList" index="index" item="item">
          <if test="item.productId !=null ">
            when #{item.orderId,jdbcType=VARCHAR} then #{item.productId,jdbcType=VARCHAR}
          </if>
          <if test="item.productId ==null ">
            when #{item.orderId,jdbcType=VARCHAR} then T_HUI_ORDER.PRODUCT_ID
          </if>
        </foreach>
      </trim>
      <trim prefix="BUY_QUANTITY =case ORDER_ID" suffix="end,">
        <foreach collection="recordList" index="index" item="item">
          <if test="item.buyQuantity !=null ">
            when #{item.orderId,jdbcType=VARCHAR} then #{item.buyQuantity,jdbcType=DECIMAL}
          </if>
          <if test="item.buyQuantity ==null ">
            when #{item.orderId,jdbcType=VARCHAR} then T_HUI_ORDER.BUY_QUANTITY
          </if>
        </foreach>
      </trim>
      <trim prefix="CREATED_TIME =case ORDER_ID" suffix="end,">
        <foreach collection="recordList" index="index" item="item">
          <if test="item.createdTime !=null ">
            when #{item.orderId,jdbcType=VARCHAR} then #{item.createdTime,jdbcType=TIMESTAMP}
          </if>
          <if test="item.createdTime ==null ">
            when #{item.orderId,jdbcType=VARCHAR} then T_HUI_ORDER.CREATED_TIME
          </if>
        </foreach>
      </trim>
    </trim>
    where ORDER_ID in(
    <foreach collection="recordList" index="index" item="item" separator=",">
      #{item.orderId,jdbcType=VARCHAR}
    </foreach>
    )
  </update>

plugin-code

/**
 * <b><code>MysqlBatchUpdatePlugin</code></b>
 * <p/>
 * Description:
 * <p/>
 * <b>Creation Time:</b> 2018/12/10 0:48.
 *
 * @author HuWeihui
 */
public class MysqlBatchUpdatePlugin extends PluginAdapter {

    private final static String BATCH_UPDATE = "batchUpdate";

    private final static String PARAMETER_NAME = "recordList";


    @Override
    public boolean validate(List<String> list) {
        return true;
    }

    @Override
    public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {

        if (introspectedTable.getTargetRuntime().equals(IntrospectedTable.TargetRuntime.MYBATIS3)) {
            MethodGeneratorTool.defaultBatchInsertOrUpdateMethodGen(MethodGeneratorTool.UPDATE, interfaze, introspectedTable, context);
        }
        return super.clientGenerated(interfaze, topLevelClass, introspectedTable);
    }

    @Override
    public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
        if (introspectedTable.getTargetRuntime().equals(IntrospectedTable.TargetRuntime.MYBATIS3)) {
            addSqlMapper(document, introspectedTable);
        }
        return super.sqlMapDocumentGenerated(document, introspectedTable);
    }

    public void addSqlMapper(Document document, IntrospectedTable introspectedTable) {
        String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime();
        List<IntrospectedColumn> columnList = introspectedTable.getAllColumns();
        //primaryKey的JDBC名字
        String primaryKeyName = introspectedTable.getPrimaryKeyColumns().get(0).getActualColumnName();

        //primaryKey的JAVA变量
        String primaryKeyParameterClause = MyBatis3FormattingUtilities.getParameterClause(introspectedTable.getPrimaryKeyColumns().get(0), "item.");

        //primaryKey的JAVA名字
        String primaryKeyJavaName = introspectedTable.getPrimaryKeyColumns().get(0).getJavaProperty();


        XmlElement updateXmlElement = SqlMapperGeneratorTool.baseElementGenerator(SqlMapperGeneratorTool.UPDATE,
                BATCH_UPDATE,
                FullyQualifiedJavaType.getNewListInstance());

        updateXmlElement.addElement(new TextElement(String.format("update %s ", tableName)));

        XmlElement trimElement = SqlMapperGeneratorTool.baseTrimElement("set", null, ",");

        for (int i = 0; i < columnList.size(); i++) {

            IntrospectedColumn introspectedColumn = columnList.get(i);

            String columnName = introspectedColumn.getActualColumnName();

            String columnJavaTypeName = introspectedColumn.getJavaProperty("item.");

            String parameterClause = MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, "item.");


            if (introspectedColumn.isIdentity()) {
                continue;
            }

            String ifSql = String.format("when %s then %s", primaryKeyParameterClause, parameterClause);
            XmlElement ifElement = SqlMapperGeneratorTool.baseIfJudgeElementGen(columnJavaTypeName, ifSql, false);

            String ifNullSql = String.format("when %s then %s", primaryKeyParameterClause, tableName + "." + columnName);
            XmlElement ifNullElement = SqlMapperGeneratorTool.baseIfJudgeElementGen(columnJavaTypeName, ifNullSql, true);


            XmlElement foreachElement = SqlMapperGeneratorTool.baseForeachElementGenerator(PARAMETER_NAME, "item", "index", null);
            foreachElement.addElement(ifElement);
            foreachElement.addElement(ifNullElement);

            XmlElement caseTrimElement = SqlMapperGeneratorTool.baseTrimElement(columnName + " =case " + primaryKeyName, "end,", null);
            caseTrimElement.addElement(foreachElement);

            trimElement.addElement(caseTrimElement);
        }

        updateXmlElement.addElement(trimElement);

        XmlElement foreachElement = SqlMapperGeneratorTool.baseForeachElementGenerator(PARAMETER_NAME,
                "item",
                "index",
                ",");
        foreachElement.addElement(new TextElement(primaryKeyParameterClause));

        updateXmlElement.addElement(new TextElement(String.format("where %s in(", primaryKeyName)));

        updateXmlElement.addElement(foreachElement);

        updateXmlElement.addElement(new TextElement(")"));

        document.getRootElement().addElement(updateXmlElement);
    }
}

plugin-common-tool

插件通用方法/工具类,上面生成方法基于了一个工具类,下面博客有源码,真正需要的可以看看github

【Mybatis】Mybatis-Generator-Tool 生成Java和Xml的Method工具类

使用方法

generatorConfig.xml

<!--MySql批量更新-->
<plugin type="com.hui.mybatis.plugins.MysqlBatchUpdatePlugin"/>

pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis.generator}</version>
                <configuration>
                    <!-- 配置文件 -->
                    <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                    </configurationFile>
                    <!-- 允许移动生成的文件 -->
                    <verbose>true</verbose>
                    <!-- 是否覆盖 -->
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <!-- mybatis-generator-core -->
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>${mybatis.generator}</version>
                    </dependency>

                    <!--插件导入-->
                    <dependency>
                        <groupId>com.hui.mybatis.plugins</groupId>
                        <artifactId>hui-mybatis-plugins</artifactId>
                        <version>0.0.1-SNAPSHOT</version>
                    </dependency>

                    <!--Mysql-->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.44</version>
                    </dependency>

                    <!--ORACLE-->
                    <dependency>
                        <groupId>com.oracle</groupId>
                        <artifactId>ojdbc6</artifactId>
                        <version>11.1.0.7.0</version>
                    </dependency>

                    <!--PG SQL-->
                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>${postgresql.version}</version>
                    </dependency>

                </dependencies>
            </plugin>
        </plugins>
    </build>

Github

https://github.com/ithuhui/hui-mybatis-plugins/tree/master/src/main/java/com/hui/mybatis/plugins

作者

 作者:HuHui
 转载:欢迎一起讨论web和大数据问题,转载请注明作者和原文链接,感谢

猜你喜欢

转载自blog.csdn.net/HuHui_/article/details/85150537
今日推荐