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

system.db.dao.AddDaoImp Maven / Gradle / Ivy

package system.db.dao;

import java.util.List;
import system.base.jclass.ClassFactory;
import system.base.jclass.ClassInfo;
import system.base.jclass.field.FieldInfo;
import system.db.dao.i.AddDao;
import system.db.dao.i.Add_OO_OM_Dao;
import system.db.sql.SQL;

/**
 *
 * @author wangchunzi
 */
public class AddDaoImp implements AddDao, Add_OO_OM_Dao {

    private final SQL sql;
    private final ADUS adus;

    public AddDaoImp(final ADUS adus, final SQL sql) {
        this.sql = sql;
        this.adus = adus;
    }

    /**
     * 添加。
     *
     * @param obj
     * @param unique
     * @return int
     */
    @Override
    public int addOne(Object obj, String... unique) {

        if (unique.length == 0) {
            return adus.executeUpdate(sql.addOne(obj));
        }
        ClassInfo ci = ClassFactory.get(obj.getClass());
        StringBuilder sb = new StringBuilder();
        int j = 0;
        for (int i = 1; i < ci.fieldInfo.length; i++) {
            for (String u : unique) {
                if (ci.fieldInfo[i].fiel_name.equals(u)) {//检查是否我们要找到字段
                    j++;//用于计数 unique中的元素是否找齐了。找齐了即时进入数据库查询。
                    //是我们要找的字段。则,采用 xx='值' OR xx='值'...... 方式进行查询数据库。
                    sb.append(" OR ").append(ci.fieldInfo[i].table_column_name).append("=").append(ci.fieldInfo[i].getFormatValue(obj));
                    //检查我们的唯一列的集合是否找齐。
                    if (j == unique.length) {
                        //当前唯一列是最后一个。我们找齐了。执行数据库查询。如果唯一列集合中,任意一列有值,直接返回-1
                        // adus.executeQueryOne(c, sql.selectOneByCondition(c, condition));
                        if (!ci.fieldInfo[0].isNullField(
                                adus.executeQueryOne(
                                        obj.getClass(), sql.selectOneByCondition(obj.getClass(), "WHERE " + sb.substring(4))), false)) {
                            return -1;
                        }
                        return adus.executeUpdate(sql.addOne(obj));
                    }
                }
            }
        }
        return 0;
    }

    @Override
    public int addOneByMyID(Object obj, String... unique) {

        if (unique.length == 0) {
            return adus.executeUpdate(sql.addOneByMyID(obj));
        }
        ClassInfo ci = ClassFactory.get(obj.getClass());
        StringBuilder sb = new StringBuilder();
        int j = 0;
        for (int i = 1; i < ci.fieldInfo.length; i++) {
            for (String u : unique) {
                if (ci.fieldInfo[i].fiel_name.equals(u)) {//检查是否我们要找到字段
                    j++;//用于计数 unique中的元素是否找齐了。找齐了即时进入数据库查询。
                    //是我们要找的字段。则,采用 xx='值' OR xx='值'...... 方式进行查询数据库。
                    sb.append(" OR ").append(ci.fieldInfo[i].table_column_name).append("=").append(ci.fieldInfo[i].getFormatValue(obj));
                    //检查我们的唯一列的集合是否找齐。
                    if (j == unique.length) {
                        //当前唯一列是最后一个。我们找齐了。执行数据库查询。如果唯一列集合中,任意一列有值,直接返回-1
                        // adus.executeQueryOne(c, sql.selectOneByCondition(c, condition));
                        if (!ci.fieldInfo[0].isNullField(
                                adus.executeQueryOne(
                                        obj.getClass(), sql.selectOneByCondition(obj.getClass(), "WHERE " + sb.substring(4))), false)) {
                            return -1;
                        }
                        return adus.executeUpdate(sql.addOneByMyID(obj));
                    }
                }
            }
        }
        return 0;
    }

    /**
     * 批量操作语句
     *
     * @param  泛型
     * @param list
     * @return int
     */
    @Override
    public  int addVast(List list, String... unique) {
        if (unique.length == 0) {
            return adus.executeUpdate(sql.addVast(list));
        }
        Class tc = list.get(0).getClass();
        ClassInfo ci = ClassFactory.get(tc);
        FieldInfo[] mfi = new FieldInfo[unique.length];
        int j = 0;
        for (FieldInfo f : ci.fieldInfo) {
            for (String u : unique) {
                if (f.fiel_name.equals(u)) {
                    mfi[j++] = f;
                }
            }
        }
        String in;
        for (FieldInfo myfi : mfi) {
            in = "";
            for (T obj : list) {
                in = in + "," + myfi.getFormatValue(obj);
            }
            if (!myfi.isNullField(
                    adus.executeQueryOne(
                            tc, sql.selectByCondition(tc, "WHERE " + myfi.table_column_name + " IN(" + in.substring(1) + ")")
                    ), false)) {
                return -1;
            }
        }
        return adus.executeUpdate(sql.addVast(list));
    }

    @Override
    public  int[] add_OO(O o, O2... o2s) {
        int length = o2s.length + 1;
        ClassInfo ci = ClassFactory.get(o.getClass());
        String[] osql = sql.addAndReturnID(o);
        String[] o2sql = new String[length];
        o2sql[0] = osql[0];

        for (int i = 1; i < length; i++) {
            o2sql[i] = sql.addOne_replace(o2s[i - 1], ci.fieldInfo[0].fiel_name, "'" + osql[1] + "'");
        }
        return adus.executeBatch(o2sql);
    }

    @Override
    public  int[] add_OM(O o, List... m) {
        int length = m.length + 1;
//        ClassInfo ci = ClassFactory.get(m[0].get(0).getClass());
        ClassInfo ci = ClassFactory.get(o.getClass());
        String[] osql = sql.addAndReturnID(o);
        String[] o2sql = new String[length];
        o2sql[0] = osql[0];
        for (int i = 1; i < length; i++) {
            o2sql[i] = sql.addVast_replace(m[i - 1], ci.fieldInfo[0].fiel_name, "'" + osql[1] + "'");
        }
        return adus.executeBatch(o2sql);
    }

    @Override
    public int addOneByCondition(Object obj, String denyCondition, String... unique) {
        if (null == denyCondition || denyCondition.isEmpty()) {
            return this.addOne(obj, unique);
        }
        ClassInfo ci = ClassFactory.get(obj.getClass());
        if (null == ci.fieldInfo[0].get(this.adus.executeQueryOne(obj.getClass(), denyCondition), null)) {
            return -1;
        }
        return this.addOne(obj, unique);
    }

    @Override
    public  int addVastByCondition(List objs, String denyCondition, String... unique) {
        if (null == denyCondition || denyCondition.isEmpty()) {
            return this.addVast(objs, unique);
        }
        Class c = objs.get(0).getClass();
        ClassInfo ci = ClassFactory.get(c);
        if (null == ci.fieldInfo[0].get(this.adus.executeQueryOne(c, denyCondition), null)) {
            return -1;
        }
        return this.addVast(objs, unique);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy