All Downloads are FREE. Search and download functionalities are using the official Maven repository.

system.db.sql.SQL Maven / Gradle / Ivy

package system.db.sql;

import java.util.List;
import static system.base.IDCenter.getIID;
import system.base.jclass.ClassFactory;
import system.base.jclass.ClassInfo;

/**
 *
 * @author wangchunzi
 */
final public class SQL implements Common, InsertSQL, DeleteSQL, UpdateSQL, SelectSQL {

    /**
     * 直接执行sql语句(增加、修改、删除)
     *
     * @param sql sql语句
     * @return 0|1
     */
    @Override
    final public int executeUpdate(final String sql) {
        return 0;
    }

    /**
     * InsertSQL
     *
     * @param obj 对象实例
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String addOne(final Object obj) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        StringBuilder sb = new StringBuilder();
        try {
            if (ci.unAuto) {
                sb.append("INSERT INTO ")
                        .append(ci.table_name).append("(").append(ci.table_column_name).append(") VALUES ")
                        .append(ci.getFieldString(obj,true));
            } else {
                sb.append("INSERT INTO ")
                        .append(ci.table_name).append("(").append(ci.table_column_name_add).append(") VALUES ")
                        .append(ci.getFieldString_Auto(obj,true));
            }
        } catch (IllegalArgumentException | IllegalAccessException ex) {
            return null;
        }
        return sb.toString();
    }
    /**
     * 添加一篥记录
     * @param obj 对象实例
     * @return  sql格式化的字段语句
     */
     @Override
    final public String addOneByMyID(final Object obj) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        StringBuilder sb = new StringBuilder();
        try {
            if (ci.unAuto) {
                sb.append("INSERT INTO ")
                        .append(ci.table_name).append("(").append(ci.table_column_name).append(") VALUES ")
                        .append(ci.getFieldString(obj,false));
            } else {
                sb.append("INSERT INTO ")
                        .append(ci.table_name).append("(").append(ci.table_column_name_add).append(") VALUES ")
                        .append(ci.getFieldString_Auto(obj,false));
            }
        } catch (IllegalArgumentException | IllegalAccessException ex) {
            return null;
        }
        return sb.toString();
    }

    /**
     * 解析添加对象,同时返回ID
     *
     * @param obj 操作实例
     * @return String[] [0]是sql,[1]是id
     */
    @Override
    public String[] addAndReturnID(Object obj) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        StringBuilder sb = new StringBuilder();
        String[] value;
        try {
            if (ci.unAuto) {
                value = ci.getFieldStringAndID(obj);
                sb.append("INSERT INTO ")
                        .append(ci.table_name).append("(").append(ci.table_column_name).append(") VALUES ")
                        .append(value[0]);
            } else {
                value = ci.getFieldStringAndID_Auto(obj);
                sb.append("INSERT INTO ")
                        .append(ci.table_name).append("(").append(ci.table_column_name_add).append(") VALUES ")
                        .append(value[0]);
            }
        } catch (IllegalArgumentException | IllegalAccessException ex) {
            return null;
        }
        value[0] = sb.toString();
        return value;
    }

    /**
     * 生成批量操作语句
     *
     * @param  泛型
     * @param objs 对象实例集合
     * @return 格式化的sql批处理语句 的字符串
     */
    @Override
    final public  String addVast(final List objs) {
        ClassInfo ci = ClassFactory.get(objs.get(0).getClass());
        StringBuilder sb = new StringBuilder();

        String sql;
        try {
            if (ci.unAuto) {
                sql = "INSERT INTO " + ci.table_name + "(" + ci.table_column_name + ") VALUES ";
                for (T obj : objs) {
                    sb.append(",").append(ci.getFieldString(obj,true));
                }
            } else {
                sql = "INSERT INTO " + ci.table_name + "(" + ci.table_column_name_add + ") VALUES ";
                for (T obj : objs) {
                    sb.append(",").append(ci.getFieldString_Auto(obj,true));
                }
            }
        } catch (IllegalArgumentException | IllegalAccessException ex) {
            return null;
        }

        return sql + sb.substring(1);
    }

    /**
     * addOne_replace
     *
     * @param obj 类型实例
     * @param replaceName 执行要替换自定义值的字段
     * @param replaceValue 执行代换的值
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public  String addOne_replace(final T obj, final String replaceName, final String replaceValue) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        StringBuilder sb = new StringBuilder();
        try {
            if (ci.unAuto) {
                //1. insert into table(name...) values('id 
                sb.append("INSERT INTO ").append(ci.table_name)
                        .append("(").append(ci.table_column_name).append(") VALUES ('")
                        .append(getIID()).append("'");
                //2. 接上1处的id后 不断加入值,'v','v2','v3'...
                for (int i = 1; i < ci.fieldInfo.length; i++) {
                    sb.append(",").append(ci.fieldInfo[i].fiel_name.equals(replaceName) ? replaceValue : ci.fieldInfo[i].getFormatValue(obj));
                }
            } else {
                //1. insert into table(name...) values('id 
                sb.append("INSERT INTO ").append(ci.table_name)
                        .append("(").append(ci.table_column_name_add).append(") VALUES ('")
                        .append(getIID()).append("'");
                //2. 接上1处的id后 不断加入值,'v','v2','v3'...
                for (int i = 1; i < ci.fieldInfo.length; i++) {
                    if (ci.fieldInfo[i].unAuto) {//对非自动的,进行设置值
                        sb.append(",").append(ci.fieldInfo[i].fiel_name.equals(replaceName) ? replaceValue : ci.fieldInfo[i].getFormatValue(obj));
                    }
                }
            }
            //3. 接上2处。加入)。与1处最后的括号对应。 并返回
            return sb.append(")").toString();
        } catch (IllegalArgumentException ex) {
            return "";
        }
    }

    /**
     * 生成批量操作语句
     *
     * @param  泛型未定类型
     * @param objs 对象集合
     * @param replaceName 替换字段的名字
     * @param replaceValue 替换的字段的值
     * @return 格式化的sql语句的字符串
     */
    @Override
    final public  String addVast_replace(final List objs, final String replaceName, final String replaceValue) {
        ClassInfo ci = ClassFactory.get(objs.get(0).getClass());
        StringBuilder sql_body = new StringBuilder();

        try {
            if (ci.unAuto) {
                //1. insert into table(name...) values
                String sql_head = "INSERT INTO " + ci.table_name + "(" + ci.table_column_name + ") VALUES ";
                for (T obj : objs) {
                    //2. 接上1处的 VALUES 后 不断加入值:  ,('v','v2','v3'),('v','v2','v3'),('v','v2','v3'),('v','v2','v3')...
                    sql_body.append(",('").append(getIID()).append("'");//  idkey='idvalue'
                    for (int i = 1; i < ci.fieldInfo.length; i++) {
                        sql_body.append(",").append(ci.fieldInfo[i].fiel_name.equals(replaceName) ? replaceValue : ci.fieldInfo[i].getFormatValue(obj));
                    }
                    sql_body.append(")");
                }
                //3. 接上2处。加入)。与1处最后的括号对应。 并返回
                return sql_head + sql_body.substring(1);
            } else {
                //1. insert into table(name...) values
                String sql_head = "INSERT INTO " + ci.table_name + "(" + ci.table_column_name_add + ") VALUES ";
                for (T obj : objs) {
                    //2. 接上1处的 VALUES 后 不断加入值:  ,('v','v2','v3'),('v','v2','v3'),('v','v2','v3'),('v','v2','v3')...
                    sql_body.append(",('").append(getIID()).append("'");//  idkey='idvalue'
                    for (int i = 1; i < ci.fieldInfo.length; i++) {
                        if (ci.fieldInfo[i].unAuto) {
                            sql_body.append(",").append(ci.fieldInfo[i].fiel_name.equals(replaceName) ? replaceValue : ci.fieldInfo[i].getFormatValue(obj));
                        }
                    }
                    sql_body.append(")");
                }
                //3. 接上2处。加入)。与1处最后的括号对应。 并返回
                return sql_head + sql_body.substring(1);
            }
        } catch (IllegalArgumentException ex) {
            return null;
        }
    }

    /**
     * 权限ID,删除一条记录
     *
     * @param c 操作类型
     * @param id 类关联的表的ID字段的值
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String dellByID(Class c, final String id) {
        ClassInfo ci = ClassFactory.get(c);
        return "DELETE FROM " + ci.table_name
                + " WHERE " + ci.fieldInfo[0].table_column_name + "='" + id + "'";
    }

    /**
     * 通过条件删除
     *
     * @param c 类型
     * @param condition 条件,必须抱含Where在头。
     * @return 格式化的SQL语句的字符串
     */
    @Override
    public String dellByCondition(Class c, final String condition) {
        ClassInfo ci = ClassFactory.get(c);
        return "DELETE FROM " + ci.table_name + " " + condition;
    }

    /**
     * 批量删除(ID形式:"id1,id2,id3............")
     *
     * @param c 类型
     * @param ids 多个id组成的字符串
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String dellVast(Class c, final String ids) {
        ClassInfo ci = ClassFactory.get(c);
        String id = "";
        for (String str : ids.split(",")) {
            id = id + ",'" + str + "'";
        }
        return "DELETE FROM " + ci.table_name
                + " WHERE " + ci.fieldInfo[0].table_column_name + " in(" + id.substring(1) + ") ";
    }

    /**
     * ids为 'v1','v2','v3','v4'..
     *
     * @param c 类型
     * @param ids 多个id组成的字符串
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String dellVast2(Class c, final String ids) {
        ClassInfo ci = ClassFactory.get(c);
        return "DELETE FROM " + ci.table_name
                + " WHERE " + ci.fieldInfo[0].table_column_name + " in(" + ids + ") ";
    }

    /**
     * 批量删除(ID形式:数组)
     *
     * @param c 类型
     * @param ids 多个id组成的字符串
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String dellVast(Class c, final String[] ids) {
        ClassInfo ci = ClassFactory.get(c);
        String id = "";
        for (String str : ids) {
            id = id + ",'" + str + "'";
        }
        return "DELETE FROM " + ci.table_name
                + " WHERE " + ci.fieldInfo[0].table_column_name + " in(" + id.substring(1) + ") ";
    }

    /**
     * 清空表
     *
     * @param c 类型
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String dellAll(Class c) {
        ClassInfo ci = ClassFactory.get(c);
        return "DELETE FROM " + ci.table_name;
    }

    /**
     * 更新对象。自动跳过为null的值
     *
     * @param obj 实例
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String update_notNull(Object obj) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        String setKV = "";
        try {
            String v;
            for (int i = 1; i < ci.fieldInfo.length; i++) {
                v = ci.fieldInfo[i].getFormatValue(obj);
                if (null != v) {
                    setKV = setKV + "," + ci.fieldInfo[i].table_column_name + "=" + v;
                }
            }
            return " UPDATE " + ci.table_name
                    + " SET " + setKV.substring(1)
                    + " WHERE " + ci.fieldInfo[0].table_column_name + "=" + ci.fieldInfo[0].getFormatValue(obj);
        } catch (IllegalArgumentException ex) {
            return null;
        }
    }

    /**
     * 更新正个对象各项属性(包括null)
     *
     * @param obj //更新实体
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String update_all(Object obj) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        String setKV = "";
        try {
            String v;
            for (int i = 1; i < ci.fieldInfo.length; i++) {
                v = ci.fieldInfo[i].getFormatValue(obj);
                setKV = setKV + "," + ci.fieldInfo[i].table_column_name + "=" + v;
            }
            return " UPDATE " + ci.table_name
                    + " SET " + setKV.substring(1)
                    + " WHERE " + ci.fieldInfo[0].table_column_name + "=" + ci.fieldInfo[0].getFormatValue(obj);
        } catch (IllegalArgumentException ex) {
            return null;
        }
    }

    /**
     * 根据ID更新(除开指定字段的值)。不管值是否为null
     *
     * @param obj //更新实体
     * @param rejectField 不更新的对象属性集体//“sdf,s2df,sdfdsfsd,sdfsdfdsf,sdfsdfsdfdf”
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String updateSome_reject(Object obj, final String rejectField) {

        ClassInfo ci = ClassFactory.get(obj.getClass());
        String setKV = "";
        try {
            String[] reject = rejectField.split(",");
            ccc:
            for (int i = 1; i < ci.fieldInfo.length; i++) {
                for (String r : reject) {
                    if (r.equals(ci.fieldInfo[i].fiel_name)) {
                        continue ccc;//在拒绝列表中,跳过下面代码,进行下一轮循环。
                    }
                }
                setKV = setKV + "," + ci.fieldInfo[i].table_column_name + "=" + ci.fieldInfo[i].getFormatValue(obj);
            }
            return " UPDATE " + ci.table_name
                    + " SET " + setKV.substring(1)
                    + " WHERE " + ci.fieldInfo[0].table_column_name + "=" + ci.fieldInfo[0].getFormatValue(obj);
        } catch (IllegalArgumentException ex) {
            return null;
        }
    }

    /**
     * 根据ID更新指定属性。不管值是否为null
     *
     * @param obj //更新实体
     * @param alloyField 更新的对象属性集体//“sdf,s2df,sdfdsfsd,sdfsdfdsf,sdfsdfsdfdf”
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String updateSome_alloy(Object obj, final String alloyField) {
        ClassInfo ci = ClassFactory.get(obj.getClass());
        String setKV = "";
        try {
            String[] alloy = alloyField.split(",");
            ccc:
            for (int i = 1; i < ci.fieldInfo.length; i++) {
                for (String r : alloy) {
                    if (r.equals(ci.fieldInfo[i].fiel_name)) {
                        setKV = setKV + "," + ci.fieldInfo[i].table_column_name + "=" + ci.fieldInfo[i].getFormatValue(obj);
                        continue ccc;//在拒绝列表中,跳过下面代码,进行下一轮循环。
                    }
                }
            }
            return " UPDATE " + ci.table_name
                    + " SET " + setKV.substring(1)
                    + " WHERE " + ci.fieldInfo[0].table_column_name + "=" + ci.fieldInfo[0].getFormatValue(obj);
        } catch (IllegalArgumentException ex) {
            return null;
        }
    }

    /**
     * 查询一条记录,根据ID
     *
     * @param c 类
     * @param id 类关联的表的id的值
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectOneByID(Class c, final String id) {
        ClassInfo ci = ClassFactory.get(c);
        return "SELECT * FROM " + ci.table_name
                + " WHERE " + ci.fieldInfo[0].table_column_name + "='" + id + "';";
    }

    /**
     * 查询一条记录。根据条件
     *
     * @param c 类
     * @param condition 条件——字符串
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectOneByCondition(Class c, final String condition) {
        ClassInfo ci = ClassFactory.get(c);
        return "SELECT * FROM " + ci.table_name + " " + condition + " LIMIT 1;";
    }

    /**
     * 查询表的总记录数
     *
     * @param c 类
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectCount(Class c) {
        return "SELECT COUNT(*) FROM " + ClassFactory.get(c).table_name;
    }

    /**
     * 查询表的记录数 根据条件
     *
     * @param c 类
     * @param condition 条件
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectCountByCondition(Class c, final String condition) {
        return "SELECT COUNT(*) FROM " + ClassFactory.get(c).table_name + " " + condition;
    }

    /**
     * 查询所有
     *
     * @param c 类
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String select(Class c) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name;
    }

    /**
     * 查询所有,并进行自定义排序
     *
     * @param c 类
     * @param orderby 对于数据库字段前缀:无!
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String select(Class c, final String orderby) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name + " " + orderby;
    }

    /**
     * 查询所有 根据条件
     *
     * @param c 类
     * @param condition 条件
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectByCondition(Class c, final String condition) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name + " " + condition;
    }

    /**
     * 查询所有,根据条件,并进行自定义排序
     *
     * @param c 类
     * @param condition 条件
     * @param orderby 对于数据库字段前缀:无!
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectByCondition(Class c, final String condition, final String orderby) {
        ClassInfo ci = ClassFactory.get(c);
        return "SELECT * FROM " + ci.table_name + " " + condition + " " + orderby;
    }

    /**
     * 分页查询
     *
     * @param c 类
     * @param page 页码
     * @param pageCount 页的数据
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectVast(Class c, final int page, final int pageCount) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name + " LIMIT " + (page - 1) * pageCount + "," + pageCount;
    }

    /**
     * 分页查询 并进行排序
     *
     * @param c 类
     * @param page 页码
     * @param pageCount 页的数据
     * @param orderby 排序
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectVast(Class c, int page, int pageCount, final String orderby) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name
                + " " + orderby
                + " LIMIT " + (page - 1) * pageCount + "," + pageCount;
    }

    /**
     * 分页查询 根据条件
     *
     * @param c 类
     * @param page 页码
     * @param pageCount 页的数据
     * @param condition 条件
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectVastByCondition(Class c, final int page, final int pageCount, final String condition) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name
                + " " + condition
                + " LIMIT " + (page - 1) * pageCount + "," + pageCount;
    }

    /**
     * 分页查询 根据条件 并进行排序
     *
     * @param c 类
     * @param page 页码
     * @param pageCount 页的数据
     * @param condition 条件
     * @param orderby 排序
     * @return 格式化的SQL语句的字符串
     */
    @Override
    final public String selectVastByCondition(Class c, final int page, final int pageCount, final String condition, final String orderby) {
        return "SELECT * FROM " + ClassFactory.get(c).table_name
                + " " + condition
                + " " + orderby
                + " LIMIT " + (page - 1) * pageCount + "," + pageCount;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy