use of org.nutz.dao.Chain in project nutz by nutzam.
the class ExtDaoInvocationHandler method updateBySpecialChain.
/**
* 执行一个特殊的Chain(事实上普通Chain也能执行,但不建议使用)
*
* @see org.nutz.dao.Chain#addSpecial(String, Object)
*/
@SuppressWarnings({ "rawtypes" })
public static int updateBySpecialChain(Dao dao, Entity en, String tableName, Chain chain, Condition cnd) {
if (en != null)
tableName = en.getTableName();
if (tableName == null)
throw Lang.makeThrow(DaoException.class, "tableName and en is NULL !!");
final StringBuilder sql = new StringBuilder("UPDATE ").append(tableName).append(" SET ");
Chain head = chain.head();
final List<Object> values = new ArrayList<Object>();
final List<ValueAdaptor> adaptors = new ArrayList<ValueAdaptor>();
while (head != null) {
MappingField mf = null;
if (en != null)
mf = en.getField(head.name());
String colName = head.name();
if (mf != null)
colName = mf.getColumnNameInSql();
sql.append(colName).append("=");
if (head.special()) {
if (head.value() != null && head.value() instanceof String) {
String str = (String) head.value();
if (str.length() > 0) {
switch(str.charAt(0)) {
case '+':
case '-':
case '*':
case '/':
case '%':
case '&':
case '^':
case '|':
sql.append(colName);
break;
}
}
}
sql.append(head.value());
} else {
sql.append("?");
values.add(head.value());
ValueAdaptor adaptor = Jdbcs.getAdaptorBy(head.value());
if (mf != null && mf.getAdaptor() != null)
adaptor = mf.getAdaptor();
adaptors.add(adaptor);
}
sql.append(" ");
head = head.next();
if (head != null)
sql.append(", ");
}
if (cnd != null)
sql.append(" ").append(cnd.toSql(en));
if (log.isDebugEnabled())
log.debug(sql);
final int[] ints = new int[1];
dao.run(new ConnCallback() {
public void invoke(Connection conn) throws Exception {
PreparedStatement ps = conn.prepareStatement(sql.toString());
try {
for (int i = 0; i < values.size(); i++) adaptors.get(i).set(ps, values.get(i), i + 1);
ints[0] = ps.executeUpdate();
} finally {
Daos.safeClose(ps);
}
}
});
return ints[0];
}
use of org.nutz.dao.Chain in project nutz by nutzam.
the class ExtDaoInvocationHandler method insertBySpecialChain.
/**
* 执行一个特殊的Chain(事实上普通Chain也能执行,但不建议使用)
*
* @see org.nutz.dao.Chain#addSpecial(String, Object)
*/
@SuppressWarnings({ "rawtypes" })
public static void insertBySpecialChain(Dao dao, Entity en, String tableName, Chain chain) {
if (en != null)
tableName = en.getTableName();
if (tableName == null)
throw Lang.makeThrow(DaoException.class, "tableName and en is NULL !!");
final StringBuilder sql = new StringBuilder("INSERT INTO ").append(tableName).append(" (");
StringBuilder _value_places = new StringBuilder(" VALUES(");
final List<Object> values = new ArrayList<Object>();
final List<ValueAdaptor> adaptors = new ArrayList<ValueAdaptor>();
Chain head = chain.head();
while (head != null) {
String colName = head.name();
MappingField mf = null;
if (en != null) {
mf = en.getField(colName);
if (mf != null)
colName = mf.getColumnNameInSql();
}
sql.append(colName);
if (head.special()) {
_value_places.append(head.value());
} else {
if (en != null)
mf = en.getField(head.name());
_value_places.append("?");
values.add(head.value());
ValueAdaptor adaptor = Jdbcs.getAdaptorBy(head.value());
if (mf != null && mf.getAdaptor() != null)
adaptor = mf.getAdaptor();
adaptors.add(adaptor);
}
head = head.next();
if (head != null) {
sql.append(", ");
_value_places.append(", ");
}
}
sql.append(")");
_value_places.append(")");
sql.append(_value_places);
if (log.isDebugEnabled())
log.debug(sql);
dao.run(new ConnCallback() {
public void invoke(Connection conn) throws Exception {
PreparedStatement ps = conn.prepareStatement(sql.toString());
try {
for (int i = 0; i < values.size(); i++) adaptors.get(i).set(ps, values.get(i), i + 1);
ps.execute();
} finally {
Daos.safeClose(ps);
}
}
});
}
use of org.nutz.dao.Chain in project nutz by nutzam.
the class ChainTest method test_chain_to_object.
/**
* Issue 93
*/
@Test
public void test_chain_to_object() {
Chain c = Chain.from(Lang.map("{name:'zzh',age:30}"));
Worker w = c.toObject(Worker.class);
assertEquals("zzh", w.name);
assertEquals(30, w.age);
}
use of org.nutz.dao.Chain in project nutz by nutzam.
the class ChainTest method test_chain_from_map.
/**
* Issue 93
*/
@Test
public void test_chain_from_map() {
Map<?, ?> map = Lang.map("{a:12,b:true,c:'haha'}");
Chain c = Chain.from(map);
Map<String, Object> map2 = c.toMap();
assertTrue(Lang.equals(map, map2));
}
Aggregations