基于ActiveAndroid框架的BaseModel

来源:互联网 发布:java开发是做什么的 编辑:程序博客网 时间:2024/05/29 21:18

简介

基于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便可以很方便的使用了。