Java对象转成Mysql Insert语句

package com.example.demo.utils;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;

/**
 * @program: demo
 * @description:
 * @author: ch.zhang
 * @create: 2022-01-12
 */
public class SqlUtils {

    private static final String UNDERLINE = "_";

    private static final String APOSTROPHE = "'";

    private static final String COMMA = ", ";

    private static final String LEFT_BRACKET = "(";

    private static final String RIGHT_BRACKET = ")";

    private static final String SEMICOLON = ";";

    /**
     * 批量插入
     *
     * @param list      对象集合
     * @param tableName 表名
     */

    public static void joinBatchInsert(List list, String tableName) {
        System.out.println("\n");

        StringBuilder br = new StringBuilder(joinSqlColumnName(list.get(0).getClass(), tableName));
        br.append("\n");
        out:
        for (int i = 0; i < list.size(); i++) {
            br.append(LEFT_BRACKET);
            Object o = list.get(i);
            Field[] fields = o.getClass().getDeclaredFields();

            for (int j = 0; j < fields.length; j++) {
                Field field = fields[j];
                try {
                    field.setAccessible(Boolean.TRUE);
                    Object value = field.get(o);
                    String name = field.getType().getSimpleName();
                    if ("String".equals(name)) {
                        br.append(Objects.isNull(value) ? "NULL" + COMMA : APOSTROPHE + value + APOSTROPHE + COMMA);
                    } else if ("Integer".equals(name) || "BigDecimal".equals(name)) {
                        br.append(value + COMMA);
                    } else if ("Date".equals(name)) {
                        br.append("now()" + COMMA);
                    } else {
                        System.out.println("===========缺少类型===========" + name);
                        break out;
                    }
                } catch (IllegalAccessException e) {
                    System.out.println("===========Exception===========" + e);
                    break out;
                }
            }
            br.replace(br.length() - 2, br.length() - 2, RIGHT_BRACKET).append("\n");
        }

        System.out.println(br.replace(br.length() - 3, br.length(), SEMICOLON));
    }

    /**
     * 拼接sql插入字段名
     *
     * @param clazz     实体类类型
     * @param tableName 表名
     * @return
     */

    private static String joinSqlColumnName(Class clazz, String tableName) {
        StringBuilder br = new StringBuilder("INSERT INTO " + tableName + LEFT_BRACKET);
        Field[] fields = clazz.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            br.append(fieldConvertColumn(fields[i].getName()) + COMMA);
        }
        return br.substring(0, br.length() - 2) + ") VALUES";
    }

    /**
     * java对象属性名转数据库字段名
     *
     * @param attribute 属性名
     * @return
     */

    private static String fieldConvertColumn(String attribute) {
        StringBuilder br = new StringBuilder();
        for (int i = 0; i < attribute.length(); i++) {
            char c = attribute.charAt(i);
            if (Character.isUpperCase(c)) {
                br.append(UNDERLINE);
            }
            br.append(c);
        }
        return br.toString().toLowerCase();
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值