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数据库的支持,只需要几行代码,写个公共的管理与泛型接口,就能做完全部操作。
接下来,让我们来看看它到底要怎么用。
首先,先创建一个模型,用来建表
@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哈哈~