Android ORM框架介绍之greenDao注解及加密(三)
来源:互联网 发布:钢材进销存软件免费版 编辑:程序博客网 时间:2024/05/22 12:22
Android ORM框架介绍之greenDao注解及加密(三)
greenDao注解
greendao注解还是比较多的,具体如下图所示:
常用的greendao注解
package www.weshared.test3;import org.greenrobot.greendao.annotation.Entity;import org.greenrobot.greendao.annotation.Generated;import org.greenrobot.greendao.annotation.Id;import org.greenrobot.greendao.annotation.Index;import org.greenrobot.greendao.annotation.Keep;import org.greenrobot.greendao.annotation.NotNull;import org.greenrobot.greendao.annotation.Unique;@Entity(nameInDb = "tb_user")//nameInDb 设置表名,默认类名即为表名public class User { @Id(autoincrement = true) //设置id主键,自增(默认false) @Unique //该字段是唯一的 private long id; @NotNull //该字段不为null private String userName; @Index(unique = true) //这种写法也是表示唯一,与@Unique注解一样 private int age; ...getter/setter方法... /** * @Keep * 在下一次运行产生dao代码期间,被该注解标记的,保持不变 * 注意:不要使用在类的成员变量上(如果你不清楚它的用法),当model发生改变,不会同步到生成的dao文件中 */ @Keep public User(long id, String userName, int age) { this.id = id; this.userName = userName; this.age = age; } /** * @Generated * All the code elements that are marked with this annotation can be changed/removed during next run of generation in respect of model changes. * model发生改变,在下一次运行产生dao代码期间,被该注解标记的,可以改变或移除 */ @Generated(hash = 586692638) public User() { }}
@Entity:注解实体
public @interface Entity { String nameInDb() default "";//指定表名,默认是实体类的类名 Index[] indexes() default {};// 定义索引,可以跨越多个列(默认为实体类成员变量的个数) boolean createInDb() default true;//标记创建数据库表,若一个表映射多个实体类或者创建表外应的GreenDao,设置为false String schema() default "default";//告知GreenDao当前实体属于哪个schema boolean active() default false;//是否应该生成更新/删除/刷新方法。 boolean generateConstructors() default true;//是否生成构造}
@Convert:指定自定义类型(@link PropertyConverter)
public @interface Convert { /** 转换类*/ Class<? extends PropertyConverter> converter(); /** * 在数据库中持久化的列 * 此受限于GreenDao所支持的类 */ Class columnType(); }
@JoinEntity:定义表与表连接的关系
public @interface JoinEntity { Class<?> entity();//添加的实体类 String sourceProperty();//源表的列索引 String targetProperty();//连接表内拥有源实体的属性}
@JoinProperty:定义名称和引用名称属性关系
public @interface JoinProperty { String name();//实体中的名称,对应于引用的名称 String referencedName();//引用的名称 }
@OrderBy:指定排序
@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMary:定义与多个实体对象的关系
@Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名
@Transient:添加次标记之后不会生成数据库表的列
数据库关系注解实例
@ToOne:一对一关系
@Entitypublic class Student { @Id private long id; @NotNull private String name;}@Entityclass Classes { @Id private long class_id; @Unique private long student_id;//一个学生的id对应一个学生 @ToOne(joinProperty = "student_id")//一对一的关系 private Student student;}
@ToMany
- referencedJoinProperty:指定目标实体中与源实体相对应的外键。
public class People { @Id private long id; @ToMany(referencedJoinProperty = "car_id")// referencedJoinProperty:指定目标实体中与源实体相对应的外键。 private List<Car> cars;} class Car{ @Id private long id; private long car_id; }
- joinProperty: 对于复杂一点的关系可以定义一组@JoinProperty注解。每个@JoinProperty注解都需要有源实体中的源属性和对应实体中的引用属性。
@Entitypublic class User { @Id private Long id; @Unique private String authorTag; @ToMany(joinProperties = { @JoinProperty(name = "authorTag", referencedName = "ownerTag") }) private List<Site> ownedSites;}@Entitypublic class Site { @Id private Long id; @NotNull private String ownerTag;}
- @JoinEntity 在做NM多对多映射的时候使用
@Entitypublic class Site { @Id private Long id; @ToMany @JoinEntity( entity = JoinSiteToUser.class, sourceProperty = "siteId", targetProperty = "userId" ) private List<User> authors;}@Entitypublic class JoinSiteToUser { @Id private Long id; private Long siteId; private Long userId;}@Entitypublic class User { @Id private Long id;}
对数据库的多表关系有点乱,例子是摘抄别人的
参考文章:
GreenDAO 3.0初次使用
greenDao数据库加密
greendao支持数据库加密,以保护敏感数据。greenDao是直接支持SQLCipher的。SQLCipher是一个自定义使用256位的AES加密的SQLite.
- 在应用的build文件中,添加依赖库
compile 'org.greenrobot:greendao:3.1.1'compile 'net.zetetic:android-database-sqlcipher:3.5.1'
注意:最新版本的greendao库包含了加密的API,相比以前只需要依赖sqlcipher库就好
2.具体代码:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); User user = new User(); user.setId(1); user.setName("zhangsan"); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(MainActivity.this, "data.db"); DaoMaster master = new DaoMaster(helper.getEncryptedWritableDb(getString(R.string.app_name)));//加密 DaoSession session = master.newSession(); UserDao dao = session.getUserDao(); dao.insertOrReplace(user); Log.e("zhang", " 插入成功"); DaoMaster masterEntryption = new DaoMaster(helper.getEncryptedWritableDb(getString(R.string.app_name))); Log.e("zhang", " 加密查询结果:" + masterEntryption.newSession().getUserDao().loadAll().toString());//加密查询 DaoMaster masterNormal = new DaoMaster(helper.getWritableDb()); Log.e("zhang", " 未加密查询结果:" + masterNormal.newSession().getUserDao().loadAll().toString());//正常查询 // 打印的结果 // 插入成功 // 加密查询结果:[User{id=1, name='zhangsan'}] // 未加密查询结果:[] }}
0 0
- Android ORM框架介绍之greenDao注解及加密(三)
- Android ORM 框架之 greenDAO
- Android ORM 框架之 greenDAO
- Android ORM 框架之 greenDAO
- Android ORM 框架之 greenDAO
- Android ORM 框架之 greenDAO
- Android ORM框架之GreenDAO
- Android ORM框架之greenDAO
- Android ORM 框架之 greenDAO
- Android ORM框架介绍之greenDao配置(一)
- Android ORM框架介绍之greenDao封装(二)
- Android ORM数据库框架之-greenDao(三)
- Android greenDao 数据库ORM框架介绍
- Android中的ORM介绍及GreenDao使用
- Android ORM框架之GreenDao的使用方法
- Android ORM 框架之 greenDAO 使用心得
- Android ORM 框架之 greenDAO 使用
- Android ORM 框架之 greenDAO 使用心得
- 数字转中文大写
- Java常见小功能备忘录
- Android ImageView scaleType+adjustViewBounds两个属性详解 保证图片不变形
- machine-learning:数学:微积分
- 怎样理解Servlet的单实例多线程
- Android ORM框架介绍之greenDao注解及加密(三)
- mysql binlog 常用的命令
- poj 2046
- 100天土鸡饲养计划(34)
- 简单理解设计模式之单例模式
- 微信支付申请流程
- ButterKnife
- 【文本】数据格式——JSON
- Android常用动画总结