`

Android 的对象关系映射框架 —— Homocentric

阅读更多
Homocentric框架其实是一个意外产物,在公司做项目时,苦于数据库的繁琐,需要对代码进行一层层的封装,遂产生了冲动,不如自己写一个框架吧,于是说做就做,由于学过JavaEE的三大框架,对其中的Hibernate的原理有一定的了解,因此写起来并不是十分的吃力,断断续续的过了三个月,Homocentric的第一个版本出来了,不消说,用起来确实方便多了,闲话少说,开始正题。
    Homocentric在使用方法上与Hibernate几乎一致(因为本人也是模仿它做的),对外提供一个接口负责执行被持久化对象的CRUD操作——Sessoin,Session共有提供了十个方法,分别是:
    public List get(Object obj) throws JavaBeanException;
    public Object get(Class<?> clazz, Integer id);
    public List getPaging(Class<?> clazz, int start, int count);
    public boolean save(Object obj) throws JavaBeanException;
    public boolean update(Object obj) throws JavaBeanException;
    public boolean delete(Object obj) throws JavaBeanException;
    public int getCount(Class<?> clazz);
    public List get(String sql, String[] selectionArgs);
    public void exec(String sql);
    public void closeDB();

    这十个方法在此不做过多的介绍了,相信看到方法的名和参数就应该知道它的作用。
    其中的某些方法的参数obj是JavaBean,JavaBean需要继承Holder,目前Holder类没有任何可用的方法,备以后版本扩展使用,如果JavaBean没有继承Holder而使用Session,则会抛出JavaBeanException异常。
    Session是受保护的类,通过SeesionFactory类可以得到,如下:
    Session session = SessionFactory.getSession(context);

    其中Context是Android的上下文对象。
    介绍完两个关键类,下面需要说下Homocentric的配置文件:homo.cfg.xml。
    配置文件需要定义APP所需要的数据库及JavaBean所对应的数据库表,具体格式示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<library name="shop" version="1">
  <table name="user">
    <property name="name" type="VARCHAR" length="50" />
    <property name="psd" type="VARCHAR" length="30" />
  </table>
</library>

    library标签定义数据库,其中name是数据库名,version是数据库版本,如果版本大于当前的数据库版本,则删除原来数据库重新创建。
    table标签定义数据库表,其中name是表名。
    property标签定义表的字段属性,其中name是字段名,type是字段类型,length是字段长度,如果其值为-1,则表示无长度要求。
    作为第一个版本,目前没有特别的复杂的处理,比如外键等。
    下面使用一个简单的例子,来介绍Homocentric的使用。
public class User extend Holder {
    private String name;
    private String psd;
    
    public User(){}

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

    public ...
}

    定义好User后,相应的需要修改配置文件,为了避免重复,直接就使用上面的配置文件例子,将这些准备好后,可以编写UserDao了。
public class UserDao {
    protected Session session;
    protected Class clazz;
    
    public UserDao(){
        clazz = User.class;
        session = SessionFactory.getSession(context);
    }

    public User getAll() {
        try {
            return session.get("FROM " + clazz.getName(), null);
        } catch (SQLSyntaxException e) {
            e.printStackTrace();
        }

        return null;
    }

    public boolean save(User user) {
        try {
            return session.save(user);
        } catch (JavaBeanException e) {
            e.printStackTrace();
        }

        return false;
    }

    public ...
}

    UserDao具体实现了User在数据库的CRUD的操作。
    Homocentric框架的一些基本功能差不多就是这些了,于是精力有限,一些关于数据库的更高级的功能没有加入,比如外键关联,JavaBean中的某个属性不是基本数据类型等,关于这些将会在下一个版本中发布。
    这里附上Homocentric的开发Jar包,供有需求的人使用。

    Homocentric的技术交流群:195735749,关于Homocentric的源码及设计将在群里发布。
    申明:转载请注明出处,谢谢。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics