缓存设计常常得要有数据存储当作支撑,好多开发者在面对具体的代码实现之际,依旧期望能够获取可以直接拿来参考的范例,在此将会给出一份指向开源实现的解析以及使用指引。
配置初始化
工作的初始化一般是在应用的入口站点进行达成,比如说在安卓的自定义Application类别的onCreate方法之内。你得去调用像Orm.init(this, DbConfig().dbName(“demo”).version(1).addTable(User::class.java))这般的代码,以此执行初始化操作。其中,数据库版本号起始于1,每逢结构有变更之际便递增,addTable方法用以注册所有需映射至数据库表的实体类 。
每一个有着要持久化需求的实体类,都必然得去实现特定的那种标记接口,就像ITable这样的,这当中的这一步,可是搭建起对象和关系型数据库之间映射关系的根基所在,在这之后呢,你能够借助注解去详尽地界定表结构,涵盖表名、字段名、约束等等方面,这般而来这些注解会引导框架自动达成建表的操作。
表和列注解详解
@Table注解,被标注在实体类的类名上方,其作用是用于指定,该类映射到数据库里的表名,就像@Table(“user_info”)这样。要是省略了它,默认情况下会使用类名作为表名。而@Column注解,是标注在类的成员属性之上,目的在于指定,该属性所对应的数据库字段名称,比如@Column(“user_name”)。
对@Ignore注解而言,其优先级是高于@Column的,被它所标注的那些字段,不会被映射到数据库表之中,它适用于临时属性 。@NotNull注解表明的是该字段不允许为空 。@Id注解指定相关字段为主键 。而@PrimaryKey注解呢,它是结合了主键与特定列名(‘_id’)的功能的,这相当于@Id + @Column(“_id”) 。
字段约束与默认值
“@Unique”注解所表达的意思是,该字段的值历经全过程是在整个表当中具备唯一性约束的,是不可以出现重复情况的。“@Default”注解能够为字段去指定一个默认值,在插入数据的时候倘若没有提供该字段值,那么数据库就会自动地填入这个默认值。
这般诸多注解协同发挥作用,致使开发者得以运用声明式的形式界定出稳固的表结构。就像,一张用户表兴许涵盖唯一且并非没有值的用户名主键、并非没有值的手机号、以及具备默认值的注册时间字段。正确运用这些注解能够切实确保数据的完整性与一致性。
基本的CRUD操作
使用类似像Orm.insert(User().apply { name = “Tom” })这样的语句来操作插入行为,它不只是能够插入单独的一个对象,而且还进一步支持直接去插入一个对象所构成的列表(List)。查询操作一般情况下是借助Orm.selector(User::class.java)来开启链式调用模式,比如说添加where条件这一行为、指定排序方式以及进行分页操作。
执行更新这一操作之时,得率先去构建更新所需要的条件,就好比是Orm.update(User::class.java).where(“id”, “=”, 1).update(“name”, “Jerry”) 。而删除操作与之相类似,是Orm.delete(User::class.java).where(“id”, “=”, 1).delete() 。这些相关的方法对SQL的细节进行了封装,从而使得操作变得更为直观 。
高级查询与事务
可运用专门的WhereBuilder类去构建针对复杂查询条件的内容,借助其and、or方法环绕组合条件,该框架同样支持聚合函数,就像Orm.selector(User::class.java)通过where(whereBuilder这样的方式).count()能够统计契合条件的记录数量 。
事务处理借助Orm.transaction { it -> … }代码段来达成,处在该块中将要执行的多个数据库操作会被视作一个原子单元,要么全都成功实现,要么全都执行回滚操作,这对于确保诸如转账、订单创建这类业务逻辑的数据一致性来讲是极为关键的。
复杂数据与表结构升级
当存储像List或自定义对象这类复杂类型之际,能够运用@Converter注解并搭配自定义的类型转换器。此转换器承担着把对象序列化成字符串(比方说JSON)而后存入数据库的任务,并且在读取时会自动实现反序列化,致使对于上层而言是透明状态。
在实体类出现增减字段的状况下,仅仅需要把初始化配置里的数据库版本号予以加1,如此框架会自动去尝试升级表结构。你能够于实体类之中重写onUpgrade方法,并且返回true或者false去决定升级的时候是不是清空旧表数据,以此来应对不一样的业务迁移需求。
当你于集成第三方ORM框架之际,最为常常遭遇的痛苦要点或者所亲身踩过的那种“坑”到底是什么呢,欢迎于评论区域分享你的相关经验,要是感觉这篇文章存在着帮助作用,同样记得点赞予以支持哦 。

