前言
我一般在Android开发中,几乎用不到SQLlite,因为一些小数据就直接使用Preferences保存了,最近涉及到了消息推送历史,或者涉及到信息历史方面的东西,所以就需要用到了android的SQLlite,为了不重复造轮子,果断上github寻找轮子。
GreenDAO虽然效率最高,但由于每次都要手动生成代码,比较麻烦,所以弃用。
Couchbase也有Android版本,同时支持配合Couchbase Server同步,但使用的是nosql的数据库,所以弃用,但是后期可以研究研究。
ActiveAndroid是一个Active record模式的框架,几乎可以不用写任何SQL代码实现快速开发,就是它了!
简介
ActiveAndroid是一个active record模式的ORM框架,意味着不用写任何sql代码就能实现保存和检索SQLite数据库。
Active Record 模式
Active Record 模式出自 Martin Fowler 的《企业应用架构模式》一书。在 Active Record 模式中,对象中既有持久存储的数据,也有针对数据的操作。Active Record 模式把数据存取逻辑作为对象的一部分,处理对象的用户知道如何把数据写入数据库,以及从数据库中读出数据。
对象关系映射
对象关系映射(ORM)是一种技术手段,把程序中的对象和关系型数据库中的数据表连接起来。使用 ORM,程序中对象的属性和对象之间的关系可以通过一种简单的方法从数据库获取,无需直接编写 SQL 语句,也不过度依赖特定的数据库种类。
下面开始使用
有两种方式导包:
1.第一种方式:
a:添加依赖在项目的build.gradle文件添加:
allprojects { repositories { google() jcenter() mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } }
b:在app的build.gradle文件添加依赖:
implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
2.第二种方式:直接引入jar包(项目中是用的这一种)
下载地址:http://files.cnblogs.com/files/leestar54/ActiveAndroid-jar.rar
下载完成,添加到libs即可
3.在AndroidManifest.xml文件中配置数据库名称和数据库版本号。(注意数据库版本号很重要的,可以后面用来升级数据库)
..
4.让你自己的Application对象继承自com.activeandroid.app.Application而不是android.app.Application。如果你需要继承其他库 的Application,则需要在Application中初始化和处理ActiveAndroid。
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); ActiveAndroid.initialize(this); //如果使用了自定义的Application,记得要初始化 } @Override public void onTerminate() { super.onTerminate(); ActiveAndroid.dispose(); }}
5、创建数据库模型
非常简单~以往要写一大堆SQL代码啊,只需创建一个类继承Model,使用注释标注相关字段(见https://github.com/pardom/ActiveAndroid/blob/master/src/com/activeandroid/annotation/Column.java)
没有ID?ActiveAndroid 已经帮我们自动创建了,见代码
@Table(name = "Items") //表名,没有则默认使用类名为表名public class MessageTable extends Model { // If name is omitted, then the field name is used. @Column(name = "Name", index = true)//如果需要设置这字段为索引,添加index=true即可。 public String name; //用户id @Column(name = "userId") public String userId; //消息的唯一标识 @Column(name = "msgId") public String msgId; //如果定义了自己的构造函数,记得还要定义一个无参构造函数。 public Item() { super(); } public MessageTable(String name, Category category) { super(); this.name = name; this.category = category; }}
6.优化,可写可不写
ActiveAndroid会去遍历所有的文件来寻找Model类,这样的效率非常低,所以最好在AndroidManifest中添加一个meta-data,告诉ActiveAndroid你的Model类。代码可写在上面的数据库版本号后面,下面是一下写入了多个Model类
在实际项目中这样肯定还是不够用,需要把消息表转化为消息实体类,也需要一个可以增删改查的工具类。