Android:GreenDao的使用
来源:互联网 发布:苹果mac屏幕更换价格 编辑:程序博客网 时间:2024/06/05 03:13
说明:
GreenDao是一个数据表对象映射的框架,用于简化数据表的增删改查操作,将编写sql语句改为直接操作java对象,增删改查的过程操作的是对象,而不是sql语句。
一、添加依赖:
1.打开工程根目录,在build.gradle中添加classpath:
buildscript { ... dependencies { ... //greendao插件 classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' }}
...//应用greendao插件apply plugin: 'org.greenrobot.greendao'android { ... greendao { //设置数据库版本号 schemaVersion 1 //设置dao的包名,不设置默认为实体类的包名,build后会在此包下生成DaoMaster.java、DaoSession.java、实体类名Dao.java daoPackage 'com.yyh.im.dao' //设置数据库文件目录 targetGenDir 'src/main/java/' }}dependencies { ... //greendao依赖的jar包 compile 'org.greenrobot:greendao:+' compile 'org.greenrobot:greendao-generator:+'}
二、定义实体类(每一个实体类对应一张表,build后自动生成对应dao类):
1.注解说明:
(1)类注解说明:@Entity:表示此实体类为数据表(有一些属性放在@Entity()中,多个时以,分隔):nameInDb:指定表的名称,为空则用类名作表名使用:@Entity(nameInDb="表名")createInDb:默认为true,是否创建表使用:@Entity(createInDb = true)schema,默认为default,设置当前实体属于哪个schema使用:@Entity(schema = "schema值")active:默认为false,是否生成更新/删除/刷新方法,当实体类中有ToMany和ToOne的时,这个值无效,都会产生这3个方法使用:@Entity(active = true)(2)成员变量注解说明:@Id:表示此变量为表主键,autoincrement表示主键自增使用:@Id(autoincrement = true)private Long 变量名;@NotNull:表示此变量值不能为null使用:@NotNullprivate String 变量名;@Unique:表示此变量值唯一使用:@Uniqueprivate String 变量名;@Index:表示索引使用:@Index(unique = true)private long 变量名;@OrderBy:表示此变量列表结果进行排序使用:@OrderBy(value = "ASC")private String 变量名;一对一,A表需要保存B表的id值时,只在A类中加入@ToOne:public class A { ... private long bId; //此id值用于链接B表的id值,命名随意 @ToOne(joinProperty = "bId") //bId为上面定义的值 private B b; //保存着B对象}类B:public class B { ...}一对多,A表需要保存B表的id值时,在A类中加入@ToOne,并在B类加入ToMany:public class A { ... private long bId; //此id值用于链接B表的id值,命名随意 @ToOne(joinProperty = "bId") //bId为上面定义的值 private B b; //保存着B对象}类B:public class B { ... @ToMany(referencedJoinProperty = "bId") //引用A类中定义的bId private List<A> as; //保存着A对象列表}多对多,A表需要保存B表的id值时,在A类中加入@ToOne,并在B类加入ToMany:public class A { ... @ToMany @JoinEntity( entity = AAndB.class, sourceProperty = "aId", //aId为中间类中的aId targetProperty = "bId" //bId为中间类中的bId ) private List<B> b;}类B:public class B { ... @ToMany @JoinEntity( entity = AAndB.class, sourceProperty = "bId", //bId为中间类中的aId targetProperty = "aId" //aId为中间类中的bId ) private List<A> a;}中间类AAndB:public class B { ... private Long aId; //aId为A表的id private Long bId; //bId为B表的id}@Transient:忽略属性,不在表中创建此字段,使用:@Transientprivate String 变量名;@Property:设置列名,不设时以变量名作为列名使用:@Property(nameInDb = "列名")private String 变量名;@generated:build时自动产生的
2.定义实体类(展示各字段,以及示例一对一、一对多、多对多):
Adress.java类定义(与User一对一):
@Entity(nameInDb = "ADRESS")public class Adress { @NotNull @Unique @Id private Long id; private String name;}
Department.java定义(与User一对多):
@Entity(nameInDb = "DEPARTMENT")public class Department { @NotNull @Unique @Id private Long id; @NotNull private String name; /** * departmentId为用户对象中的字段,实现一对多(部门为一,用户为多) */ @ToMany(referencedJoinProperty = "departmentId") private List<User> users;}
Job.java类定义(与User多对多):
@Entity(nameInDb = "JOB")public class Job { @NotNull @Unique @Id private Long id; @NotNull @Property(nameInDb = "NAME") private String name; /** * Job和User多对多 */ @ToMany @JoinEntity( entity = UserAndJob.class, sourceProperty = "jobId", targetProperty = "userId" ) private List<User> users;}
@Entity(nameInDb = "USER")public class User { @NotNull @Unique @Id private Long id; @NotNull @Property(nameInDb = "NAME") private String name; private long adressId; /** * 一对一,用adressId关联Adress */ @ToOne(joinProperty = "adressId") private Adress adress; /** * 部门id */ private long departmentId; /** * User和Department多对一 */ @ToOne(joinProperty = "departmentId") private Department department; /** * User和Job多对多 */ @ToMany @JoinEntity( entity = UserAndJob.class, sourceProperty = "userId", targetProperty = "jobId" ) private List<Job> sheep; @Transient private int temp;}
关联User和Job的中间类UserAndJob.java:
@Entity(nameInDb = "USER_JOB")public class UserAndJob { @NotNull @Unique @Id(autoincrement = true) private Long id; private Long userId; private Long jobId;}
三、增加改查操作:
1.Dao管理类:
/** * Dao管理类 */public class DaoManager { private static final String DB_NAME = "db"; private static DaoManager instance; private DaoMaster.DevOpenHelper mDBOpenHelper; public static DaoManager getInstance(Context context) { if (instance == null) { synchronized (DaoManager.class) { if (instance == null) { instance = new DaoManager(context); } } } return instance; } private DaoManager(Context context) { //创建DatabaseOpenHelper实例 mDBOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null); } /** * 读数据时使用的DaoSession */ public DaoSession getReadableDatabase() { return new DaoMaster(mDBOpenHelper.getReadableDatabase()).newSession(); } /** * 写数据时使用的DaoSession */ public DaoSession getWritableDatabase() { return new DaoMaster(mDBOpenHelper.getWritableDatabase()).newSession(); } /** * 关闭SQLiteDatabase */ public void close() { if (mDBOpenHelper != null) { mDBOpenHelper.close(); mDBOpenHelper = null; } }}
/** * 用户业务类 */public class UserBiz { private DaoManager mDaoManager; private static UserBiz instance; private UserBiz(Context context) { mDaoManager = DaoManager.getInstance(context); } public static UserBiz getInstance(Context context) { if (instance == null) { instance = new UserBiz(context); } return instance; } /** * 批量更新/插入 * * @param users 用户列表 */ public void insertOrUpdate(List<User> users) { mDaoManager.getReadableDatabase().getUserDao().insertOrReplaceInTx(users); } /** * 更新/插入 * * @param user 用户信息 */ public void insertOrUpdate(User user) { mDaoManager.getReadableDatabase().getUserDao().insertOrReplaceInTx(user); } /** * 查询所有用户 * * @return 用户列表 */ public List<User> findAll() { return mDaoManager.getReadableDatabase().getUserDao().loadAll(); } /** * 根据id查询用户 * * @param id 用户id */ public User findById(String id) { UserDao dao = mDaoManager.getReadableDatabase().getUserDao(); return dao.queryBuilder().where(UserDao.Properties.Id.eq(id)).unique(); } /** * 根据用户名模糊查找用户 * * @param name 用户名 * @return */ public List<User> search(String name) { UserDao dao = mDaoManager.getReadableDatabase().getUserDao(); return dao.queryBuilder().where(UserDao.Properties.Name.like("%" + name + "%")).list(); } /** * 删除用户 * * @param id 用户id */ public void delete(long id) { UserDao dao = mDaoManager.getReadableDatabase().getUserDao(); dao.queryBuilder().where(UserDao.Properties.Id.eq(id)).buildDelete().executeDeleteWithoutDetachingEntities(); }}
阅读全文
0 0
- Android GreenDao的使用
- Android:GreenDao的使用
- Android-SQLite3_4-greenDAO的使用
- Android之greenDao的使用
- Android中GreenDao的使用
- Android--------GreenDao数据库的使用
- Android数据库 GreenDao的使用
- Android之greenDao,一个orm的使用
- Android 关于greenDao的使用教程
- Android greenDao 数据库的使用(一)
- Android greenDao 数据库的使用(二)
- Android greenDao 数据库的使用(三)
- android orm工具GreenDao的使用
- Android SQLite框架greenDAO的使用
- Android SQLite框架greenDAO的使用
- Android GreenDao 的使用详讲
- Android MVPBuilder第四篇[GreenDao的使用]
- Android数据库操作--greenDAO的入门使用
- 4、HTML5基本语法
- 算法分析与设计丨第十三周丨LeetCode(17)——Coin Change(Medium)
- Chrome请求出现Provisional headers are shown的几次经历
- psql 无法连接数据库,报错FATAL:53300
- node/https网络爬虫Promise优化、 nodejs构建https服务器
- Android:GreenDao的使用
- Qt输出打印信息的日志到文件(简单的两种方式)
- 表单和ajax中的post请求&&后台获取数据方法
- kaggle-House Price Prediction
- 一个函数实现树的非递归前、中、后序遍历
- 在Spring Boot中使用数据缓存
- 关于HTTP协议之get/post传输随笔
- csv批量导入mysql命令
- JS的几种排序方法