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.

  1. 在应用的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
原创粉丝点击