基于ActiveAndroid框架,自己封装的BaseModel类,其他的一些操作类只需要继承自BaseModel便可以拥有数据库操作的方法了,使用非常方便。
关于ActiveAndroid的使用方法,在我的另外一篇博客有讲:
http://blog.csdn.net/hbdatouerzi/article/details/53504809
BaseModel是抽象模板类,其中含有抽象方法getTag(),子类必须实现此抽象方法,另外子类需要传入继承自Model的Class。
//数据库操作基类
public abstract class BaseModel<T extends Model> {
private List<T> mCache;
private Class<T> cl;
public BaseModel(final Class<T> cl){
this.cl = cl;
mCache = new Select().from(cl).execute();
if(mCache == null){
mCache = new ArrayList<>();
}
}
//添加
public void add(final T instance){
for(T t : mCache){
if(t.equals(instance)){
Log.i(getTag(),"is aready added");
return;
}
}
mCache.add(instance);
ThreadFactory.getNormalPool().execute(new Runnable() {
@Override
public void run() {
instance.save();
Log.i(getTag(),"instance added success");
}
});
}
//保存
public void save(final T instance){
for(T t : mCache){
if(t.equals(instance)){
mCache.remove(t);
}
}
mCache.add(instance);
ThreadFactory.getNormalPool().execute(new Runnable() {
@Override
public void run() {
instance.save();
}
});
}
//删除
public void delete(T instance){
T tobeDel = null;
int size = mCache.size();
for(int i=0;i<size;i++){
if(mCache.get(i).equals(instance)){
tobeDel = mCache.get(i);
mCache.remove(i);
}
}
if(tobeDel != null){
final T finalTobeDel = tobeDel;
ThreadFactory.getNormalPool().execute(new Runnable() {
@Override
public void run() {
finalTobeDel.delete();
}
});
}
}
//查找
public List<T> find(Map<String,Object> condition){
if(condition == null || condition.isEmpty()){
return null;
}
//组合查询参数
StringBuilder builder = new StringBuilder();
Set<String> keys = condition.keySet();
Iterator<String> iterator = keys.iterator();
while(iterator.hasNext()){
String key = iterator.next();
builder.append(key);
builder.append(" = ");
builder.append("\"");
builder.append(condition.get(key));
builder.append("\"");
if(iterator.hasNext()){
builder.append(" and ");
}
}
List<T> result = new Select().from(cl).where(builder.toString()).execute();
return result;
}
public List<T> getAll(){
return mCache;
}
public abstract String getTag();
}
子类Model
以FriendModel为例来说明,FriendModel是操作FriendDB表的操作类,只需要继承BaseModel,然后传入FriendDB.class就可以拥有对FriendDB表进行增删改查的功能了。
如果想要另外的特殊功能,比如getManFriend()得到男生朋友,或者getWomenFriend()得到女生朋友,直接在Friend Model里面添加就可以了。
public class FriendModel extends BaseModel {
public FriendModel() {
super(FriendDB.class);
}
@Override
public String getTag() {
return "FriendModel";
}
}
之前见过别人基于hibernate对数据库进行封装,使用起来非常的方便,所以自己也想尝试一下,BaseModel把一些对表共有的操作封装起来放在父类,子类只需要继承自BaseModel便可以很方便的使用了。