Mysql批量新增插件,核心贴出来,有需要的看我的GITHUB,准备更新微服务BLOG
github上针对mybatis-generator还有很多不同类型的插件,我实在懒的看,而且太多复杂的功能,我简单点搞自己需要的。
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>
<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>
/**
* 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);
}
}
插件通用方法/工具类,上面生成方法基于了一个工具类,下面博客有源码,真正需要的可以看看github
【Mybatis】Mybatis-Generator-Tool 生成Java和Xml的Method工具类
<plugin type="com.hui.mybatis.plugins.MysqlBatchUpdatePlugin"/>
<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>
https://github.com/ithuhui/hui-mybatis-plugins/tree/master/src/main/java/com/hui/mybatis/plugins
作者:HuHui
转载:欢迎一起讨论web和大数据问题,转载请注明作者和原文链接,感谢