mybatis批量生成更新、新增语句
程序员文章站
2022-03-04 20:09:10
...
本文是根据数据库字段、属性生成mybatis.xml 内部的批量更新修改语句
一、打开navicat 复制 表名、类型、是否为null
name varchar 0
age int 1
将其结构通过工具转为 name,varchar,0;age,int,1;形式(工具可以是notepade++或者excel)
代码示例如下
package com.company;
public class Main {
public static void main(String[] args) {
String inString="name,vachar,0;" +
"age_male,int,1";
String[] strArrs=inString.split(";");
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append(" <update id=\"updateBatch\" parameterType=\"java.util.List\" > \r\n");
stringBuffer.append(" <foreach collection=\"list\" item=\"item\" index=\"index\" open=\"\" close=\"\" separator=\";\">"+" \r\n");
stringBuffer.append("update 表名 "+" \r\n");
stringBuffer.append(" <set >"+" \r\n");
for (String str:strArrs){
//数组第一个是名称第二个是类型第三个为是否weinull
String[] strs=str.split(",");
//字段可能是包含下划线如 cc_bb 需要转为ccBb
String orgStr0=strs[0];
String newStr0=upperTable(orgStr0);
//需要根据不同类型修改 <if test="item.standardFromUuid != null" > 以下指举一个例子
if(strs[1].equals("int")){
stringBuffer.append("<if test=\"item."+newStr0+" != null\" >"+" \r\n");
stringBuffer.append(orgStr0+" = #{item."+newStr0+",jdbcType=VARCHAR},"+" \r\n");
stringBuffer.append("</if>"+" \r\n");
}
}
stringBuffer.append(""+" \r\n");
stringBuffer.append(""+" \r\n");
stringBuffer.append(""+" \r\n");
stringBuffer.append(""+" \r\n");
stringBuffer.append(" <set >"+" \r\n");
stringBuffer.append(" where id = #{item.id}"+" \r\n");
stringBuffer.append("</foreach> "+" \r\n");
System.out.println(stringBuffer);
/**
*
* 打印示例
<update id="updateBatch" parameterType="java.util.List" >
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update standard_relation
<set >
<if test="item.standardFromUuid != null" >
standard_from_uuid = #{item.standardFromUuid,jdbcType=VARCHAR},
</if>
<if test="item.standardToUuid != null" >
standard_to_uuid = #{item.standardToUuid,jdbcType=VARCHAR},
</if>
<if test="item.gmtModified != null" >
gmt_modified = #{item.gmtModified,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{item.id,jdbcType=BIGINT}
</foreach>
*/
}
public static String upperTable(String param)
{
if (param == null || "".equals(param.trim())) {
return "";
}
int len = param.length();
StringBuilder sb = new StringBuilder(len);
Boolean flag = false; // "_" 后转大写标志,默认字符前面没有"_"
for (int i = 0; i < len; i++) {
char c = param.charAt(i);
if (c == '_') {
flag = true;
continue; //标志设置为true,跳过
} else {
if (flag == true) {
//表示当前字符前面是"_" ,当前字符转大写
sb.append(Character.toUpperCase(param.charAt(i)));
flag = false; //重置标识
} else {
sb.append(Character.toLowerCase(param.charAt(i)));
}
}
}
return sb.toString();
}
}
上一篇: Redis中Scan命令的基本使用教程
下一篇: Java 面向对象中的小测试
推荐阅读