工具類-Object轉Sql

駝峯命名反轉換

/**
     * 駝峯命名反轉換
     */
    private static String toUnderlineName(String s) {
        if (s == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            boolean nextUpperCase = true;
            if (i < (s.length() - 1)) {
                nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
            }
            if ((i >= 0) && Character.isUpperCase(c)) {
                if (!upperCase || !nextUpperCase) {
                    if (i > 0) sb.append(SEPARATOR);
                }
                upperCase = true;
            } else {
                upperCase = false;
            }

            sb.append(Character.toUpperCase(c));
        }

        return sb.toString();
    }

Object轉InsertSql

/**
     * 將object轉換成insertSql
     */
    public static String objectByInsertSQL(Object object){
        String tableName = toUnderlineName(object.getClass().getSimpleName());//表名
        String insertSql = "INSERT INTO "+tableName;
        String attribute = "";//屬性
        String attributeValue = "";//值
        Field[] fields = object.getClass().getDeclaredFields(); //獲取實體類的所有屬性,返回Field數組
        for (Field field : fields) {
            field.setAccessible(true);//類中的成員變量爲private,須進行此操作
            String name = toUnderlineName(field.getName()); //獲取屬性的名字
//            name = name.substring(0,1).toUpperCase()+name.substring(1); //將屬性的首字符大寫,方便構造get,set方法
            String type = field.getGenericType().toString(); //獲取屬性的類型
            Object value = null;
            try {
                value = field.get(object);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            attribute += name+",";
            if (value != null && type.equals("class java.lang.String")){//如果type是類類型,則前面包含"class ",後面跟類名
                attributeValue += "'"+value+"',";
            }else {
                attributeValue += value+",";
            }

        }
        return insertSql + "("+attribute.substring(0,attribute.length()-1)+") VALUES ("+attributeValue.substring(0,attributeValue.length()-1)+")";
    }

Object轉UpdateSql

/**
     * 將object轉換成updateSql
     * @param object 類
     * @param keys 主鍵
     * @return updateSql
     */
    public static String objectByUpdateSQL(Object object, List<String> keys){
        String tableName = toUnderlineName(object.getClass().getSimpleName());//表名
        String updateSql = "UPDATE "+tableName+ " SET ";
        String attribute = "";//屬性
        String attributeValue = "";//值
        String condition = "";//Where條件
        Field[] fields = object.getClass().getDeclaredFields(); //獲取實體類的所有屬性,返回Field數組
        for (Field field : fields) {
            field.setAccessible(true);//類中的成員變量爲private,須進行此操作
            String name = toUnderlineName(field.getName()); //獲取屬性的名字
            Object value = null;//獲取屬性值
            String type = field.getGenericType().toString(); //獲取屬性的類型
            try {
                value = field.get(object);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            if (value != null && type.equals("class java.lang.String")) {//如果type是類類型,則前面包含"class ",後面跟類名
                value = "'"+value+"'";
            }
            boolean isCondition = true;
            for (String key : keys){
                if (key.equals(name)){
                    condition += name + "=" + value+" AND ";
                    isCondition = false;
                }
            }
            if (isCondition){
                updateSql += name + "=" + value + ",";
            }
        }
        return updateSql.substring(0,updateSql.length()-1) + " WHERE " +condition.substring(0,condition.length()-4);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章