android数据库框架主流开源的有:OrmLite、greenDAO 、Realm、DBFlow、LitePal,优缺点自行百度。
没有最好,只有最合适,我这选择社区活跃、star高的greenDAO,个人比较喜欢使用最新版来搞
2020年4月5日20:18:05最新版版GreenDao 3.2.2,可以算是最新的了吧?
,
部分参考官网文档https://greenrobot.org/greendao/
官方git:https://github.com/greenrobot/greenDAO
开发环境工具
jdk8 + android studio 3.6(新) + GreenDao 3.2.2
一、集成插件
集成greendao-gradle-plugin
插件用于自动生成dao映射等等
在build.gradle中:classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
buildscript {
repositories {
// 添加阿里云 maven 地址
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
// 添加以下插件
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
}
}
配置依赖
在app/build.gradle中:
//顶部添加
apply plugin: 'org.greenrobot.greendao' // apply plugin
//加入依赖
//sql
implementation 'org.greenrobot:greendao:3.2.2' // add library
//最下面加入配置
greendao{
schemaVersion 1
// 注意配置你的dao生成包
daoPackage 'com.lingkang.flychat.mapper.gen'
targetGenDir 'src/main/java'
}
//schemaVersion: 数据库schema版本,也可以理解为数据库版本号
//daoPackage:设置DaoMaster、DaoSession、Dao包名
//targetGenDir:设置DaoMaster、DaoSession、Dao目录
//targetGenDirTest:设置生成单元测试目录
//generateTests:设置自动生成单元测试用例
此处注意下dao生成的包路径即可,我的是com.lingkang.flychat.mapper.gen
二、创建entity
@Entity
public class User {
@Id
private Long id;
private int memberSex;//性别
private String memberLastX;//X币
@Property(nameInDb = "sex")
private String memberNickname;//昵称
private String memberIcon;//头像地址链接
private String memberMobile;//手机号
private int memberId;//用户ID
@Transient
private String memberDetailAddr;//用户的详细地址
private String memberLastExperience;//用户经验值
private String memberLevelName;//用户等级昵称
private long memberBirthday;//用户生日
private String memberProvince;//用户所在地
}
@Id-- 主键 Long型,可以通过@Id(autoincrement = true)设置自增长。通过这个注解标记的字段必须是Long,数据库中表示它就是主键,并且默认是自增的。
@Property-- 设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb="name")
@Index-- 使用@Index作为一个属性来创建一个索引;定义多列索引(@link Entity#indexes())
@Transient-- 添加次标记之后不会生成数据库表的列
更多注解说明,自行查找资料。
构建dao
使用快捷键Ctrl + F9 或者Build → Make Project
![](https://img.haomeiwen.com/i16864693/d918dc8eb1767e06.png)
即可生成了dao,如下
![](https://img.haomeiwen.com/i16864693/9e36ca76877983c0.png)
三、初始化
在application入口:
import android.app.Application;
import com.lingkang.flychat.mapper.gen.DaoMaster;
import com.lingkang.flychat.mapper.gen.DaoSession;
import org.greenrobot.greendao.database.Database;
public class FlyChatApplication extends Application {
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
initSQLite();
}
private void initSQLite() {
// regular SQLite database 其中 fcdb为数据库名称
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "fcdb");
Database db = helper.getWritableDb();
// 如果想要加密就使用以下:encryption-key是你想要的key
//Database db = helper.getEncryptedWritableDb("encryption-key");
daoSession = new DaoMaster(db).newSession();
}
//用于全局数据库会话操作
public DaoSession getDaoSession() {
return daoSession;
}
}
注意下用于全局数据库会话操作和Application名字:getDaoSession()
、FlyChatApplication
后面用到
四、调用
准备了这么多,开始调用:
1、首先获取数据库会话
2、使用会话进行操作
// 获取对象,从全局里拿
DaoSession daoSession = ((FlyChatApplication) getApplication()).getDaoSession();
UserDao userDao=daoSession.getUserDao();
//增
User user=new User();
user.setId(1L);
user.setMemberSex(1);
user.setMemberNickname("凌康");
user.setMemberMobile("15977707555");
userDao.insert(user);
//查 ---使用toString需要在entity中@Override toString
List<User> users=userDao.loadAll();
LogUtils.e(users.get(0).toString());
//改,全量覆盖
User user=new User();
user.setId(1L);
user.setMemberNickname("66666666");
userDao.update(user);
//删
userDao.deleteByKey(1L);
效果如下:
![](https://img.haomeiwen.com/i16864693/12b3685da801bef0.png)
![](https://img.haomeiwen.com/i16864693/196c04a56f064196.png)
更多操作可参考官方文档
网友评论