使用JdbcQuery便利的执行存储过程和SQL语句的查询

使用JdbcQuery方便的执行存储过程和SQL语句的查询

    最近开发中使用hibernate,发现对于SQL语句和存储过程上面,还是不是很方便,于是自己封装了一个,

下面是存储过程的调用:

String strSql = "{call callcenter_pack.Get_TaskCaseCount(:P_UserID,:P_ErrorInfo,:P_OutData)}";
JdbcQuery query = JdbcUtils.createNativeQuery(super.getConnection(), strSql);

query.setParameter("P_UserID", 5);
query.setOutParameter("P_ErrorInfo", OracleTypes.VARCHAR);      
query.setOutParameter("P_OutData", OracleTypes.CURSOR);
query.excuteProcedure();

 获取存储过程中的输出参数的结果,包括游标和字符串类型:

String strError = query.getString("P_ErrorInfo");
List<TaskBarCounter> dataList = query.getResultList("P_OutData",TaskBarCounter.class);
query.closeCallableStatement();

当然执行修改,新增等也是可以的,这里主要讲查询的使用。

 

 

SQL语句的调用:

public Result findCollect(final QueryMap qMap) {

    final StringBuilder sb = new StringBuilder();
    StringBuilder sbWhere = new StringBuilder();

    // select fields
    sb.append("select c.store_id, s.name,SUM(c.total_recharge) as total_recharge,");
    sb.append("SUM(c.total_payment) as total_payment,");
    sb.append("SUM(c.total_reversal) as total_reversal ");

    // select where
    sbWhere.append(" from collect c inner join store s on c.store_id = s.id ");
    sbWhere.append(" where c.created >= :start ");
    sbWhere.append(" and c.created <= :end "); 
    sbWhere.append(" and s.parent_id = :parentId ");
    sbWhere.append(" and s.name like :storeName");
    sbWhere.append(" GROUP BY c.store_id,s.name ");

    // select count
    final String countSQL = "select count(c.id)" + sbWhere.toString();

    // page
    sb.append(sbWhere).append("limit :pageStart,:pageSize");

    // QueryMap is a strong Map, it support easy to type convert, 
    // For example: String to Integer、String to Date ect.
    qMap.convertsInt("pageIndex", "pageSize");

    // count to get pageStart parameter for sql: limit :pageStart,:pageSize
    qMap.setProperty("pageStart", qMap.getPageIndex()*qMap.getPageSize());

    // set parentId parameter for sql: and s.parent_id = :parentId
    qMap.setProperty("parentId", 5); 

    // getLikeValue can get a format string, For example: test => '%test%'
    qMap.setProperty("storeName", qMap.getLikeValue("storeName")); 

    final Result result = new Result();
    super.getCurrentSession().doWork(new Work() {  
        public void execute(Connection connection) { 
            // get hibernate's datasource connection
            // set methond's params: connection, sql, params
            JdbcQuery query = JdbcUtils.createNativeQuery(connection, countSQL, qMap);
            // get count
            int count = query.getCount();

            // set methond's params: connection, sql, params
            JdbcQuery querys = JdbcUtils.createNativeQuery(connection, sb.toString(), qMap);
            // get result list<? extends HashMap>
            List<?> list = querys.getResultList();

            // set the count and list to result.
            result.setTotal(count);
            result.setData(list);

            Log.i("result", result);
        }
    });

    return result;
} 

使用比较简单,源码托管在github上:https://github.com/wangwei123/JdbcQuery