对OrmLite数据库操作的封装

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

简介

OrmLite是一个历史悠久的开源数据库框架,鉴于目前一些项目还在使用,所以打算对其调用进行一些封装处理。

解决方案

OrmLite不像GreenDao那样需要建立一个Java工程用来生成数据库文件。
通过规定的注释即可完成数据库和表的创建,比如@DatabaseTable、@DatabaseField等。
拿User表来举例:

@DatabaseTable(tableName = User.TABLE_NAME_USERS)
public class User implements Serializable {

    public static final String TABLE_NAME_USERS = "users";

    public static final String FIELD_NAME_ID     = "id";
    public static final String FIELD_NAME_NAME   = "name";

    @DatabaseField(columnName = FIELD_NAME_ID, generatedId = true)
    private int mId;

    @DatabaseField(columnName = FIELD_NAME_NAME)
    private String mName;

    public User() {
        // Don't forget the empty constructor, needed by ORMLite.
    }

    public int getId() {
        return mId;
    }

    public void setId(int mId) {
        this.mId = mId;
    }

    public String getName() {
        return mName;
    }

    public void setName(String mName) {
        this.mName = mName;
    }
}

我们还需要继承父类OrmLiteSqliteOpenHelper,用来处理数据的创建、升级、删除等操作。
同样,对数据库表的操作也是通过对应的Dao文件来实现的,OrmLite通过如下实现:

OrmLiteHelper ormLiteHelper = OpenHelperManager.getHelper(MyApplication.getInstance(), OrmLiteHelper.class);

然后通过:ormLiteHelper.getDao方式获取到Dao实例,接着就可以对数据库进行控制了。
我们可以建立一个BaseOrmLiteDao的泛型类,这个父类里面主要用来获取对应的子类Dao实例。

public class BaseOrmLiteDao<T> {

    protected static OrmLiteHelper ormLiteHelper = OpenHelperManager.getHelper(MyApplication.getInstance(), OrmLiteHelper.class);

    protected Dao<T, Integer> dao;

    {
        try {
            dao = ormLiteHelper.getDao(getTClass());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public Class<T> getTClass()
    {
        Class<T> tClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        return tClass;
    }
}

UserDao如下:

public class UserDao extends BaseOrmLiteDao<User> {

    private static UserDao sINSTANCE;

    public static UserDao getInstance() {
        if (sINSTANCE == null) {
            synchronized (UserDao.class) {
                if (sINSTANCE == null) {
                    sINSTANCE = new UserDao();
                }
            }
        }
        return sINSTANCE;
    }

    public void createUser(String name) {
        User user = new User();
        user.setName(name);
        try {
            dao.create(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public User getUserById(int userId) {
        try {
            QueryBuilder<User, Integer> qb = dao.queryBuilder();
            qb.where().eq(User.FIELD_NAME_ID, userId);
            return qb.queryForFirst();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public List<User> getAllUser() {
        try {
            QueryBuilder<User, Integer> qb = dao.queryBuilder();
            return qb.query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void update(User user) {
        try {
            dao.update(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void delete() {
        try {
            dao.deleteBuilder().delete();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

UserDao里面实现对数据库操作的业务逻辑和种类。

实际应用如下:

UserDao.getInstance().createUser(mEditText.getText().toString());

git地址

https://github.com/ddnosh/AndroidQuick

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值