基于ActiveAndroid框架的BaseModel

简介

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值