JFinal modelシンプルパッケージ、バージョン2
JFianlのModelに対して 部分的にさらに拡張して、QueryParaamsに一つの方法を追加します。今日は増えるものも多くないです。この数日はちょっとだるいですね。
次はそのまま話し始めましょう。
私たちは話します 二つ目の方法は、shqlという文字列は、hibernateの中にあるsql文と似ています。 条件パラメータは「?」ではなく、対映の名称で表示すると分かりやすいです。
例:
コードは以下の通りです
具体的なソースコードが必要です。
次はそのまま話し始めましょう。
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