Android中数据库操作框架greenDAO介绍与使用
16lz
2021-01-23
greenDAO是一个轻量化且快速的ORM框架,专门为Android高度优化和定制的,它能够支持每秒数千记录的CRUD操作。我们从官网上面一张Benchmark图可以看出它与ormlite和ActiveAndroid的性能对比,
添加依赖:
// In your root build.gradle file: buildscript { repositories { jcenter() mavenCentral() // add repository } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin } } // In your app projects build.gradle file: apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' // apply plugin dependencies { compile 'org.greenrobot:greendao:3.2.2' // add library }
实体类生成
@Entitypublic class User { @Id(autoincrement = true) private Long userId; @Property(nameInDb = "userName") private String userName; @Property(nameInDb = "age") private int age; @Property(nameInDb = "addr") private String addr; @Generated(hash = 2044495610) public User(Long userId, String userName, int age, String addr) { this.userId = userId; this.userName = userName; this.age = age; this.addr = addr; } @Generated(hash = 586692638) public User() { } public Long getUserId() { return this.userId; } public void setUserId(Long userId) { this.userId = userId; } public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public String getAddr() { return this.addr; } public void setAddr(String addr) { this.addr = addr; } @Override public String toString() { return "User{" + "userId=" + userId + ", userName='" + userName + '\'' + ", age=" + age + ", addr='" + addr + '\'' + '}'; }}
@Entity 表明这个实体类会在数据库中生成一个与之相对应的表。
@Id 对应数据表中的 Id 字段,有了解数据库的话,是一条数据的唯一标识。且数据类型必须为Long类型
@Property(nameInDb = “STUDENTNUM”) 表名这个属性对应数据表中的 STUDENTNUM 字段。
@Property 可以自定义字段名,注意外键不能使用该属性
@NotNull 该属性值不能为空
@Transient 该属性不会被存入数据库中
@Unique 表名该属性在数据库中只能有唯一值
当你写完实体类中的属性之后,点击编译,就会自动生成相应的 setter 和 getter 方法,至于那些 hash 值是自动赋值上去的。并且在该目录下生成 DaoMaster 和 DaoSession 这两个类用于初始化数据库。
增删改查
一般数据库的操作都离不开增删改查,那么我们就从这开始。
初始化
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "user", null); DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb()); daoSession = daoMaster.newSession();
如果实体类有更新,那么要调用 daoSession.clear() 清除缓存,才能得到更新。
增
public void add(User user){ UserDao userDao = daoSession.getUserDao(); userDao.insert(user); }
删
public void delete(User user){ UserDao userDao = daoSession.getUserDao(); userDao.delete(user);//通过实体删除 //userDao.deleteByKey(user.getUserId());//通过主键删除 }
改:
public void update(User user){ UserDao userDao = daoSession.getUserDao(); userDao.update(user); }
查:
public List query(User user){ UserDao userDao = daoSession.getUserDao(); List users=userDao.queryBuilder() .offset(1) .limit(3) .orderAsc(UserDao.Properties.UserName) .where(UserDao.Properties.UserName.eq(user.getUserName())) .build() .list(); return users; } public List queryAll(){ UserDao userDao = daoSession.getUserDao(); List users = userDao.queryBuilder().list(); return users; }
参考
代码
更多相关文章
- listview 属性 小结
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android 使用反射机制获取或设置系统属性(SystemProperties)
- androidのsms,mms短彩信数据库
- ImageView的android:scaleType各属性含义(zz)
- android APK 带数据库
- Android布局中的android:onClick=“...”属性
- android gridview几个重要属性