欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis批量生成更新、新增语句

程序员文章站 2022-03-04 20:09:10
...

本文是根据数据库字段、属性生成mybatis.xml 内部的批量更新修改语句

一、打开navicat 复制 表名、类型、是否为null

mybatis批量生成更新、新增语句

 

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();
    }
}