Search in sources :

Example 6 with Chain

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];
}
Also used : Chain(org.nutz.dao.Chain) ConnCallback(org.nutz.dao.ConnCallback) ValueAdaptor(org.nutz.dao.jdbc.ValueAdaptor) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) DaoException(org.nutz.dao.DaoException) MappingField(org.nutz.dao.entity.MappingField) DaoException(org.nutz.dao.DaoException) SQLException(java.sql.SQLException)

Example 7 with Chain

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);
            }
        }
    });
}
Also used : Chain(org.nutz.dao.Chain) ConnCallback(org.nutz.dao.ConnCallback) ValueAdaptor(org.nutz.dao.jdbc.ValueAdaptor) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) DaoException(org.nutz.dao.DaoException) MappingField(org.nutz.dao.entity.MappingField) DaoException(org.nutz.dao.DaoException) SQLException(java.sql.SQLException)

Example 8 with Chain

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);
}
Also used : Chain(org.nutz.dao.Chain) Test(org.junit.Test)

Example 9 with Chain

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));
}
Also used : Chain(org.nutz.dao.Chain) Test(org.junit.Test)

Aggregations

Chain (org.nutz.dao.Chain)9 Test (org.junit.Test)3 MappingField (org.nutz.dao.entity.MappingField)3 Connection (java.sql.Connection)2 PreparedStatement (java.sql.PreparedStatement)2 SQLException (java.sql.SQLException)2 ArrayList (java.util.ArrayList)2 ConnCallback (org.nutz.dao.ConnCallback)2 DaoException (org.nutz.dao.DaoException)2 ValueAdaptor (org.nutz.dao.jdbc.ValueAdaptor)2 InsertByChainPItem (org.nutz.dao.impl.sql.pojo.InsertByChainPItem)1 Pojo (org.nutz.dao.sql.Pojo)1