package org.nutz.dao.impl.sql.pojo; import java.util.Iterator; import java.util.List; import org.nutz.dao.entity.Entity; import org.nutz.dao.entity.MappingField; import org.nutz.dao.jdbc.ValueAdaptor; import org.nutz.dao.util.Pojos; import org.nutz.lang.Lang; public class InsertValuesPItem extends AbstractPItem { /** * 缓存要操作的字段 */ protected List<MappingField> mfs; protected List<MappingField> _mfs(Entity<?> en) { if (null == mfs) return Pojos.getFieldsForInsert(_en(en), getFieldMatcher()); return mfs; } public void joinSql(Entity<?> en, StringBuilder sb) { List<MappingField> mfs = _mfs(en); if (mfs.isEmpty()) throw Lang.makeThrow("No fields be insert nearby \"%s\"", sb); Iterator<MappingField> it = mfs.iterator(); it.next(); sb.append("VALUES(?"); while (it.hasNext()) { sb.append(",?"); it.next(); } sb.append(") "); } public int joinAdaptor(Entity<?> en, ValueAdaptor[] adaptors, int off) { List<MappingField> mfs = _mfs(en); for (MappingField mf : mfs) adaptors[off++] = mf.getAdaptor(); return off; } public int joinParams(Entity<?> en, Object obj, Object[] params, int off) { List<MappingField> mfs = _mfs(en); for (MappingField mf : mfs) { Object v = mf.getValue(obj); params[off++] = null == v ? mf.getDefaultValue(obj) : v; } return off; } public int paramCount(Entity<?> en) { return _mfs(en).size(); } }