1 ormlite是什么?
官网www.ormlite.com,它的英文全称是Object Relational Mapping,意思是对象关系映射,在JavaEE开发就有一个类似的数据库映射框架——Hibernate。简单来说,就是我们定义一个实体类,利用这个框架,它可以帮我们把这个实体映射到我们的数据库中(SQLite),数据中的字段就是我们定义实体的成员变量。
2 为什么要用ormlite?
2.1 优点
(1)轻量级;
(2)使用简单,易上手;
(3)封装完善;
(4)文档全面。
2.2 缺点
(1)基于反射,效率较低;
(2)缺少中文翻译文档。
3 如何使用?
3.1 导入jar包到项目libs文件夹下(官网下载)
3.2 继承OrmLiteSqliteOpenHelper类定义数据库帮助类
3.2.1 源码
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "fungovod.db";
private static final int DATABASE_VERSION = 1;
private Map<String, RuntimeExceptionDao> daos = new HashMap<>();
public DatabaseHelper (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Follows.class);
} catch (SQLException e) {
Logger.e(e);
throw new RuntimeException(e);
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try {
TableUtils.createTable(connectionSource, Follows.class);
} catch (SQLException e) {
Logger.e(e);
throw new RuntimeException(e);
}
}
private static DatabaseHelper instance;
/**
* 单例获取该Helper
*
* @param context
* @return
*/
public static synchronized DatabaseHelper getHelper(Context context) {
context = context.getApplicationContext();
if (instance == null) {
synchronized (DatabaseHelper.class)
{
if (instance == null)
instance = new DatabaseHelper(context);
}
}
return instance;
}
public synchronized RuntimeExceptionDao getRuntimeExceptionDao(Class clazz) {
RuntimeExceptionDao dao = null;
String className = clazz.getSimpleName();
if (daos.containsKey(className)) {
dao = daos.get(className);
}
if (dao == null) {
dao = super.getRuntimeExceptionDao(clazz);
daos.put(className, dao);
}
return dao;
}
/**
* 释放资源
*/
@Override
public void close() {
super.close();
for (String key : daos.keySet()) {
RuntimeExceptionDao dao = daos.get(key);
dao = null;
}
}
}
3.2.2 解释
(1)整个DatabaseHelper使用单例只对外公布出一个对象,保证app中只存在一个SQLite Connection , 参考文章:http://www.touchlab.co/2011/10/single-sqlite-connection/
(2)我们对每个Bean创建一个XXXDao来处理当前Bean的数据库操作,当然真正去和数据库打交道的对象,通过上面代码中的getDao(T t)进行获取getDao为一个泛型方法,会根据传入Class对象进行创建Dao,并且使用一个Map来保持所有的Dao对象,只有第一次调用时才会去调用底层的getDao()。
3.3 定义实体类Bean,代表一张表(持久层)
3.3.1 代码
@DatabaseTable(tableName = "tb_follows")
public class Follows {
@DatabaseField(id = true)
private String vid;
@DatabaseField
private String name;
@DatabaseField
private String img;
@DatabaseField
private long param1;
@DatabaseField
private long param2;
public Follows() {
}
public Follows(String vid, String name, String img) {
this.vid = vid;
this.name = name;
this.img = img;
}
}
3.3.2 解释
@DatabaseTable:表示定义了一个数据表,如果不指定名字,在Android中会以类名作为表名,如packageInfo就是SQLite数据库中的表名,我们也可以指定表名,@DatabaseTable(tableName = “tb_package”) 。
DatabaseField:表示定义了数据中的一个字段,id表示数据中的一个主键,如果指定为generatedId,表示自动增长id,我们不需要给它赋值。其他字段,可以使用columnName来指定字段名,canBeNull表示是否为空,这些赋值可以按照以下来指定-(id = true, canBeNull = false)(columnName = “name”)
3.4 定义Bean的DAO,对数据库进行增、删、改、查(Dao层)
3.4.1 代码
public class FollowsDao {
private RuntimeExceptionDao<Follows, String> followsRuntimeDao = null;
private DatabaseHelper helper;
public FollowsDao(Context context) {
helper = DatabaseHelper.getHelper(context);
followsRuntimeDao = helper.getRuntimeExceptionDao(Follows.class);
}
public boolean addToFollows(Follows follows) {
Dao.CreateOrUpdateStatus status = followsRuntimeDao.createOrUpdate(follows);
return status.isCreated() || status.isUpdated();
}
public boolean checkFollows(String vid) {
return followsRuntimeDao.idExists(vid);
}
public boolean removeFollow(String vid) {
int i = followsRuntimeDao.deleteById(vid);
Logger.i("delete follow: "+vid + ", rs: " + i);
return i > 0;
}
public void removeFollows(List<String> ids) {
followsRuntimeDao.deleteIds(ids);
}
public List<Follows> getFollows(int page) {
return followsRuntimeDao.queryForAll();
}
}
3.5 Service方法接口和实现类(业务层)
public class UserInfoService {
FollowsDao followsDao;
public UserInfoService(FollowsDao followsDao) {
this.followsDao = followsDao;
}
public boolean isFollowed(String vid) {
return followsDao.checkFollows(vid);
}
public boolean removeFollow(String vid) {
return followsDao.removeFollow(vid);
}
public boolean removeFollows(List<String> ids) {
return followsDao.removeFollows(ids);
}
public boolean saveFollows(VodInfo videoInfo) {
boolean saved = false;
if (videoInfo != null) {
String vid = videoInfo.getVid();
String img = videoInfo.getPic916();
String name = videoInfo.getTitle();
saved = saveFollow(vid, name, img);
}
return saved;
}
public boolean saveFollow(String vid, String name, String img) {
Follows f = new Follows(vid, name, img);
return followsDao.addToFollows(f);
}
public List<Follows> getFollowList() {
return followsDao.getFollows(0);
}
}
3.6 测试(调用层)
private void removeAllRecords() {
List<String> ids = new ArrayList<>();
for (RecordBean bean : recordBeans) {
ids.add(bean.url);
}
recordInfoService.removeRecords(ids);// 删除全部
initData();// 重新更新数据,避免删除不干净,继续读取剩余数据
collectAdapter.notifyDataSetChanged();
}
ORMLite是一款轻量级的对象关系映射框架,适用于Android和Java应用。本文介绍ORMLite的基本概念、优缺点,并通过实例演示如何使用ORMLite进行数据库操作。

1054

被折叠的 条评论
为什么被折叠?



