Android ORM框架介绍之greenDao封装(二)
16lz
2021-01-23
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 8.0 AutoFill自动填写框架实践
- Android 插件化框架replugin使用教程之本地加载replugin-host-gr
- Android常用开源框架分享
- Android 学习笔记--android――Activity跳转条件不匹配出现FC,规
- Android 弹框UI框架
- 学习笔记Android轮播图框架Banner
- 详细讲解Android的图片下载框架UniversialImageLoader之磁盘缓存
- Android快速开发框架_让前端更专注于前端