Search in sources :

Example 51 with Pojo

use of org.nutz.dao.sql.Pojo in project nutz by nutzam.

the class NutDao method fetch.

public <T> T fetch(Entity<T> entity, String name) {
    if (name == null)
        throw new IllegalArgumentException("name MUST NOT NULL!");
    if (entity.getNameField() == null)
        throw new DaoException("Need @Name for " + entity.getType());
    Pojo pojo = pojoMaker.makeQuery(entity).append(Pojos.Items.cndName(entity, name)).addParamsBy(name).setAfter(_pojo_fetchEntity);
    _exec(pojo);
    return pojo.getObject(entity.getType());
}
Also used : Pojo(org.nutz.dao.sql.Pojo) DaoException(org.nutz.dao.DaoException)

Example 52 with Pojo

use of org.nutz.dao.sql.Pojo in project nutz by nutzam.

the class NutDao method _count.

private int _count(Entity<?> en, String tableName, Condition cnd) {
    // 如果有条件的话
    if (null != cnd) {
        Pojo pojo = pojoMaker.makeFunc(tableName, "COUNT", "*");
        pojo.setEntity(en);
        // 高级条件接口,直接得到 WHERE 子句
        if (cnd instanceof Criteria) {
            if (cnd instanceof SimpleCriteria) {
                String beforeWhere = ((SimpleCriteria) cnd).getBeforeWhere();
                if (!Strings.isBlank(beforeWhere))
                    pojo.append(Pojos.Items.wrap(beforeWhere));
            }
            pojo.append(((Criteria) cnd).where());
            // MySQL/PgSQL/SqlServer 与 Oracle/H2的结果会不一样,奇葩啊
            GroupBy gb = ((Criteria) cnd).getGroupBy();
            pojo.append(gb);
        } else // 否则暴力获取 WHERE 子句
        {
            String str = Pojos.formatCondition(en, cnd);
            if (!Strings.isBlank(str)) {
                String[] ss = str.toUpperCase().split("ORDER BY");
                pojo.append(Pojos.Items.wrap(str.substring(0, ss[0].length())));
            }
        }
        // 设置回调,并执行 SQL
        pojo.setAfter(_pojo_fetchInt);
        _exec(pojo);
        return pojo.getInt();
    }
    // 没有条件,直接生成表达式
    return func(tableName, "COUNT", "*");
}
Also used : Pojo(org.nutz.dao.sql.Pojo) GroupBy(org.nutz.dao.sql.GroupBy) SimpleCriteria(org.nutz.dao.util.cri.SimpleCriteria) Criteria(org.nutz.dao.sql.Criteria) SimpleCriteria(org.nutz.dao.util.cri.SimpleCriteria)

Example 53 with Pojo

use of org.nutz.dao.sql.Pojo in project nutz by nutzam.

the class AbstractJdbcExpert method fetchPojoId.

public Pojo fetchPojoId(Entity<?> en, MappingField idField) {
    String autoSql = "SELECT MAX($field) AS $field FROM $view";
    Pojo autoInfo = new SqlFieldMacro(idField, autoSql);
    autoInfo.setEntity(en);
    return autoInfo;
}
Also used : Pojo(org.nutz.dao.sql.Pojo) SqlFieldMacro(org.nutz.dao.impl.entity.macro.SqlFieldMacro)

Example 54 with Pojo

use of org.nutz.dao.sql.Pojo in project nutz by nutzam.

the class DoClearRelationByLinkedFieldLinkVisitor method visit.

public void visit(Object obj, LinkField lnk) {
    if (lnk instanceof ManyManyLinkField) {
        final ManyManyLinkField mm = (ManyManyLinkField) lnk;
        Object value = mm.getValue(obj);
        if (Lang.eleSize(value) == 0)
            return;
        final Pojo pojo = opt.maker().makeDelete(mm.getRelationName());
        pojo.append(Pojos.Items.cndColumn(mm.getToColumnName(), mm.getLinkedField(), null));
        Lang.each(value, new Each<Object>() {

            public void invoke(int i, Object ele, int length) throws ExitLoop, LoopException {
                pojo.addParamsBy(mm.getLinkedField().getValue(ele));
            }
        });
        opt.add(pojo);
    }
}
Also used : Pojo(org.nutz.dao.sql.Pojo) ExitLoop(org.nutz.lang.ExitLoop) LoopException(org.nutz.lang.LoopException) ManyManyLinkField(org.nutz.dao.impl.entity.field.ManyManyLinkField)

Example 55 with Pojo

use of org.nutz.dao.sql.Pojo in project nutz by nutzam.

the class DoInsertRelationLinkVisitor method visit.

public void visit(final Object obj, LinkField lnk) {
    // 只有多对多的映射才被考虑
    if (lnk instanceof ManyManyLinkField) {
        // 获取两边映射主键的值
        final ManyManyLinkField mm = (ManyManyLinkField) lnk;
        Object value = lnk.getValue(obj);
        final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(Lang.eleSize(value));
        Lang.each(value, new Each<Object>() {

            public void invoke(int i, Object ele, int length) throws ExitLoop, LoopException {
                list.add(new RelationObjectMap(mm, obj, ele));
            }
        });
        if (list.isEmpty())
            return;
        Entity<Map<String, Object>> en = holder.makeEntity(mm.getRelationName(), list.get(0));
        Pojo pojo = opt.maker().makeInsert(en);
        pojo.setOperatingObject(list);
        for (Object p : list) pojo.addParamsBy(p);
        opt.add(pojo);
    }
}
Also used : Pojo(org.nutz.dao.sql.Pojo) ArrayList(java.util.ArrayList) ManyManyLinkField(org.nutz.dao.impl.entity.field.ManyManyLinkField) RelationObjectMap(org.nutz.dao.util.RelationObjectMap) ExitLoop(org.nutz.lang.ExitLoop) LoopException(org.nutz.lang.LoopException) RelationObjectMap(org.nutz.dao.util.RelationObjectMap) Map(java.util.Map)

Aggregations

Pojo (org.nutz.dao.sql.Pojo)67 SqlFieldMacro (org.nutz.dao.impl.entity.macro.SqlFieldMacro)6 LinkField (org.nutz.dao.entity.LinkField)5 LinkVisitor (org.nutz.dao.entity.LinkVisitor)5 ExitLoop (org.nutz.lang.ExitLoop)5 LoopException (org.nutz.lang.LoopException)5 DaoException (org.nutz.dao.DaoException)4 ManyManyLinkField (org.nutz.dao.impl.entity.field.ManyManyLinkField)4 Criteria (org.nutz.dao.sql.Criteria)4 PItem (org.nutz.dao.sql.PItem)4 ArrayList (java.util.ArrayList)3 DoClearLinkVisitor (org.nutz.dao.impl.link.DoClearLinkVisitor)3 DoClearRelationByHostFieldLinkVisitor (org.nutz.dao.impl.link.DoClearRelationByHostFieldLinkVisitor)3 DoClearRelationByLinkedFieldLinkVisitor (org.nutz.dao.impl.link.DoClearRelationByLinkedFieldLinkVisitor)3 DoDeleteLinkVisitor (org.nutz.dao.impl.link.DoDeleteLinkVisitor)3 DoInsertLinkVisitor (org.nutz.dao.impl.link.DoInsertLinkVisitor)3 DoInsertRelationLinkVisitor (org.nutz.dao.impl.link.DoInsertRelationLinkVisitor)3 DoUpdateLinkVisitor (org.nutz.dao.impl.link.DoUpdateLinkVisitor)3 DoUpdateRelationLinkVisitor (org.nutz.dao.impl.link.DoUpdateRelationLinkVisitor)3 ConditionPItem (org.nutz.dao.impl.sql.pojo.ConditionPItem)3