1 介绍
Ormlite,英文全称是Object Relational Mapping,意思是对象关系映射。在android上包含两部分ormlite-core是核心部分,纯java的; ormlite-android是针对android的适配。在android的底层是Android数据库Sqlite。
由于工作需要,专门分析Ormlite-Android,并进行跨平台的移植。源码地址: https://github.com/j256/ormlite-android
2 使用方法
在Android上使用ormlite可以理解分为三层:
应用层:主要两个类,一个定义实体Bean类(数据表结构),利用这个框架,把实体映射到我们的数据库中,数据中的字段就是我们定义实体的成员变量。一个封装Dao类,操作数据库。
Ormlite-core框架:实现类到数据的映射逻辑和操作。
底层数据库: 在Android中是SQLite。
3 使用到的知识点泛型
注解,Java进阶之注解
反射,Java进阶之反射
数据库语句拼接
单例模式
简单工厂模式
模板方法模式
4 使用分析
第一步. 集成
在android需要使用ormlite,需要下载ormlite-core和对应的ormlite-android包。官网下载包:http://ormlite.com/releases/
第二步.配置Bean类(Bean类定义网上有很多参考材料,就不详细列举了,列举关键的)
@DatabaseTable(tableName = "user")
public class User {
@DatabaseField(generatedId = true)
private int id;
...
}
@DatabaseTable(tableName = "user") 使用注解方法,标明这是数据库中的一张表,表名为user;
@DatabaseField(generatedId = true)使用注解方法,标明数据表的列,列名是id;
这两个注解的和反射的实现在ormlite-core中实现。
5 Ormlite框架图
Application: activity Bean class UserDao class -- 定义数据结构和操作
Ormlite-core layer: Abstract Dao and impldao -- 数据结构对象化和拼接SQL
Ormlite-android: android database adapater layer -- 适配android系统底层数据库 跨平台数据库移植主要也是这层
Database layer: Android SQLite数据库,执行最终数据库实现
调用关系实例,通过堆栈可以理解上述过程,以创建数据库为例:openDatabase:759, SQLiteDatabase (android.database.sqlite)
openDatabase:751, SQLiteDatabase (android.database.sqlite)
getDatabaseLocked:373, SQLiteOpenHelper (android.database.sqlite)
getWritableDatabase:316, SQLiteOpenHelper (android.database.sqlite)
getReadWriteConnection:68, AndroidConnectionSource (com.j256.ormlite.android)
create:327, BaseDaoImpl (com.j256.ormlite.dao)
insert:40, UserDao (abc.example.ormlitedemo)
initData:37, MainActivity (abc.example.ormlitedemo)
onCreate:25, MainActivity (abc.example.ormlitedemo)
6 Ormlite跨平台移植思路
通过上面的架构和堆栈信息我们可以知道,跨平台设计的关键在于跨平台的适配层。对应的就是Ormlite-android。ormlite-android 核心代码
通过对Ormlite的主要功能理解,最终得移植核心代码在于上述文件的移植适配。其中
AndroidCompiledStatement.java -- SQL语句的生成
AndroidConnectionSource.java
AndroidDatabaseConnection.java -- 这两个文件是建立和保存数据库连接的cache
AndroidDatabaseResults.java -- 数据库结果处理
DatabaseTableConfigUtil.java --使用配置文件生成数据表
通过前面的思路,大家对跨平台的移植估计是有思路了。就是针对ormlite-android的几个核心文件的移植。对我个人而言,我的移植思路就是根据数据库的基本功能进行逐步移植。
数据库支持的基本功能:数据库的初始化创建/表创建
数据库操作: 增删查改(CRUD)
上述功能,按照底层数据库支持的接口,逐一移植实现即可完成跨平台的移植。
参考:https://blog.csdn.net/chenliguan/article/details/78305377