package com.ben.data;
import java.lang.reflect.ParameterizedType;
import java.util.List;
public abstract class DbDao<T> implements GenericDao<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
public DbDao(){
clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@Override
public void save(T entity) {
DatabaseUtils.getDatabase().save(entity);
}
@Override
public void update(T entity) {
DatabaseUtils.getDatabase().update(entity);
}
@Override
public void delete(T entity){
DatabaseUtils.getDatabase().delete(entity);
}
@Override
public T findById(Object id) {
return DatabaseUtils.getDatabase().findById(id, clazz);
}
@Override
public List<T> findAll() {
return DatabaseUtils.getDatabase().findAll(clazz);
}
public int count(){
return DatabaseUtils.getDatabase().countAll(clazz);
}
@Override
public List<T> findAll(int pageMax, int pageStart) {
return DatabaseUtils.getDatabase().findAll(clazz, pageMax,pageStart);
}
@Override
public List<T> findByKeys(String[] keys, Object[] values) {
return findByKeys(keys, values, 0, 0);
}
public int count(String[] keys, Object[] values){
StringBuilder where = new StringBuilder();
if(keys.length != values.length){
throw new RuntimeException("keys and values doesn't match.");
}
int len = keys.length;
for(int i = 0; i < len ; ++i){
if(i!=0){
where.append(" AND ");
}
where.append(keys[i]+"='"+values[i].toString()+"'");
}
return DatabaseUtils.getDatabase().countByWhere(clazz, where.toString());
}
@Override
public List<T> findByKeys(String[] keys, Object[] values, int pageMax, int pageStart) {
StringBuilder where = new StringBuilder();
if(keys.length != values.length){
throw new RuntimeException("keys and values doesn't match.");
}
int len = keys.length;
for(int i = 0; i < len ; ++i){
if(i!=0){
where.append(" AND ");
}
where.append(keys[i]+"='"+values[i].toString()+"'");
}
return DatabaseUtils.getDatabase().findAllByWhere(clazz, where.toString(), pageMax, pageStart);
}
}