## Android GreenDao数据库框架
GreenDao简介

  • Android平台的对象关系映射工具(ORM)
  • 为关系型数据库提供面向对象的接口
  • 简化数据库操作

ORM框架

所谓ORM框架,即Object-Relational
Mapping,它的作用是在关系型数据库和对象之间做一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

GreenDao的优势

  • 性能(可能是Android上最快的ORM)
  • 易用性(强大的API,涵盖关系和链接)
  • 轻量(最小的内存消耗与100KB的库大小)

GreenDao的核心概念

  • 某实体类-------->某表
  • 某DAO----------->数据访问对象(某表的操作)
  • DaoMaster------>数据库连接对象
  • DaoSession----->由连接生成的会话

GreenDao的使用步骤

  • 创建实体类
  • 生成对应的DaoMaster、DaoSession、Dao
  • 通过Dao对象完成增删改查

数据库加密

compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
devOpenHelper.getEncryptedWritableDb("<your-secret-password>");

下面通过一个实例来讲解GreenDao的使用

项目介绍:点击进货,创建数据库,同时添加了数据条目,点击全部,显示全部的数据内容,点击水果,则筛选出所有水果的数据,点击零食,则筛选出所有零食的数据,点击任何一条数据,则进入修改页面,可对描述信息进行修改,点击确认修改,则跳转回主页面,显示修改之后的数据,点击任何一条数据,再次进入修改页面,点击删除,则删除该条数据,主页面该条数据则已被删除

项目实现

1.添加GreenDao的依赖

  • 添加GreeenDao的插件
  classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'

  • 添加library依赖
implementation 'org.greenrobot:greendao:3.3.0'


下面的这个是RecyclerView的依赖,在activity_main.xml页面有用到这个控件,所以在此处也添加一下这个依赖

implementation 'androidx.recyclerview:recyclerview:1.1.0'

RecyclerView控件的用法

  • 添加apply plugin应用插件
apply plugin: 'org.greenrobot.greendao'


2.创建实体类GoodModel


①让GoodModel实现序列化接口

public class GoodModel implements Parcelable

②添加 @Entity

@Entity为实体注解

③添加 @Id(autoincrement = true)

@Id-- 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。

④声明变量

    private Long id;private Integer goodsId;private String name;private String icon;private String info;private String type;

⑤编译项目
即点击菜单栏Build中的Make Project进行编译

编译结束后,项目自动生成一系列方法及生成对应的DaoMaster、DaoSession、Dao
GoodModel.java完整代码

import android.os.Parcel;
import android.os.Parcelable;import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;// implements Parcelable 实现序列化接口
@Entity
public class GoodModel implements Parcelable {@Id(autoincrement = true)private Long id;private Integer goodsId;private String name;private String icon;private String info;private String type;@Generated(hash = 2109828625)public GoodModel(Long id, Integer goodsId, String name, String icon,String info, String type) {this.id = id;this.goodsId = goodsId;this.name = name;this.icon = icon;this.info = info;this.type = type;}@Generated(hash = 1633159192)public GoodModel() {}protected GoodModel(Parcel in) {if (in.readByte() == 0) {id = null;} else {id = in.readLong();}if (in.readByte() == 0) {goodsId = null;} else {goodsId = in.readInt();}name = in.readString();icon = in.readString();info = in.readString();type = in.readString();}public static final Creator<GoodModel> CREATOR = new Creator<GoodModel>() {@Overridepublic GoodModel createFromParcel(Parcel in) {return new GoodModel(in);}@Overridepublic GoodModel[] newArray(int size) {return new GoodModel[size];}};public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public Integer getGoodsId() {return this.goodsId;}public void setGoodsId(Integer goodsId) {this.goodsId = goodsId;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getIcon() {return this.icon;}public void setIcon(String icon) {this.icon = icon;}public String getInfo() {return this.info;}public void setInfo(String info) {this.info = info;}public String getType() {return this.type;}public void setType(String type) {this.type = type;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {if (id == null) {dest.writeByte((byte) 0);} else {dest.writeByte((byte) 1);dest.writeLong(id);}if (goodsId == null) {dest.writeByte((byte) 0);} else {dest.writeByte((byte) 1);dest.writeInt(goodsId);}dest.writeString(name);dest.writeString(icon);dest.writeString(info);dest.writeString(type);}
}

DaoMaster、DaoSession、Dao自动生成在如下目录中

3.创建数据库连接类MyApplication
①MyApplication继承Application

public class MyApplication extends Application

②创建方法initDb 连接数据库并创建会话

 public void initDb(){//1-获取需要连接的数据库DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this,"xqq.db");SQLiteDatabase db = devOpenHelper.getWritableDatabase();//数据库加密//Database db = devOpenHelper.getEncryptedWritableDb("123456");//2-创建数据库连接DaoMaster daoMaster = new DaoMaster(db);//3-创建数据库会话daoSession = daoMaster.newSession();}

③MyApplication.java的完整代码

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;import org.greenrobot.greendao.database.Database;import rj19.bh.greendao0423.model.DaoMaster;
import rj19.bh.greendao0423.model.DaoSession;public class MyApplication extends Application {public static DaoSession daoSession;@Overridepublic void onCreate() {super.onCreate();initDb();}/*** 连接数据库,并创建会话*/public void initDb(){//1-获取需要连接的数据库DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this,"xqq.db");SQLiteDatabase db = devOpenHelper.getWritableDatabase();//数据库加密  实现此功能需把上一行注释,将下一行注释打开,并修改数据库的名字,例:此时数据库名为xqq.db,可更改为xx.db //Database db = devOpenHelper.getEncryptedWritableDb("123456");//2-创建数据库连接DaoMaster daoMaster = new DaoMaster(db);//3-创建数据库会话daoSession = daoMaster.newSession();}
}

4.添加图片资源及数据资源
这里可以自己随意添加一些图片,也可以下载我的图片资源

在main目录下创建资源文件夹assets,文件夹名一定要是这个!!!


创建好之后如下图所示,方为创建正确

在assets上新建goods.json


添加goods.json的代码

[{"goodsId": 2,"type": "0","icon": "huolongguo","name": "火龙果","info": "火龙果(学名:Hylocereus undatus 'Foo-Lon')是仙人掌科、量天尺属量天尺的栽培品种,攀援肉质灌木,具气根。"},{"goodsId": 1,"type": "0","icon": "chengzi","name": "橙子","info": "橙子(学名:Citrus sinensis 英语:orange),是芸香科柑橘属植物橙树的果实,亦称为黄果、柑子、金环、柳丁。橙子是一种柑果,有很高的食用,药用价值。"},{"goodsId": 7,"type": "0","icon": "yingtao","name": "樱桃","info": "樱桃(学名:Cerasus pseudocerasus),是某些李属类植物的统称,包括樱桃亚属、酸樱桃亚属、桂樱亚属等。"},{"goodsId": 0,"type": "0","icon": "caomei","name": "草莓","info": "草莓(学名:Fragaria × ananassa Duch.),多年生草本植物。高10-40厘米,茎低于叶或近相等,密被开展黄色柔毛。"},{"goodsId": 5,"type": "0","icon": "xiangjiao","name": "香蕉","info": "香蕉(学名:Musa nana Lour.)芭蕉科芭蕉属植物,又指其果实,热带地区广泛种植。"},{"goodsId": 3,"type": "0","icon": "pingguo","name": "苹果","info": "苹果(学名:Malus pumila)是水果的一种,是蔷薇科苹果亚科苹果属植物,其树为落叶乔木。"},{"goodsId": 4,"type": "0","icon": "shiliu","name": "石榴","info": "石榴(拉丁名:Punica granatum L.)落叶乔木或灌木;单叶,通常对生或簇生,无托叶。"},{"goodsId": 12,"type": "1","icon": "qiaokeli","name": "巧克力","info": "巧克力(chocolate),原产中南美洲,其鼻祖是“xocolatl”,意为“苦水”。其主要原料可可豆产于赤道南北纬18度以内的狭长地带。"},{"goodsId": 6,"type": "0","icon": "xigua","name": "西瓜","info": "西瓜(学名:Citrullus lanatus (Thunb.) Matsum. et Nakai)一年生蔓生藤本;茎、枝粗壮,具明显的棱。"},{"goodsId": 13,"type": "1","icon": "tiantianquan","name": "甜甜圈","info": "甜甜圈,又称多拿滋、唐纳滋,它是一种用面粉、白砂糖、奶油和鸡蛋混合之后再经过油炸的甜食。"},{"goodsId": 8,"type": "1","icon": "baomihua","name": "爆米花","info": "爆米花(Popcorn)是用玉米、酥油、糖一起放进爆米花的机器里做成的一种膨化食品,味道比较甜。"},{"goodsId": 10,"type": "1","icon": "jianguo","name": "坚果","info": "坚果,是闭果的一个分类,果皮坚硬,内含1粒或者多粒种子。"},{"goodsId": 9,"type": "1","icon": "binggan","name": "饼干","info": "饼干 [1]  的词源是“烤过两次的面包”,是从法语的bis(再来一次)和cuit(烤)中由来的。"},{"goodsId": 11,"type": "1","icon": "mianhuatang","name": "棉花糖","info": "这是一种柔软粘糯,有胶体性和微和弹性,含水分10%~20%,含还原糖20%~30%的软性糖果。"}
]

5.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="@dimen/padding_size"android:orientation="horizontal"android:weightSum="4"><TextViewandroid:text="进货"android:layout_marginRight="@dimen/margin_size"style="@style/top_item"android:onClick="onAddGoodsClick"/><TextViewandroid:text="全部"android:layout_marginRight="@dimen/margin_size"style="@style/top_item"android:onClick="onQueryAllClick"/><TextViewandroid:text="水果"android:layout_marginRight="@dimen/margin_size"style="@style/top_item"android:onClick="onQueryFruitsClick"/><TextViewandroid:text="零食"style="@style/top_item"android:onClick="onQuerySnacksClick"/></LinearLayout><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

6.goods_item.xml一条数据的布局页面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="@dimen/padding_size"android:background="@android:color/white"><ImageViewandroid:id="@+id/iv_icon"android:layout_width="80dp"android:layout_height="80dp"android:src="@mipmap/ic_launcher"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="@dimen/margin_size"android:orientation="vertical"android:padding="@dimen/padding_size"><TextViewandroid:id="@+id/tv_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="#333333"android:text="产品名称"/><TextViewandroid:id="@+id/tv_info"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="3dp"android:textSize="12sp"android:textColor="#666666"android:text="产品简介"android:maxLines="2"android:ellipsize="end"/></LinearLayout>
</LinearLayout>

7.activity_goods_detail.xml修改和删除页面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".GoodsDetailActivity"><EditTextandroid:id="@+id/et_info"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@null"android:padding="@dimen/padding_size"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="确认修改"android:layout_margin="@dimen/margin_size"android:textColor="@android:color/white"android:background="@color/colorPrimary"android:onClick="onEditClick"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="删除商品"android:layout_margin="@dimen/margin_size"android:textColor="@android:color/white"android:background="@android:color/holo_red_dark"android:onClick="onDelClick"/>
</LinearLayout>

8.添加GoodsAdapter适配器类

import android.content.Context;
import android.content.Intent;import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;import rj19.bh.greendao0423.model.GoodModel;public class GoodsAdapter extends RecyclerView.Adapter<GoodsAdapter.VH> {private List<GoodModel> dataSource;public void setDataSource(List<GoodModel> dataSource) {this.dataSource = dataSource;notifyDataSetChanged();}private Context mContext;public GoodsAdapter(Context context) {this.mContext = context;}@NonNull@Overridepublic VH onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {VH vh = new VH(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.goods_item,viewGroup, false));return vh;}@Overridepublic void onBindViewHolder(@NonNull VH vh, int i) {final GoodModel model = dataSource.get(i);vh.mIvIcon.setImageResource(mContext.getResources().getIdentifier(model.getIcon(), "mipmap", mContext.getPackageName()));vh.mTvName.setText(model.getName());vh.mTvInfo.setText(model.getInfo());vh.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(mContext, GoodsDetailActivity.class);intent.putExtra("goodsModel", model);mContext.startActivity(intent);}});}@Overridepublic int getItemCount() {if (dataSource == null) return 0;return dataSource.size();}public static class VH extends RecyclerView.ViewHolder {public ImageView mIvIcon;public TextView mTvName,mTvInfo;public VH(@NonNull View itemView) {super(itemView);//页面的三个标签mIvIcon = itemView.findViewById(R.id.iv_icon);mTvName = itemView.findViewById(R.id.tv_name);mTvInfo = itemView.findViewById(R.id.tv_info);}}
}

9.创建DataUtils实体类获取数据并读取

import android.content.Context;
import android.content.res.AssetManager;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;import rj19.bh.greendao0423.model.GoodModel;public class DataUtils {/*** 获取数据* @param fileName* @param context* @return*/public static String getJson(String fileName, Context context) {//将json数据变成字符串StringBuilder stringBuilder = new StringBuilder();try {//获取assets资源管理器AssetManager assetManager = context.getAssets();//通过管理器打开文件并读取BufferedReader bf = new BufferedReader(new InputStreamReader(assetManager.open(fileName)));String line;while ((line = bf.readLine()) != null) {stringBuilder.append(line);}} catch (IOException e) {e.printStackTrace();}return stringBuilder.toString();}public static List<GoodModel> getGoodsModels (String json){List<GoodModel> result = new ArrayList<>();try {JSONArray jsonArray = new JSONArray(json);//遍历数组for (int i = 0 ; i < jsonArray.length() ; i ++) {JSONObject object = jsonArray.getJSONObject(i);GoodModel goodsModel = new GoodModel();goodsModel.setGoodsId(object.getInt("goodsId"));goodsModel.setIcon(object.getString("icon"));goodsModel.setInfo(object.getString("info"));goodsModel.setName(object.getString("name"));goodsModel.setType(object.getString("type"));result.add(goodsModel);}} catch (JSONException e) {e.printStackTrace();}return result;}
}

10.创建实体类GreenDaoManger
①声明变量

    private Context mContext;private GoodModelDao mGoodModelDao;

②添加方法GreenDaoManger

public GreenDaoManger (Context context){mContext = context;mGoodModelDao = MyApplication.daoSession.getGoodModelDao();}

③创建添加数据的方法insertGoods

public void insertGoods(){String json = DataUtils.getJson("goods.json",mContext);List<GoodModel> goodModels = DataUtils.getGoodsModels(json);mGoodModelDao.insertInTx(goodModels);}

④创建查询所有数据的方法queryGoods

public List<GoodModel> queryGoods(){QueryBuilder<GoodModel> query = mGoodModelDao.queryBuilder().orderAsc(GoodModelDao.Properties.GoodsId);return query.list();}

⑤创建筛选水果的方法queryFruits

public List<GoodModel> queryFruits(){QueryBuilder<GoodModel> query = mGoodModelDao.queryBuilder();query =query.where(GoodModelDao.Properties.Type.eq("0")).orderAsc(GoodModelDao.Properties.GoodsId);return query.list();}

⑥创建筛选零食的方法querySnacks

public List<GoodModel> querySnacks(){QueryBuilder<GoodModel> query = mGoodModelDao.queryBuilder();query =query.where(GoodModelDao.Properties.Type.eq("1")).orderAsc(GoodModelDao.Properties.GoodsId);return query.list();}

⑦创建删除数据的方法deleteGoodsInfo

    public void deleteGoodsInfo(GoodModel goodModel){mGoodModelDao.delete(goodModel);}

⑧创建修改数据的方法updateGoods

public void updateGoods(GoodModel goodModel){mGoodModelDao.update(goodModel);}

GreenDaoManger完整代码

import android.content.Context;import org.greenrobot.greendao.query.QueryBuilder;import java.util.List;import rj19.bh.greendao0423.model.GoodModel;
import rj19.bh.greendao0423.model.GoodModelDao;import static rj19.bh.greendao0423.DataUtils.getGoodsModels;public class GreenDaoManger {private Context mContext;private GoodModelDao mGoodModelDao;public GreenDaoManger (Context context){mContext = context;mGoodModelDao = MyApplication.daoSession.getGoodModelDao();}/*** 添加所有的数据到数据库*/public void insertGoods(){String json = DataUtils.getJson("goods.json",mContext);List<GoodModel> goodModels = DataUtils.getGoodsModels(json);mGoodModelDao.insertInTx(goodModels);}/*** 查询所有数据* @return*/public List<GoodModel> queryGoods(){QueryBuilder<GoodModel> query = mGoodModelDao.queryBuilder().orderAsc(GoodModelDao.Properties.GoodsId);return query.list();}/*** 筛选水果* @return*/public List<GoodModel> queryFruits(){QueryBuilder<GoodModel> query = mGoodModelDao.queryBuilder();query =query.where(GoodModelDao.Properties.Type.eq("0")).orderAsc(GoodModelDao.Properties.GoodsId);return query.list();}/*** 筛选零食* @return*/public List<GoodModel> querySnacks(){QueryBuilder<GoodModel> query = mGoodModelDao.queryBuilder();query =query.where(GoodModelDao.Properties.Type.eq("1")).orderAsc(GoodModelDao.Properties.GoodsId);return query.list();}/*** 删除指定的数据* @param goodModel*/public void deleteGoodsInfo(GoodModel goodModel){mGoodModelDao.delete(goodModel);}/*** 修改数据* @param goodModel*/public void updateGoods(GoodModel goodModel){mGoodModelDao.update(goodModel);}
}

11.MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;
import android.view.View;import org.greenrobot.greendao.query.QueryBuilder;import java.util.List;import rj19.bh.greendao0423.model.GoodModel;public class MainActivity extends AppCompatActivity {private GoodsAdapter mAdapter;private RecyclerView mRv;private GreenDaoManger mDbManger;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}@Overrideprotected void onResume() {super.onResume();List<GoodModel> dataSource = mDbManger.queryGoods();notifyAdapter(dataSource);}private void init() {mDbManger = new GreenDaoManger(this);initView();}private void initView() {mRv = findViewById(R.id.rv);mAdapter = new GoodsAdapter(this);mRv.setLayoutManager(new LinearLayoutManager(this));mRv.setAdapter(mAdapter);}/*** 进货* @param view*/public void onAddGoodsClick(View view) {mDbManger.insertGoods();}/*** 展示全部* @param view*/public void onQueryAllClick(View view) {List<GoodModel> dataSource = mDbManger.queryGoods();notifyAdapter(dataSource);}/*** 水果* @param view*/public void onQueryFruitsClick(View view) {List<GoodModel> dataSource = mDbManger.queryFruits();notifyAdapter(dataSource);}/*** 零食* @param view*/public void onQuerySnacksClick(View view) {List<GoodModel> dataSource = mDbManger.querySnacks();notifyAdapter(dataSource);}private void notifyAdapter(List<GoodModel> dataSource){mAdapter.setDataSource(dataSource);}
}

12.GoodsDetailActivity.java 修改删除数据

import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.widget.EditText;import rj19.bh.greendao0423.model.GoodModel;public class GoodsDetailActivity extends AppCompatActivity {private EditText mInfo;private  GoodModel mGoodModel;private GreenDaoManger mDbManger;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_goods_detail);mGoodModel = getIntent().getParcelableExtra("goodsModel");mInfo = findViewById(R.id.et_info);mInfo.setText(mGoodModel.getInfo());mDbManger = new GreenDaoManger(this);}/*** 修改按钮的监听事件* @param view*/public void onEditClick(View view) {String info = mInfo.getText().toString();mGoodModel.setInfo(info);mDbManger.updateGoods(mGoodModel);onBackPressed();}/*** 删除商品按钮的监听事件* @param view*/public void onDelClick(View view) {String info = mInfo.getText().toString();mGoodModel.setInfo(info);mDbManger.deleteGoodsInfo(mGoodModel);onBackPressed();}
}

Android GreenDao数据库框架相关推荐

  1. Android整合网上资源以及个人对GreenDao数据库框架的理解与使用(android-studio开发)

    优点:完美试用android,个人比较看好的一点是极其方便的contentprovider,不用自己操很多代码,两三句就能搞定.根据对象进行增删改查,迷糊数据库语句的可以一试. AS开发导入Green ...

  2. android 开源 数据库,Android开源数据库框架-LitePal的使用

    简介 LitePal是一款开源的Android数据库框架,采用了关系映射的模式.LitePal在github上的项目地址:github.com/LitePalFram- 配置LitePal depen ...

  3. Android ORM 框架:GreenDao 数据库升级

    本文作者:Speedy CSDN 专栏:blog.csdn.net/speedystone 掘金专栏:juejin.im/user/57e082- 前言 在 Android ORM 框架:GreenD ...

  4. 安卓进阶系列-07数据库框架(GreenDAO)的使用

    GreenDAO的使用 简介 安卓提供了一个占用内存极小的数据库SQLite,也提供了不少操作数据库的API,然而不是所有程序员都擅长编写SQL语句,这时一个ORM的数据库框架就显得很好用了. 在之前 ...

  5. android xutil 数据库,Android XUtils3框架的基本使用方法(二)

    上一篇Android中XUtils3框架使用方法详解(一)文章,主要介绍了XUtil3的注解模块,网络模块,图片加载模块,今天给大家带来数据库模块的讲解,现在主流的ORM框架很多,比如OrmLite, ...

  6. Android数据库框架总结

    本文转自:http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封 ...

  7. 使用反射+注解封装一个基于Sqlite极简的android数据库框架

    数据库 背景 GreenDao 封装 创建数据库 对象映射表 数据库操作 扩展 总结 背景 目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多 ...

  8. 如何在 Android 中使用 ObjectBox 数据库框架?

    导读 不论是对象映射还是数据集合,Android开发者有太多数据库框架可以选择.ObjectBox数据库这个号称移动端最快的数据库框架,具有超快速.面向对象的API.单元测试即时.线程简单.数据库可自 ...

  9. 数据库框架:GreenDao 实现原理

    数据库框架:GreenDao 实现原理 Android数据库greenDAO框架用法和源码分析 https://blog.csdn.net/duanyy1990/article/details/509 ...

最新文章

  1. 号称下一代监控系统,来看看它有多强!
  2. 市值破400亿美元! 2021最火爆的「元宇宙」让互联网走到尽头?
  3. jdbcdslog hibernate sql log
  4. Python中最常用十大图像处理库详细介绍
  5. Python学习week7-文件路径操作
  6. 解题报告 树形图计数
  7. java那一年出来的_输入某年某月某日 判断其是那一年的第多少天
  8. H5源码口红机在线游戏无需公众号
  9. 二 关键词---关键词的选择(二)
  10. 2021-2025年中国乘用车稳定杆行业市场供需与战略研究报告
  11. App Store 上架流程
  12. MindMaster如何恢复未保存的内容
  13. c52传感器温度显示c语言编程,单片机中使用DS18B20温度传感器C语言程序
  14. dns解析失败的处理办法
  15. python批量打印_python 批量打印PDF
  16. 计算机总是无法完成更新失败,Win10系统更新失败无法完成更新正在撤销更改的解决方法...
  17. 【考生说】负重前行的道路上一直都需要一个自律的你
  18. 圣手键盘如何识别微软输入法的大小写状态?声音提示法
  19. 博通Broadcom SDK源码学习与开发2——Bootloader功能和编译过程
  20. [译]用C#创建一个屏幕保护程序

热门文章

  1. [POI2015]WIL-Wilcze doły
  2. winserver2008安装时出现 缺少所需的 CD/DVD驱动器设备驱动程序。如果您具有软盘....
  3. 职称计算机 合格标准,计算机职称考试报名方式及合格标准是什么
  4. 利用中央气象台的API获取天气
  5. 淘淘商城项目day01
  6. Python列表 元组
  7. 不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明
  8. 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人_PHP
  9. pytorch图片旋转
  10. 广西发现全球唯一融丹霞地貌与喀斯特地貌于一体的奇观,未来必火