Search in sources :

Example 16 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class SqlTemplate method queryForObject.

/**
     * 执行一个SQL查询操作,结果为给定实体的对象。
     * 
     * @param sql
     *            包含变量占位符的SQL
     * @param vars
     *            变量map,无参数时,可为null
     * @param params
     *            参数map,无参数时,可为null
     * @param entity
     *            实体类型
     * 
     * @return 对象,无查询结果时返回null
     */
public <T> T queryForObject(String sql, Map<String, Object> vars, Map<String, Object> params, Entity<T> entity) {
    Sql sqlObj = createSqlObj(sql, params);
    sqlObj.setCallback(Sqls.callback.entity());
    sqlObj.setEntity(entity);
    execute(sqlObj, vars, params);
    return sqlObj.getObject(entity.getType());
}
Also used : Sql(org.nutz.dao.sql.Sql)

Example 17 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class SqlTemplate method update.

/**
     * 执行一个SQL更新操作(如插入,更新或删除语句)。
     * 
     * @param sql
     *            包含变量占位符的SQL
     * @param vars
     *            变量map,无参数时,可为null
     * @param params
     *            参数map,无参数时,可为null
     * 
     * @return SQL 语句所影响的行数
     */
public int update(String sql, Map<String, Object> vars, Map<String, Object> params) {
    Sql sqlObj = createSqlObj(sql, params);
    execute(sqlObj, vars, params);
    return sqlObj.getUpdateCount();
}
Also used : Sql(org.nutz.dao.sql.Sql)

Example 18 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class SqlTemplate method batchUpdate.

/**
     * 执行SQL批量更新操作(如插入,更新或删除语句)。
     * 
     * @param sql
     *            包含变量占位符的SQL
     * @param vars
     *            变量map,无参数时,可为null
     * @param batchValues
     *            批量更新参数集合
     * 
     * @return SQL 语句所影响的行数
     */
public int batchUpdate(String sql, Map<String, Object> vars, List<Map<String, Object>> batchValues) {
    Sql sqlObj = null;
    if (batchValues != null && batchValues.size() > 0) {
        sqlObj = createSqlObj(sql, batchValues.get(0));
        for (Map<String, Object> params : batchValues) {
            Map<String, Object> newParams = paramProcess(params);
            sqlObj.params().putAll(newParams);
            sqlObj.addBatch();
        }
        dao.execute(sqlObj);
    } else {
        sqlObj = createSqlObj(sql, null);
        execute(sqlObj, vars, null);
    }
    return sqlObj.getUpdateCount();
}
Also used : Sql(org.nutz.dao.sql.Sql)

Example 19 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class SqlTemplate method queryForList.

/**
     * 执行一个SQL查询操作,结果为一组对象。
     * 
     * @param sql
     *            包含变量占位符的SQL
     * @param vars
     *            变量map,无参数时,可为null
     * @param params
     *            参数map,无参数时,可为null
     * @param classOfT
     *            对象类型
     * 
     * @return 对象列表,无查询结果时返回长度为0的List对象
     */
public <T> List<T> queryForList(String sql, Map<String, Object> vars, Map<String, Object> params, final Class<T> classOfT) {
    Sql sqlObj = createSqlObj(sql, params);
    sqlObj.setCallback(new SqlCallback() {

        public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
            List<T> list = new ArrayList<T>();
            while (rs.next()) {
                T result = Castors.me().castTo(rs.getObject(1), classOfT);
                list.add(result);
            }
            return list;
        }
    });
    execute(sqlObj, vars, params);
    return sqlObj.getList(classOfT);
}
Also used : SqlCallback(org.nutz.dao.sql.SqlCallback) SQLException(java.sql.SQLException) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) ArrayList(java.util.ArrayList) List(java.util.List) Sql(org.nutz.dao.sql.Sql)

Example 20 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class DaoUpTest method test_custom_sql.

/**
     * 自定义SQL, 进阶, 自定义回调
     */
@Test
public void test_custom_sql() {
    Dao dao = DaoUp.me().dao();
    // 建表,准备数据
    dao.create(SystemUser.class, true);
    SystemUser user = new SystemUser();
    user.setName("wendal");
    dao.fastInsert(user);
    user = new SystemUser();
    user.setName("zozoh");
    dao.fastInsert(user);
    Sql sql = Sqls.create("select id from $table $condition");
    // 设置之后, setCondition里面的条件就可以用java属性名了
    sql.setEntity(dao.getEntity(SystemUser.class));
    sql.setCondition(Cnd.where("name", "=", "zozoh"));
    // 只是为了演示变量设置, 你可以直接在sql里写好表名
    sql.vars().set("table", dao.getEntity(SystemUser.class).getTableName());
    sql.getContext().attr("hi-我是自定义上下文变量", "哈哈哈哈");
    sql.setCallback(new // 同样的功能可以用内置的Sqls.callback.integer();
    SqlCallback() {

        public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
            assertEquals(sql.getContext().attr("hi-我是自定义上下文变量"), "哈哈哈哈");
            if (rs.next())
                return rs.getInt(1);
            return -1;
        // 这里的conn和rs不需要用户代码关闭哦.
        // 你可以通过sql.
        }
    });
    dao.execute(sql);
    // 还有sql.getXXXX等等方法等着你哦
    assertEquals(2, sql.getInt());
}
Also used : Dao(org.nutz.dao.Dao) SQLException(java.sql.SQLException) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) SystemUser(org.nutz.dao.util.meta.SystemUser) Sql(org.nutz.dao.sql.Sql) Test(org.junit.Test)

Aggregations

Sql (org.nutz.dao.sql.Sql)69 Test (org.junit.Test)33 MappingField (org.nutz.dao.entity.MappingField)14 ArrayList (java.util.ArrayList)12 NutSql (org.nutz.dao.impl.sql.NutSql)9 Pet (org.nutz.dao.test.meta.Pet)9 ResultSet (java.sql.ResultSet)8 SQLException (java.sql.SQLException)8 FileSqlManager (org.nutz.dao.impl.FileSqlManager)8 Connection (java.sql.Connection)7 SqlManager (org.nutz.dao.SqlManager)7 SqlCallback (org.nutz.dao.sql.SqlCallback)5 Record (org.nutz.dao.entity.Record)4 PojoSql (org.nutz.dao.test.meta.issue1074.PojoSql)4 Dao (org.nutz.dao.Dao)3 DaoException (org.nutz.dao.DaoException)3 PreparedStatement (java.sql.PreparedStatement)2 HashMap (java.util.HashMap)2 List (java.util.List)2 LinkField (org.nutz.dao.entity.LinkField)2