android开源ORM框架OrmLite使用教程

OrmLite是一个轻量级的对象关系映射包,由Java语言开发。Github上有ormlite-coreormlite-androidormlite-examples,分别是主要库,android依赖和一些教程。

一、准备

为了在android上使用OrmLite,我们需要下载ormlite-core.jar和ormlite-android.jar放到项目目录下,然后:

1、创建一个类继承OrmLiteSqliteOpenHelper,实现两个抽象方法onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) 和 onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion),查看源码可以知道OrmLiteSqliteOpenHelper是继承了android里自带的SqliteOpenHelper类,以上两个抽象方法也是扩展自SqliteOpenHelper里面的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

public class DBHelper extends OrmLiteSqliteOpenHelper{
  public DBHelper(Context context){
   //用于通过注解+反射创建数据库表
        super(context, DB_NAME, null, VERSION_100);
   //用于通过读取配置文件创建数据库表
   //super(context, DB_NAME, null, VERSION_101,R.raw.config);
    }

    @Override
    public void onCreate(SQLiteDatabase database,
            ConnectionSource connectionSource) {
        try {
            TableUtils.createTableIfNotExists(connectionSource, Account.class);
        } catch (SQLException e) {
            LogFactory.e(e);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase database,
            ConnectionSource connectionSource, int oldVersion, int newVersion) {
        if(oldVersion<VERSION_101){
            fixVersion101() ;
        }
        if(oldVersion<VERSION_200){
            fixVersion200() ;
        }
    }
}

需要说的是在onUpgrade中如果对数据库表有修改,则只能通过sql语句来进行,TableUtils在此时不能发挥作用。例:

void fixVersion200(){
        try {
            String sql = "ALTER TABLE ‘"+TAB_ACCOUNT+"‘ ADD COLUMN "+DATE_ID+" INTEGER ;" ;
            getDao(Account.class).executeRaw(sql) ;
        } catch (SQLException e) {
            LogFactory.e(e);
        }
    }

2、OrmLiteSqliteOpenHelper中保存着数据库的链接,因此没必要创建太多的OrmLiteSqliteOpenHelper实例,官方建议使用OpenHelperManager来对OrmLiteSqliteOpenHelper进行操作,通过OpenHelperManager.getHelper(Context context, Class<T> openHelperClass)则可以返回OrmLiteSqliteOpenHelper实例;或者通过setOpenHelperClass()然后再getHelper();再或者在res-string下面定义一个open_helper_classname,里面制定类名,OrmLite框架会通过反射将其实例化;

3、最简单的使用OpenHelperManager的方法是继承OrmLiteBaseActivity,另外也提供了OrmLiteBaseListActivity, OrmLiteBaseService, and OrmLiteBaseTabActivity,这些类里面会自动管理OrmLiteSqliteOpenHelper.通过getHelper()则可以获取;

4、如果不想使用官方提供的方法,那么可以在自己的Activity里面管理OrmLiteSqliteOpenHelper,一般是在onCreate()里面创建,在onDestroy()里面释放掉;OpenHelperManager.getHelper()和releaseHelper()必须成对出现,不然可能出现意想不到的情况;

二、数据库表配置

OrmLite提供了两种方法配置表,一是通过注解,如果通过注解,因为OrmLite的注解是运行时的(Runtime),在反射的时候Method.equals()会消耗很多资源导致初始化数据变的很慢。因此才有了第二种方法--通过注解生成的配置文件。

1、通过注解

@DatabaseTable(tableName = "accounts")
public class Account {

    @DatabaseField(id = true)
    private String name;
    @DatabaseField
    private String password;

    public Account() {
        // ORMLite needs a no-arg constructor
    }
    public Account(String name, String password) {
        this.name = name;
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

其中"@DatabaseTable"是配置数据表的,只有两个属性"tableName"(表名,默认为类名小写)和"daoClass"(Dao管理类)。

"@DatabaseField"是配置表中的column的,属性比较多,见官方文档

创建数据库表则在继承的OrmLiteSqliteOpenHelper的onCreate()中调用如下:

public void onCreate(SQLiteDatabase database,
            ConnectionSource connectionSource) {
        try {
            TableUtils.createTableIfNotExists(connectionSource, Account.class);
        } catch (SQLException e) {
            LogFactory.e(e);
        }
    }

2、通过注解加配置文件

注解部分如上。配置文件的生成需要Java工程中继承OrmLiteConfigUtil

public class DatabaseConfigUtil extends OrmLiteConfigUtil {
  public static void main(String[] args) throws Exception {
    writeConfigFile("ormlite_config.txt");
  }
}

然后将生产的ormlite_config.txt文件放到android工程的res-raw目录下,实例化OrmLiteSqliteOpenHelper时则需要传入raw资源id,

OrmLiteSqliteOpenHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion,int configFileId)

那么在创建数据表的时候OrmLite框架则会读取配置文件而不会通过注解。以上生成配置文件时可以把用到的model类放入到java工程中,然后在android工程里面依赖java工程,如此可以只保存一份modle类代码,修改时很方便。

三、数据库增删改查

对数据库表的增删改查则通过OrmLiteSqliteOpenHelper.getDao(Class<T> clazz)获取到不同的对象的Dao之后进行操作,具体见API文档。OrmLiteSqliteOpenHelper里面通过DaoManager对所有的Dao进行了缓存,不必在别处保存Dao了。

1、增

//保存数据
create(T data)
//当不存在时保存数据
createIfNotExists(T data)
//保存或者更新数据
createOrUpdate(T data)

2、删

//删除数据
delete(T data)
//根据ID删除数据
deleteById(ID id)
//自定义的删除请求,通过构建DeleteBuilder<T,ID>实现复杂的删除
deleteBuilder() 

3、改

//更新对象
update(T data)
//更新对象ID
updateId(T data, ID newId)
//返回UpdateBuilder<T,ID>实现复杂更新需求
updateBuilder()

4、查

//根据ID查询
queryForId(ID id)
//查询所有数据
queryForAll()
//返回QueryBuilder<T,ID>自定义复杂的查询需求
queryBuilder()

以上DeleteBuilder, QueryBuilder, UpdateBuilder全部集成于StatementBuilder,因此得到XXBuilder之后可以通过where()设置条件,如下

QueryBuilder<Account, String> qb = accountDao.queryBuilder();
 Where where = qb.where();
 // the name field must be equal to "foo"
 where.eq(Account.NAME_FIELD_NAME, "foo");
 // and
 where.and();
 // the password field must be equal to "_secret"
 where.eq(Account.PASSWORD_FIELD_NAME, "_secret");
 PreparedQuery<Account, String> preparedQuery = qb.prepareQuery();

只是对于不同的XXBuilder需要调用不同的方法罢了,如delete()、query()、update()。更多详情见API文档

时间: 2024-10-08 10:16:56

android开源ORM框架OrmLite使用教程的相关文章

Android轻量级ORM框架ActiveAndroid入门教程(转)

注:没有找到出处,如有侵犯,请告知 开始ActiveAndroid神奇之旅: 在AndroidManifest.xml中我们需要添加这两个 AA_DB_NAME (数据库名称,这个name不能改,但是是可选的,如果不写的话 是默认的"Application.db"这个值) AA_DB_VERSION (数据库版本号,同样是可选的 – 默认为1) <manifest ...> <application android:name="com.activeandro

GreenDao开源ORM框架浅析

Android程序开发中,避免不了要用到数据库,我们都知道android提供了内置的Sqlite,即调用SQLiteOpenHelper的方法,来操作数据库,但是使用过程较为繁琐,从建表到对表中数据的正删改查操作,需要大量的代码来建立表,和完成这些操作. GreenDao居然是ORM框架,它跟hibernate是很像的,就是当你配置了一些参数信息之后,可以由框架来帮你生成对应的实体类,还有生成对应的操作实体类的代码(自动建表和基本的增删改查). 优点: 1.最大性能(最快的Android ORM

Android 数据库ORM框架GreenDao学习心得及使用总结&lt;一&gt;

Android 数据库ORM框架GreenDao学习心得及使用总结<一> 转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写.查询等操作.因此首先想到了对整个项目的数据库框架进行优化. 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂.但是在使用过程中感觉很繁

android开源项目框架大全:《IT蓝豹》

android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式,自定义AnimTabsView继承 RelativeLayout 里面对当前选中的item 处理 三角形变成透明效果,即在onDraw 里面对三角形图片经行透明度处理,AnimTabsView提供 setOnAnimTabsItemViewChangeListener方法的onChange()用来

开源日志框架Exceptionless使用教程

原文:开源日志框架Exceptionless使用教程 Exceptionless是一款日志记录框架,它开源.免费.提供管理界面.易于安装和使用.ExceptionLess底层采用ElasticSearch作为日志存储,提供了快速.丰富的查询API,方便我们进行系统集成.本文将介绍ExceptionLess的常见用法. 安装ExceptionLess 在ExceptionLess官网提供了基于Docker的私有化部署方式,我们可以按照官网的方式进行测试环境的安装. 在官网github中下载最新的r

Android开源测试框架学习

近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java代码,采用传统的Junit测试,开发人员通常会编写重要接口和函数的白盒测试代码,不做过多讨论. 但因Android的特殊运行机制(Dalvik虚拟机),其中存在Application.Activity.Service等特殊组件,而这些组件都涉及到生命周期管理的问题. 为了对这些组件进行测试,Goog

开源ORM框架 SqlSugar 3.0的巨大变化

SqlSugar从1.0版本一直更新到3.0 ,使用该 ORM的人也越来越多,需求也越来越多,提出的需求和大家给我的建议的也都尽力满足. 并且 重构了EMIT和拉姆达解析,添加了无数的新功能,重新整了的GIT HUB上的DEMO,重新整理了所有注释. 完全基于SqlSugar的开源CMS http://www.baisoft.org/ 作者已经完成了后台并且将会开源. SqlSugar 3.0 即将发布 现在版本 2.99 优点: SqlSugar 是一款小巧,并且功能齐全的ORM,并不需要像D

Android 开源日志库 Logger 使用教程

转载请注明出处: http://blog.csdn.net/like_program/article/details/52986553 1.Logger 是什么 在我们日常的开发中,肯定是少不了要和 Log 打交道,回想一下我们是怎么使用 Log 的:先定义一个静态常量 TAG,TAG 的值通常是当前类的类名,然后在需要打印 Log 的地方,调用 Log.d(TAG, "要打印的内容").每次新写一个类,都要写一个 TAG,这也就算了,最苦逼的是,项目一上线,还要手动去把每个 Log

Android 开源动画框架:NineOldAndroids

介绍 Android 平台提供两种动画系统:Property Animation(Android 3.0引入)和View Animation.这两种动画都可供选择,但是Property Animation是首选,因为它更灵活并且提供更强大的功能.除此之外,你还可以使用Drawable Animation,它允许你加载一系列图片资源并且按照指定的顺序一帧一帧的播放.Property AnimationIntroduced in Android 3.0 (API level 11), the pro