org.nutz.dao.impl.entity.macro.SqlFieldMacro 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.entity.macro;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Entity;
import org.nutz.dao.entity.MappingField;
import org.nutz.dao.impl.jdbc.NutPojo;
import org.nutz.dao.jdbc.ValueAdaptor;
import org.nutz.dao.sql.Pojo;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.sql.SqlType;
import org.nutz.lang.Lang;
public class SqlFieldMacro extends NutPojo {
private Sql sql;
private MappingField entityField;
private SqlFieldMacro() {
super();
}
public SqlFieldMacro(MappingField field, String str) {
super();
this.entityField = field;
this.sql = Sqls.create(str);
this.setSqlType(this.sql.getSqlType());
this.setEntity(field.getEntity());
}
@Override
public Pojo setOperatingObject(Object obj) {
super.setOperatingObject(obj);
if (null != obj) {
Entity> en = entityField.getEntity();
if (!en.getType().isInstance(obj))
throw Lang.makeThrow( "Invalid operating object '%s' for field '%s'",
obj.getClass().getName(),
entityField.toString());
// 填充占位符 ...
for (String name : sql.varIndex().names())
if (!name.equals("table") && !name.equals("view") && !name.equals("field"))
sql.vars().set(name, en.getField(name).getValue(obj));
// 填充变量 ...
for (String name : sql.paramIndex().names())
sql.params().set(name, en.getField(name).getValue(obj));
}
return this;
}
public void onAfter(Connection conn, ResultSet rs) throws SQLException {
if (rs.next()) {
String colName = rs.getMetaData().getColumnName(1);
Object obj = entityField.getAdaptor().get(rs, colName);
entityField.setValue(this.getOperatingObject(), obj);
}
}
public SqlType getSqlType() {
return sql.getSqlType();
}
public ValueAdaptor[] getAdaptors() {
return sql.getAdaptors();
}
public Object[][] getParamMatrix() {
return sql.getParamMatrix();
}
public String toPreparedStatement() {
return _parseSQL(sql.duplicate()).toPreparedStatement();
}
@Override
public Pojo duplicate() {
SqlFieldMacro re = new SqlFieldMacro();
re.sql = sql.duplicate();
re.entityField = entityField;
re.setSqlType(sql.getSqlType());
re.setEntity(entityField.getEntity());
return re;
}
private Sql _parseSQL(Sql sql) {
for (String name : sql.varIndex().names()) {
if ("view".equals(name))
sql.vars().set("view", getEntity().getViewName());
else if ("table".equals(name))
sql.vars().set("table", getEntity().getTableName());
else if ("field".equals(name))
sql.vars().set("field", entityField.getColumnName());
else
sql.vars().set(name, getEntity().getField(name).getValue(getOperatingObject()));
}
for (String name : sql.paramIndex().names()) {
sql.params().set(name, getEntity().getField(name).getValue(getOperatingObject()));
}
return sql;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy