org.nutz.dao.impl.SimpleNesting Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nutz Show documentation
Show all versions of nutz Show documentation
Nutz, which is a collections of lightweight frameworks, each of them can be used independently
package org.nutz.dao.impl;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.nutz.dao.Cnd;
import org.nutz.dao.Condition;
import org.nutz.dao.Dao;
import org.nutz.dao.FieldMatcher;
import org.nutz.dao.Nesting;
import org.nutz.dao.entity.Entity;
import org.nutz.dao.jdbc.JdbcExpert;
import org.nutz.dao.pager.Pager;
import org.nutz.dao.sql.Pojo;
import org.nutz.dao.sql.SqlType;
import org.nutz.dao.util.Pojos;
import org.nutz.lang.Lang;
public class SimpleNesting implements Nesting {
private static final String DISTINCT = "distinct";
public SimpleNesting(Dao dao) {
this.expert = dao.getJdbcExpert();
holder = dao.getEntityHolder();
}
protected JdbcExpert expert;
protected EntityHolder holder;
private Pojo pojo;
@Override
public Nesting select(String names, Class> clazz, Condition cnd) {
make(clazz);
distinct(pojo, names);
pojo.append(Pojos.Items.queryEntityFields());
pojo.append(Pojos.Items.wrap("FROM"));
pojo.append(Pojos.Items.entityViewName());
pojo.append(Pojos.Items.cnd(cnd));
if (cnd instanceof Cnd) {
Pager pager = ((Cnd) cnd).getPager();
if (pager != null) {
pojo.setPager(pager);
}
}
expert.formatQuery(pojo);
return this;
}
private Pojo make(Class> clazz) {
Entity> en = holder.getEntity(clazz);
pojo = Pojos.pojo(expert, en, SqlType.SELECT);
pojo.setEntity(en);
return pojo;
}
private Pojo distinct(Pojo pojo, String names) {
if (!Lang.isEmpty(names) && names.length() != 0) {
List nameList = Arrays.asList(names.trim().split(","));
if (names.toLowerCase().contains(DISTINCT)) {
pojo.append(Pojos.Items.wrap(DISTINCT));
// distinct只能作用一个在一个字段上
// 做一个排序处理,把DISTINCT的字段移到第一个
for (int i = 0; i < nameList.size(); ++i) {
if (nameList.get(i).toLowerCase().contains(DISTINCT)) {
Collections.swap(nameList, 0, i);
// 为了让字段作为正则匹配到列,删除DINSTINCT
nameList.set(0, nameList.get(0).toLowerCase().replace(DISTINCT, "").toLowerCase());
break;
}
}
}
StringBuilder sb = new StringBuilder();
for (String name : nameList) {
sb.append(name.trim());
sb.append("|");
}
sb.setLength(sb.length() - 1);
pojo.getContext().setFieldMatcher(FieldMatcher.make(sb.toString(), null, true));
}
return pojo;
}
@Override
public String toString() {
return pojo.toString();
}
}