greenDAO是一个开源的Android ORM,使SQLite数据库的开发再次变得有趣。 它减轻了开发人员处理底层的数据库需求,同时节省开发时间。 SQLite是一个很不错的关系型数据库。 尽管如此,编写SQL和解析查询结果仍然是相当乏味和耗时的任务。 greenDAO通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)来解决这些问题。 这样,您可以使用简单的面向对象的API来存储,更新,删除和查询Java对象。
ORM实际上是,对象关系模型的程序方法,用于实现面向对象编程语言不通类型系统的数据之间的转换,也就是说,我们不需要要在java层关系关系数据库的具体实现,也不需要在关系数据库层,关心java对象的使用,从而提高编程的效率。
是一个数据访问接口。
数据访问:顾名思义就是与数据库打交道,夹在业务逻辑与数据库资源中间。
( 注意以下使用皆为个人案例 )
https://github.com/greenrobot/greenDAO/
1、配置
(1)在 Project 下的 build.grade下配置
buildscript {
repositories {
maven {
url 'https://maven.google.com'
}
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
(2)在 Moudle 下的 build.grade下配置
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
2、完成 Bean 类(user)
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
@NotNull
private String name;
private String age;
}
对Bean中的对象进行解释
- @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
- @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
- @Property:可以自定义字段名,注意外键不能使用该属性
- @NotNull:属性不能为空
- @Transient:使用该注释的属性不会被存入数据库的字段中
- @Unique:该属性值必须在数据库中是唯一值
- @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
在 Moudle 下的 Build.gradle 配置文件信息
greendao{
schemaVersion 1 // 数据库版本号
daoPackage 'com.example.jie.tengxuntui.gen'//自动生成的dao的包名,包名默认是entity所在的包;
targetGenDir 'src/main/java'//生成数据库文件的目录
}
3、生成配置文件
方法 : “Make Project” 或 按下 CRTL+f9
生成 DaoMaster , DaoSession , UserDao 文件
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
UserDao :Dao对象
4、Gao的 API
增加单个数据
getShopDao().insert(shop);
getShopDao().insertOrReplace(shop);
增加多个数据
getShopDao().insertInTx(shopList);
getShopDao().insertOrReplaceInTx(shopList);
查询全部
List< Shop> list = getShopDao().loadAll();
List< Shop> list = getShopDao().queryBuilder().list();
查询附加单个条件
.where()
.whereOr()
查询附加多个条件
.where(, , ,)
.whereOr(, , ,)
查询附加排序
.orderDesc()
.orderAsc()
查询限制当页个数
.limit()
查询总个数
.count()
修改单个数据
getShopDao().update(shop);
修改多个数据
getShopDao().updateInTx(shopList);
删除单个数据
getTABUserDao().delete(user);
删除多个数据
getUserDao().deleteInTx(userList);
删除数据ByKey
getTABUserDao().deleteByKey();
5、开始操作数据库
以下demo展示
(个人封装的工具类)
package com.example.jie.tengxuntui.utils;
import android.content.Context;
import com.example.jie.tengxuntui.Enity.User;
import com.example.jie.tengxuntui.gen.DaoMaster;
import com.example.jie.tengxuntui.gen.DaoSession;
import com.example.jie.tengxuntui.gen.UserDao;
import java.util.List;
/**
* Created by jie on 2018/8/21.
*/
public class DBManager {
private Context mContext;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private UserDao userDao;
private DBManager(Context context) {
mContext = context;
}
private static volatile DBManager instance = null;
public static DBManager getInstance(Context context){
if (instance==null){
synchronized (DBManager.class){
if (instance==null){
instance = new DBManager(context);
}
}
}
return instance;
}
public void init() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "user.db");
mDaoMaster = new DaoMaster(helper.getWritableDb());
mDaoSession = mDaoMaster.newSession();
userDao = mDaoSession.getUserDao();
}
public void insertTopicMo(User user) {
userDao.insertOrReplace(user);
}
public void insertTopicMo(List user) {
userDao.insertOrReplaceInTx(user);
}
//单个删除
public void deleteTopicMo(User user) {
userDao.delete(user);
}
//删除所有
public void deleteTopicMo() {
userDao.deleteAll();
}
//更新
public void updateTopicMo(User user) {
userDao.update(user);
}
//查询所有
public List queryAllTopicMo() {
return userDao.queryBuilder().build().list();
}
//where查询
public List query(String name) {
return userDao.queryBuilder().where(UserDao.Properties.Name.eq(name)).list();
}
//between
public List queryarrang(int a,int b) {
return userDao.queryBuilder().where(UserDao.Properties.Id.between(a,b)).list();
}
}
public void onClick(View v) {
switch (v.getId()){
case R.id.insert:
User user = new User("杰","21");
User use1r = new User("杰","22");
ArrayList users1 = new ArrayList<>();
users1.add(user);
users1.add(use1r);
// instance.insertTopicMo(user);
instance.insertTopicMo(users1);
lists.addAll(users1);
adapter.notifyDataSetChanged();
break;
case R.id.revise:
User user1 = new User(Long.valueOf(2),"喜","20");
instance.updateTopicMo(user1);
lists.clear();
List users = instance.queryAllTopicMo();
for (User user2 : users) {
lists.add(user2);
}
adapter.notifyDataSetChanged();
break;
case R.id.delete:
// User user3 = new User(Long.valueOf(2),"喜","20");
// instance.deleteTopicMo(user3);
// lists.remove(user3);
instance.deleteTopicMo();
lists.clear();
adapter.notifyDataSetChanged();
break;
case R.id.query:
lists.clear();
// List yao = instance.query("喜");
List yao = instance.queryarrang(1,5);
for (User user2 : yao) {
lists.add(user2);
}
adapter.notifyDataSetChanged();
break;
default:
break;
}
}
6、GreenDao的表关系操作
一对一 ,一对多 ,多对多
推荐文章 https://blog.csdn.net/RobotHost/article/details/70098744#21-%E6%B3%A8%E8%A7%A3
Thanks