栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SQL和 Bean 互转通用工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL和 Bean 互转通用工具类

package com.fresh.utils;

import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.lang.reflect.Field;
import java.util.*;

public class BeanSQLUtils {

    static Map columnMap = null;
    static Map propertyMap = null;


    static {
        columnMap = new HashMap<>();
        columnMap.put("java.lang.Long", "`%s` bigint(20) NOT NULL AUTO_INCREMENT,n");
        columnMap.put("java.lang.String", "`%s` varchar(255) DEFAULT NULL,n");
        columnMap.put("java.lang.Integer", "`%s` int(11) DEFAULT NULL,n ");
        columnMap.put("java.util.Date", "`%s` datetime DEFAULT NULL, n ");
        columnMap.put("java.math.BigDecimal", "`%s` decimal(10,2) DEFAULT NULL, n ");
        columnMap.put("java.lang.Boolean", "`%s` bit(1) DEFAULT NULL,n");
        columnMap.put("java.lang.Double", "`%s` double(10,2) DEFAULT NULL,n");
        columnMap.put("java.lang.Float", "`%s` float(10,2) DEFAULT NULL,");
        columnMap.put("primaryKey", " PRIMARY KEY (`id`) n");

        propertyMap = new HashMap<>();
        propertyMap.put("bigint", "ttttprivate java.lang.Long %s ; n");
        propertyMap.put("varchar", "ttttprivate java.lang.String %s ; n");
        propertyMap.put("char", "ttttprivate java.lang.String %s ; n");
        propertyMap.put("int", "ttttprivate java.lang.Integer %s ; n");
        propertyMap.put("datetime", "ttttprivate java.util.Date %s ; n");
        propertyMap.put("date", "ttttprivate java.util.Date %s ; n");
        propertyMap.put("decimal", "ttttprivate java.math.BigDecimal %s ; n");
        propertyMap.put("bit", "ttttprivate java.lang.Boolean %s ; n");
        propertyMap.put("double", "ttttprivate java.lang.Double %s ; n");
        propertyMap.put("float", "ttttprivate java.lang.Float %s ; n");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        StringBuffer sb = new StringBuffer();
        sb.append("        CREATE TABLE `t` (n" +
                "  `id` bigint(20) NOT NULL AUTO_INCREMENT,n" +
                "  `user_name` varchar(255) DEFAULT NULL,n" +
                "  `price` decimal(10,2) DEFAULT NULL,n" +
                "  `create_time` datetime DEFAULT NULL,n" +
                "  `num` int(11) DEFAULT NULL,n" +
                "  `percent` double(10,2) DEFAULT NULL,n" +
                "  `adder` float(10,2) DEFAULT NULL,n" +
                "  `state` bit(1) DEFAULT NULL,n" +
                "        PRIMARY KEY (`id`)n" +
                ") ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;");


        System.out.println(toBeanContent(sb.toString()));
    }


    
    private static void toMysqlscript(List list) throws ClassNotFoundException {
        for (String item : list) {
            Class aClass = Class.forName(item);
            String simpleName = aClass.getSimpleName();
            String tableName = toHump(simpleName, false);
            StringBuffer sb = new StringBuffer();
            Field[] declaredFields = aClass.getDeclaredFields();
            for (Field field : declaredFields) {
                sb.append(toMYSQLColumn(field.getType().getName(), toUnderscore(field.getName())));
            }
            sb.append(columnMap.get("primaryKey"));
            System.err.println(String.format("CREATE TABLE  `%s` (n%s ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;n", toUnderscore(tableName), sb.toString()));
        }
    }

    
    private static String toHump(String target, Boolean isTableName) {
        if (target == null || "".equals(target)) {
            return target;
        }

        char[] chars = target.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (int j = 0; j < chars.length; j++) {
            if (chars[j] == '_' && j + 1 < chars.length) {
                chars[j + 1] = Character.toUpperCase(chars[j + 1]);
            }
            if (chars[j] != '_') {
                if (j == 0) {
                    chars[j] = Character.toLowerCase(chars[j]);
                }
                if (isTableName && j == 0) {
                    chars[j] = Character.toUpperCase(chars[j]);
                }
                sb.append(chars[j]);
            }
        }

        return sb.toString();
    }


    
    public static String toUnderscore(String property) {// 下划线
        char[] chars = property.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < chars.length; i++) {
            char aChar = chars[i];
            if (Character.isUpperCase(aChar)) {
                sb.append(i == 0 ? "" : "_");
                sb.append(Character.toLowerCase(aChar));
                continue;
            }
            sb.append(aChar);
        }
        return sb.toString();
    }

    
    private static String toMYSQLColumn(String name, String fieldName) {
        return String.format(columnMap.get(name), fieldName);
    }

    
    private static ArrayList getCompleteClassName(String path) {
        File file = new File(path);
        System.out.println(file.isDirectory());
        File[] files = file.listFiles();
        ArrayList list = new ArrayList<>();
        for (File item : files) {
            String replace = item.getName().replace(".java", "");
            String absolutePath = file.getAbsolutePath();
            String newPackName = absolutePath.substring(absolutePath.indexOf("com"), absolutePath.length()).replace("\", ".");
            String classPack = newPackName + "." + replace;
            list.add(classPack);
        }
        return list;
    }

    
    private static String toBeanContent(String sql) {
        StringBuffer buffer = new StringBuffer();
        String tableName = sql.substring(sql.indexOf("`"), sql.indexOf("(")).trim().replace("`", "");// 获取表名
        String beanName = toHump(tableName, true);

        String columns = sql.substring(sql.indexOf("(") + 1, sql.lastIndexOf(")"));// 获取字段内容部分
        String[] propertyList = columns.split("n");// 分割
        StringBuffer pf = new StringBuffer();
        for (String item : propertyList) {
            String result = toPropertyContent(item);
            if (StringUtils.isNotBlank(result)) {
                pf.append(result);
            }
        }
        buffer.append(String.format("public class %s { n %s n }", beanName, pf));
        return buffer.toString();
    }

    
    private static String toPropertyContent(String columnContent) {
        if (columnContent.indexOf("`") != -1) {
            String result = columnContent.substring(columnContent.indexOf("`") + 1, columnContent.lastIndexOf("`"));
            Set nameSet = propertyMap.keySet();
            Iterator iterator = nameSet.iterator();
            while (iterator.hasNext()) {
                String next = iterator.next();
                if (columnContent.contains(next)) {
                    return String.format(propertyMap.get(next), toHump(result, false));
                }
            }
        }
        return null;
    }


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/532259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号