public static <T extends Model> List<T> where(final Class<T> cls, final String query, final String... params) {

		final String tableName = Reflection.getSimpleClassName(cls);
		final List<T> result = new ArrayList<T>();

		final StringBuffer sql = new StringBuffer();
		sql.append("SELECT * FROM ");
		sql.append(tableName);
		if (query != null) {
			sql.append(" WHERE ");
			sql.append(query);
		}

		synchronized (Lock) {
			final DBOpenHelper helper = Beans.getBean(DBOpenHelper.class);
			SQLiteDatabase database = helper.getReadableDatabase();
			final Cursor cursor = database.rawQuery(sql.toString(), params);
			while (cursor.moveToNext()) {
				T model = Reflection.instantiate(cls);
				model.transform(cursor);
				result.add(model);
			}
			cursor.close();
			database.close();
		}

		return result;
	}