private void checkTableExist(Class<?> clazz) { if (!tableIsExist(TableInfo.get(clazz))) { String sql = SqlBuilder.getCreatTableSQL(clazz); debugSql(sql); db.execSQL(sql); } }
/** * 根据条件查找,同时查找“多对一”的数据(只查找findClass中的类的数据) * * @param id * @param clazz * @param findClass 要查找的类 */ public <T> T findWithManyToOneById(Object id, Class<T> clazz, Class<?>... findClass) { checkTableExist(clazz); String sql = SqlBuilder.getSelectSQL(clazz, id); debugSql(sql); DbModel dbModel = findDbModelBySQL(sql); if (dbModel != null) { T entity = CursorUtils.dbModel2Entity(dbModel, clazz); return loadManyToOne(entity, clazz, findClass); } return null; }
/** * 批量插入时增加事务,不然就是卡得一逼啊... * * @param list */ public void saveList(List<? extends Object> list) { if (list == null || list.size() == 0) { return; } checkTableExist(list.get(0).getClass()); db.beginTransaction(); for (Object obj : list) { exeSqlInfo(SqlBuilder.buildInsertSql(obj)); } db.setTransactionSuccessful(); db.endTransaction(); }
/** * 保存数据到数据库<br> * <b>注意:</b><br> * 保存成功后,entity的主键将被赋值(或更新)为数据库的主键, 只针对自增长的id有效 * * @param entity 要保存的数据 * @return ture: 保存成功 false:保存失败 */ public boolean saveBindId(Object entity) { checkTableExist(entity.getClass()); List<KeyValue> entityKvList = SqlBuilder.getSaveKeyValueListByEntity(entity); if (entityKvList != null && entityKvList.size() > 0) { TableInfo tf = TableInfo.get(entity.getClass()); ContentValues cv = new ContentValues(); insertContentValues(entityKvList, cv); Long id = db.insert(tf.getTableName(), null, cv); if (id == -1) return false; tf.getId().setValue(entity, id); return true; } return false; }
/** * 根据主键查找数据(默认不查询多对一或者一对多的关联数据) * * @param id * @param clazz */ public <T> T findById(Object id, Class<T> clazz) { checkTableExist(clazz); SqlInfo sqlInfo = SqlBuilder.getSelectSqlAsSqlInfo(clazz, id); if (sqlInfo != null) { debugSql(sqlInfo.getSql()); Cursor cursor = db.rawQuery(sqlInfo.getSql(), sqlInfo.getBindArgsAsStringArray()); try { if (cursor.moveToNext()) { return CursorUtils.getEntity(cursor, clazz, this); } } catch (Exception e) { e.printStackTrace(); } finally { cursor.close(); } } return null; }
/** * 根据条件查找所有数据 * * @param clazz * @param strWhere 条件为空的时候查找所有数据 * @param orderBy 排序字段 */ public <T> List<T> findAllByWhere(Class<T> clazz, String strWhere, String orderBy) { checkTableExist(clazz); return findAllBySql( clazz, SqlBuilder.getSelectSQLByWhere(clazz, strWhere) + " ORDER BY " + orderBy); }
/** * 查找所有的数据 * * @param clazz */ public <T> List<T> findAll(Class<T> clazz) { checkTableExist(clazz); return findAllBySql(clazz, SqlBuilder.getSelectSQL(clazz)); }
/** * 根据条件删除数据 * * @param clazz * @param strWhere 条件为空的时候 将会删除所有的数据 */ public void deleteByWhere(Class<?> clazz, String strWhere) { checkTableExist(clazz); String sql = SqlBuilder.buildDeleteSql(clazz, strWhere); debugSql(sql); db.execSQL(sql); }
/** * 根据主键删除数据 * * @param clazz 要删除的实体类 * @param id 主键值 */ public void deleteById(Class<?> clazz, Object id) { checkTableExist(clazz); exeSqlInfo(SqlBuilder.buildDeleteSql(clazz, id)); }
/** * 删除数据 * * @param entity entity的主键不能为空 */ public void delete(Object entity) { checkTableExist(entity.getClass()); exeSqlInfo(SqlBuilder.buildDeleteSql(entity)); }
/** * 根据条件更新数据 * * @param entity * @param strWhere 条件为空的时候,将会更新所有的数据 */ public void update(Object entity, String strWhere) { checkTableExist(entity.getClass()); exeSqlInfo(SqlBuilder.getUpdateSqlAsSqlInfo(entity, strWhere)); }
/** * 更新数据 (主键ID必须不能为空) * * @param entity */ public void update(Object entity) { checkTableExist(entity.getClass()); exeSqlInfo(SqlBuilder.getUpdateSqlAsSqlInfo(entity)); }
/** * 保存数据库,速度要比save快 * * @param entity */ public void save(Object entity) { checkTableExist(entity.getClass()); exeSqlInfo(SqlBuilder.buildInsertSql(entity)); }