JFinal modelシンプルパッケージ、バージョン2


JFianlのModelに対して 部分的にさらに拡張して、QueryParaamsに一つの方法を追加します。今日は増えるものも多くないです。この数日はちょっとだるいですね。
次はそのまま話し始めましょう。

public Long countSqlResult(String sqlExceptSelect, Object... params) {
    List result = Db.query("SELECT COUNT(*) " + DbKit.replaceFormatSqlOrderBy(sqlExceptSelect), params);
    int size = result.size();
    if (size == 1) {
        return ((Number) result.get(0)).longValue();
    }
    return Long.valueOf(0);
}
public Long countSqlResult(String shql, Map<String, Object> attrs) {
    List<Object> params = new ArrayList<Object>();
    String sqlExceptSelect = QueryParams.toFormatSQL(shql, attrs, params);
    return countSqlResult(sqlExceptSelect, params.toArray());
}
以上の二つの方法は主に記録集を調べるためのものです。最初の方法は紹介しなくてもいいですよね。
私たちは話します 二つ目の方法は、shqlという文字列は、hibernateの中にあるsql文と似ています。 条件パラメータは「?」ではなく、対映の名称で表示すると分かりやすいです。
例:
shql="select * from zz z where z.name = :name"
 attrs.put("name", "  ")
 countSqlResult(shql,attrs);
この方法の中でこの方法に役立ちます。QueryParames.toFormatSQL()は、以前QueryParaamsでこの方法に言及したことがありますが、前のものは最初のパラメータだけです。それを広げてみましょう。
コードは以下の通りです
/**
 * 
 * @param hsql
 * @param attrs
 * @param values
 * @return
 */
public static  String toFormatSQL(String hsql, Map<String, Object> attrs, List<Object> values) {
    Matcher matcher = Pattern.compile(":(\\w+)").matcher(hsql);
    while ( matcher.find()){
        String rexp = null;
        String group = matcher.group(1);
        Object ov = attrs.get(group);
        if (ov instanceof List)
        {
            StringBuilder sb = new StringBuilder();
            List vs = (List) ov;
            for (Object v : vs)
            {
                sb.append("?,");
                values.add(v);
            }
            sb.deleteCharAt(sb.length() - 1);
            rexp = sb.toString();
        }else
        {
            values.add(ov);
            rexp = "?";
        }
        hsql = hsql.replace(String.format(":%s", group), rexp);
    }
    return hsql;
}
この二つの方法はもちろんです。パラメータは上と同じ意味です。

/**
*
*    :
*  queryOrNamedQuery="select * from zz z where z.name = :name"
* attrs.put("name", "  ")
* findFirstBySQLQuery(queryOrNamedQuery, attrs)
* @param queryOrNamedQuery
* @param attrs
* @return List
*/
public List<Map<String, Object>> findBySQLQuery(String queryOrNamedQuery, Map<String, Object> attrs) {
    List<Object> params = new ArrayList<Object>();
    String sql = QueryParams.toFormatSQL(queryOrNamedQuery, attrs, params);
    List<Record> records = Db.find(sql, params);
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    for (Record record : records) {
        list.add(record.getColumns());
    }
    return list;
}
/**
 *       
 *   :
 * queryOrNamedQuery="select * from zz z where z.name = :name"
 * attrs.put("name", "  ")
 * findFirstBySQLQuery(queryOrNamedQuery, attrs)
 *
 * @param queryOrNamedQuery
 * @param attrs
 * @return
 */
public Map<String, Object> findFirstBySQLQuery(String queryOrNamedQuery, Map<String, Object> attrs) {
    List<Object> params = new ArrayList<Object>();
    String sql = QueryParams.toFormatSQL(queryOrNamedQuery, attrs, params);
    List<Record> records = Db.find(sql, params);
    if (records.size() >= 1) {
        return records.get(0).getColumns();
    }
    return null;
}
次のいくつかは簡単です。一括操作
public boolean saveOrUpdate() {
        if (null == this.get(getPrimaryKey())) return save();
        return update();
    }
    public boolean saveAll(List<M> ms) {
        /**
         *        ?
         */
        for (M m : ms) {
            if (!m.saveOrUpdate()) {
//                throw new ActiveRecordException("    !");
                throw new ActiveRecordException("Save failed :" + m);
            }
        }
        return true;
   /*     int size = 0;
            if ((size = ms.size()) <= 0)
            {
               throw new ActiveRecordException("(List<M> is null ?");
            }
            Config config = this.getConfig();
            Table table = this.getTable();
            Connection conn = null;
            PreparedStatement pst = null;
            boolean result = false;
            StringBuilder sql = new StringBuilder();
            ArrayList paras = new ArrayList();
            config.getDialect().forModelSave(table, ms.get(0).getAttrs(), sql, paras);
            boolean e;
            try {
                conn = config.getConnection();
                if(config.getDialect().isOracle()) {
                    pst = conn.prepareStatement(sql.toString(), new String[]{table.getPrimaryKey()});
                } else {
                    pst = conn.prepareStatement(sql.toString(), 1);
                }
                config.getDialect().fillStatement(pst, paras);
                if (size >= 2 ){
                    for (int i = 1; i < size; i++ )
                    {
                        config.getDialect().forModelSave(table, ms.get(i).getAttrs(), sql, paras);
                        pst.addBatch();
                    }
                }
                int result1 = pst.executeUpdate();
                this.getGeneratedKey(pst, table);
                clear();
                e = result1 >= 1;
            } catch (Exception var12) {
                throw new ActiveRecordException(var12);
            } finally {
                config.close(pst, conn);
            }
            return e;*/
    }
    public boolean deleteAll(List<M> ms) {
        for (M m : ms) {
            if (!m.delete()) throw new ActiveRecordException("Delete failed :" + m);
        }
        return true;
    }
    public boolean deleteAllById(List<PK> ids) {
        for (PK id : ids) {
            if (!deleteById(id)) throw new ActiveRecordException("Delete failed :" + id);
        }
        return true;
    }
    /**
     *  PK        .
     *
     * @param ids   ID  
     * @return List
     */
    public List<M> get(Collection<Object> ids) {
        if (ids.size() <= 0) {
            return Collections.emptyList();
        }
        QueryParams params = new QueryParams();
        params.addIn(getPrimaryKey(), ids);
        String sqlExceptSelect = params.toSqlExceptSelect(getTableName(), "m");
        return find(String.format("SELECT * %s", sqlExceptSelect), params.getParas().toArray());
    }
そろそろこのようにしましょう。今日はあまり書かれていません。
具体的なソースコードが必要です。 github、githbアドレス:https: //github.com/cnzzs/zjf