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

文章目录

  • 系列
  • 前言
  • 装备
  • Core-Code
    • mybatis-implement
    • plugin-code
    • plugin-common-tool
  • 使用方法
    • generatorConfig.xml
    • pom.xml
  • Github
  • 作者

系列

  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>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.4.6version>
        dependency>
    
        
        <dependency>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-coreartifactId>
            <version>1.3.7version>
        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

/**
 * MysqlBatchUpdatePlugin
 * 

* Description: *

* Creation Time: 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


<plugin type="com.hui.mybatis.plugins.MysqlBatchUpdatePlugin"/>

pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generatorgroupId>
                <artifactId>mybatis-generator-maven-pluginartifactId>
                <version>${mybatis.generator}version>
                <configuration>
                    
                    <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                    configurationFile>
                    
                    <verbose>trueverbose>
                    
                    <overwrite>trueoverwrite>
                configuration>
                <dependencies>
                    
                    <dependency>
                        <groupId>org.mybatis.generatorgroupId>
                        <artifactId>mybatis-generator-coreartifactId>
                        <version>${mybatis.generator}version>
                    dependency>

                    
                    <dependency>
                        <groupId>com.hui.mybatis.pluginsgroupId>
                        <artifactId>hui-mybatis-pluginsartifactId>
                        <version>0.0.1-SNAPSHOTversion>
                    dependency>

                    
                    <dependency>
                        <groupId>mysqlgroupId>
                        <artifactId>mysql-connector-javaartifactId>
                        <version>5.1.44version>
                    dependency>

                    
                    <dependency>
                        <groupId>com.oraclegroupId>
                        <artifactId>ojdbc6artifactId>
                        <version>11.1.0.7.0version>
                    dependency>

                    
                    <dependency>
                        <groupId>org.postgresqlgroupId>
                        <artifactId>postgresqlartifactId>
                        <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和大数据问题,转载请注明作者和原文链接,感谢

你可能感兴趣的:(Developer,Manual)