数据存储之ORMlite框架总结

来源:互联网 发布:网络丢包率标准 编辑:程序博客网 时间:2024/06/08 05:36

1.介绍

ormlite 是类似hibernate的对象映射框架,主要面向java语言,具有轻量级、关系持久化等特点,支持着包括mysql,sqlite,和H2等多种的数据库。

作为一个开源的框架,ormlite的源代码、文档以及demo都比较多,版本的迭代更新也很迅速,这都是我们选择它的一个强心针。
官网:http://ormlite.com/
如果需要开发android,只需要下载core和android两个jar包: ormlite-core-4.48.jar ormlite-android-4.48.jar

在用这个框架之前,使用创建数据库以及建表时,都要写好多东西–helper、dao、以及一堆sql语句。时不时的哪里出个错,老恶心了!而ormlite对于android系统sqlite数据库的支持,只需要几行代码,写个公共的管理与泛型接口,就能做完全部操作。
接下来,让我们来看看它到底要怎么用。

2.使用之旅

首先,先创建一个模型,用来建表

@DatabaseTable(tableName = "Category")public class Category {    @DatabaseField(generatedId = true,CanBeNull = false)    public int id;    @DatabaseField(CanBeNull = true)    public String cateName;}

@DatabaseTable 如果默认为类名的话,后面不需要添加类名注释,当然也可以自定义这个表名参数(如“Category”)。
@DatabaseField 用于表中字段的注释,generatedId =true声明id为自增长,也就是主键。CanBeNull 表示该属性列是否可为空。其实除了这两个可注释的属性外,也可以指定类型、长度、是否唯一等属性。
具体如下:

columnName 指定字段名,不指定则变量名作为字段名
canBeNull 字段是否能被分配null值。默认是true。
dataType 指定字段的类型
defaultValue 当我们在表中创建新的记录时的一个字段的默认值。默认情况下是没有这个值的
width 字段的宽度,主要用于字符串字段。默认是0
id 这个字段是否是id,默认是false。在一个class中只有一个成变量可以有这个值。id字段是一条记录的唯一标识而且是必需的,只能在generatedId和 generatedIdSequence其中选一个。
generatedId 字段是否自动增加。默认为false。
generatedIdSequence 序列编号的名字,这个值在生成的时候会被使用。和generatedId相似,但是你能够指定使用的序列名称。默认是没有的。
foreign 指定这个字段的对象是一个外键,外键值是这个对象的id
persisted 指定是否持久化此变量,默认true
foreignAutoCreate 外键不存在时是否自动添加到外键表中
foreignColumnName 外键字段指定的外键表中的哪个字段

表模型建好之后,需要建数据库,创建一个类,继承OrmLiteSqliteOpenHelper。这个类需要实现两个父类方法onCreate() 和onUpgrade(),用于创建和更新数据库。

 @Override    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {        try {          TableUtils.createTable(connectionSource, Category.class);        } catch (SQLException e) {            Log.e(DatabaseHelper.class.getName(), "Can't create database", e);            throw new RuntimeException(e);        }    }    @Override    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion,            int newVersion) {        try {            TableUtils.dropTable(connectionSource, Category.class, true);            onCreate(db, connectionSource);        } catch (SQLException e) {            Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);            throw new RuntimeException(e);        }    }    public RuntimeExceptionDao<Category, Integer> getCateDao() {        if (cateRuntimeDao == null) {            cateRuntimeDao = getRuntimeExceptionDao(Category.class);        }        return cateRuntimeDao;        }   @Override    public void close() {        // close the database,and clear any cached daos        super.close();          cateRuntimeDao = null;    }

当然你可以在Helper这个类中,获取到所建表的dao,进而对这个表进行管理。

第二步,创建DBManager,用于管理Helper,若是你有多个数据库,为了方便管理以及代码的整洁性,可以先写个IDBManager的接口,去实现,采用泛型数据,对多个数据结构操作。

private DatabaseHelper databaseHelper = OpenHelperManager.getHelper(context,XXHelper.class);

OpenHelperManager是ORMlite框架提供的数据库管理帮助类,直接使用就能获取到我所要管理的辅助类。接着根据辅助类中的getDao()方法来获取数据库访问对象,有了对象,我们就可以直接操作数据库了。

Dao<Catogary,Integer> dao =  databaseHelper.getDao(Catogary.classs);Catogary data = new Catogary();dao.create(data);dao.delete(data);dao.update(data);dao.queryForAll();

以上是对ORMLite操作数据库的简单介绍,初步实现增删改查操作。如果你要实现复杂型操作,那就需要用到条件查询,条件删除,条件更新等。

QueryBuilder、UpdateBuilder、DeleteBuilder的使用

废话不多说,直接上代码,基本基础不差的,都能看的懂它怎么用。

      QueryBuilder<Article, Integer> queryBuilder = articleDaoOpe.queryBuilder();      Where<Article, Integer> where = queryBuilder.where();      where.eq("user_id", 1).       where.and().      where.eq("name", "xxx");      queryBuilder.query();
DeleteBuilder<Article, Integer> deleteBuilder = articleDaoOpe.DeleteBuilder();      Where<Article, Integer> where = deleteBuilder .where();      where.eq("user_id", 1).       where.and().      where.eq("XXX", "xxx");      DeleteBuilder.delete();
UpdateBuilder<Article, Integer> updateBuilder = articleDaoOpe.updateBuilder();      Where<Article, Integer> where = updateBuilder .where();      where.eq("user_id", 1).       where.and().      where.eq("XXX", "xxx");      updateBuilder .update();

当你要完成一些更复杂的查询时,你需要在where上作文章。

where.or(        where.and(where.eq("user_id", 1), where.eq("XXX", "xxx")),     where.and(where.eq("user_id", 2), where.eq("XXX", "yyy")));

当然,你要是觉得这样还是麻烦,那我推荐你可以使用sql语句跟参数,直接传入,省的麻烦。

articleDaoOpe.updateRaw(statement, arguments);

以上,主要介绍了ormlite的基本使用与认识。具体的优势跟方便,还需读者自己去深入开发,相信你会爱上它的,真的给程序员带来了福利O(∩_∩)O哈哈~

1 0
原创粉丝点击