Android ORM框架介绍之greenDao封装(二)

数据库操作增删改查操作重复太高,所以需要进行抽取,通过DataBaseManager统一管理。

package www.weshared.greendao;import android.content.Context;import android.database.Cursor;import android.support.annotation.NonNull;import com.zhang.db.dao.DaoMaster;import com.zhang.db.dao.DaoSession;import com.zhang.db.entity.BaseModel;import com.zhang.db.entity.Model;import org.greenrobot.greendao.AbstractDao;import org.greenrobot.greendao.query.WhereCondition;import java.util.List;public class DataBaseManager {    protected static final String DB_NAME = "my.db";    protected final DaoSession session;    protected final AbstractDao dao;    private static final String DB_NAME = "my.db";    private DaoSession session;    private AbstractDao dao;    private DaoMaster.DevOpenHelper helper;    private DaoMaster master;    private static volatile DataBaseManager manager;    private DataBaseManager(Context context) {        if (helper == null) {            helper = new DaoMaster.DevOpenHelper(context, DB_NAME);        }    }    public static DataBaseManager getInstance(Context context) {        if (manager == null) {            synchronized (DataBaseManager.class) {                if (manager == null) {                    manager = new DataBaseManager(context);                }            }        }        return manager;    }    //未加密    public DataBaseManager create(T t) {        if (helper != null) {            master = new DaoMaster(helper.getWritableDb());        }        session = master.newSession();        dao = createDao(session, t.getClass());        return manager;    }    //加密  [需要依赖 compile 'net.zetetic:android-database-sqlcipher:3.5.3']    public DataBaseManager create(String pwd,T t) {        if (helper != null) {            master = new DaoMaster(helper.getEncryptedWritableDb(pwd));        }        session = master.newSession();        dao = createDao(session, t.getClass());        return manager;    }    //如果Model类太多,使用工厂模式    public AbstractDao createDao(@NonNull DaoSession session, Class<?> clazz) {        if (BaseModel.class.equals(clazz)) {            return session.getBaseDao();        } else if (Model.class.equals(clazz)) {            return session.getModelDao();        }        return null;    }    public long insert(T t) {        return session.insert(t);    }    public long insertOrReplace(T t) {        return session.insertOrReplace(t);    }    @SuppressWarnings("unchecked")    public void insertAll(List list) {        dao.insertInTx(list);    }    @SuppressWarnings("unchecked")    public void insertOrReplaceAll(List list) {        dao.insertOrReplaceInTx(list);    }    public void update(T t) {        session.update(t);    }    @SuppressWarnings("unchecked")    public void updateAll(List list) {        dao.updateInTx(list);    }    public void delete(T t) {        session.delete(t);    }    @SuppressWarnings("unchecked")    public void deleteAll(List list) {        dao.deleteInTx(list);    }    public void deleteAll() {        dao.deleteAll();    }    @SuppressWarnings("unchecked")    public List queryAll() {        return dao.loadAll();    }    @SuppressWarnings("unchecked")    public T query(long id) {        return (T) dao.loadByRowId(id);    }    @SuppressWarnings("unchecked")    public T query(Object key) {        return (T) dao.load(key);    }    /**     * 简单的条件查询     */    @SuppressWarnings("unchecked")    public List query(String where, String... args) {        return dao.queryRaw(where, args);    }    /**     * 简单的条件查询     */    @SuppressWarnings("unchecked")    public List queryBuild1(WhereCondition condition, WhereCondition... conditions) {        return dao.queryBuilder().where(condition, conditions).build().list();    }    /**     * 查询个数     */    @SuppressWarnings("unchecked")    public long queryBuild2(WhereCondition condition, WhereCondition... conditions) {        return dao.queryBuilder().where(condition, conditions).buildCount().count();    }    /**     * 获取Cursor     */    @SuppressWarnings("unchecked")    public Cursor queryBuild3(WhereCondition condition, WhereCondition... conditions) {        return dao.queryBuilder().where(condition, conditions).buildCursor().query();    }}

工厂模式抽取[注:如果类太多,使用工厂方法模式]

public class DaoFactory {    public static AbstractDao createDao(@NonNull DaoSession session, Class<?> clazz) {        if (BaseModel.class.equals(clazz)) {            return session.getBaseDao();        } else if (Model.class.equals(clazz)) {            return session.getModelDao();        }        return null;    }}

在MainActivity中的使用

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button insert;    private Button delete;    private Button deleteall;    private Button update;    private Button query;    private Button queryall;    private Button querybuild;    private TextView tv_query;    private TextView tv_queryall;    private TextView tv_querybuild;    private DataBaseManager manager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();        initView();        initListener();    }    private void init() {        try {            manager = new DataBaseManager(MainActivity.this, Model.class.newInstance());        } catch (Exception e) {            e.printStackTrace();        }    }    private void initView() {        insert = (Button) findViewById(R.id.btn_insert);        delete = (Button) findViewById(R.id.btn_delete);        deleteall = (Button) findViewById(R.id.btn_deleteall);        update = (Button) findViewById(R.id.btn_update);        query = (Button) findViewById(R.id.btn_query);        queryall = (Button) findViewById(R.id.btn_queryall);        querybuild = (Button) findViewById(R.id.btn_querybuild);        tv_query = (TextView) findViewById(R.id.tv_query);        tv_queryall = (TextView) findViewById(R.id.tv_queryall);        tv_querybuild = (TextView) findViewById(R.id.tv_querybuild);    }    private void initListener() {        insert.setOnClickListener(this);        delete.setOnClickListener(this);        deleteall.setOnClickListener(this);        update.setOnClickListener(this);        query.setOnClickListener(this);        queryall.setOnClickListener(this);        querybuild.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.btn_insert:                Model model = new Model();                model.setName("zhangsan");                model.setAge(32);                model.setCreateTime(System.currentTimeMillis());                manager.insert(model);                break;            case R.id.btn_update:                Model model1 = new Model();                model1.setId((long) 1);                model1.setName("lisi");                model1.setAge(23);                model1.setCreateTime(System.currentTimeMillis());                manager.update(model1);                break;            case R.id.btn_delete:                Model model2 = new Model();                model2.setId((long) 2);                manager.delete(model2);                break;            case R.id.btn_deleteall:                manager.deleteAll();                break;            case R.id.btn_query:                Model m = manager.query(1);                if (m!=null){                    tv_query.setText("单条查询:"+m.toString());                }else {                    tv_query.setText("单条查询:没有查询到结果");                }                break;            case R.id.btn_queryall:                List li = manager.queryAll();                tv_queryall.setText("查询全部:"+li.toString());                break;            case R.id.btn_querybuild:                List list = manager.queryBuild1(ModelDao.Properties.Name.like("zhangsan"));//注意条件查询                tv_querybuild.setText("条件查询:"+list.toString());                break;        }    }}

Android ORM框架介绍之greenDao封装(二)_第1张图片

水平有限,封装的不是很好

更多相关文章

  1. 写了个小框架,大家帮忙提提意见
  2. Android 8.0 AutoFill自动填写框架实践
  3. Android 插件化框架replugin使用教程之本地加载replugin-host-gr
  4. Android常用开源框架分享
  5. Android 学习笔记--android――Activity跳转条件不匹配出现FC,规
  6. Android 弹框UI框架
  7. 学习笔记Android轮播图框架Banner
  8. 详细讲解Android的图片下载框架UniversialImageLoader之磁盘缓存
  9. Android快速开发框架_让前端更专注于前端

随机推荐

  1. Android ActionBar的源代码分析(三)
  2. Android 2.3 Dev Guide (55)-- Android S
  3. Android 开发未来的出路何在? | 技术头条
  4. Android(安卓)四种加载方式详解(standard
  5. android是什么意思
  6. Android中MVC的具体体现
  7. Android 的表格控件GridView学习
  8. android之ContentProvider和Uri详解
  9. Android学习路线(二十八)保存文件
  10. Android设备之间通过Wifi通信的示例代码