• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Android-ORM: Android ORM (Aorm) 是一个老牌的Android平台上的ORM实现(那个时候,还 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

Android-ORM

开源软件地址:

https://gitee.com/jamling/Android-ORM

开源软件介绍:

Build StatusGitHub releaseBintrayAndroid Arsenal

简介

您是否在Android上使用sqlite来存储您的应用数据呢?如果是,或许您会对Android存取sqlite数据感觉有点小复杂。本人从2010年开始从事Android开发,对于Android的数据库操纵这一块,感觉还是比较复杂的,尤其是可维护性及或可扩展性方面,都是比较差的。也正是从这时开始,我决定在Android平台上实现像Hibernate那样的ORM框架,来简化开发工作。使得开发者在使用sqlite数据库时,无需关注底层数据库实现,更多的是关注上层业务逻辑实现。如果您对此项目感兴趣,欢迎您的加入!

特性

  • 简洁的ORM映射配置, 只需在Java Bean的属性中添加@Column的注解即可完成到数据库字段的映射配置.
  • 支持原生ConntentProvider,可以方便的使用Android ContentProvider机制来共享数据,初始化/升级/降级数据库
  • 强大的正向工程支持, 有Eclipse Android ADT-extensions和Android Studio Android ORM Tool插件来自动生成DDL和ContentProvider.
  • 给力的辅助工具, 向导式新建Activity/Service/BroadcastReceiver并且自动配置到AndroidManifest.xml.
  • ...更多特性,请自行体验.

使用

最新版本 $latest 为: latest release, 在使用中请将$latest替换为具体的版本.

Eclipse

下载aorm-core-$latest.jar并放入libs/目录下

推荐安装Android ADT-extensions插件

Android Studio

Aorm已经发布到jcenter,在您的app/build.gradle中添加以下依赖。

dependencies {    compile 'cn.ieclipse.aorm:aorm-core:$latest'}

推荐安装Android Studio上的Android ORM Tool插件,可以快速生成相关代码。

类似orm库比较

简单试验结果:

Simple Trial

复杂试验结果:

Complex Trial

测试工程代码请参考: https://github.com/Raizlabs/AndroidDatabaseLibraryComparison

示例代码

创建映射

只需添加类@Table注解及@Column属性注解即可完成表与字段的映射。

@Table(name = "student")public class Student implements Serializable {        @Column(name = "_id", id = true)    public long id; //id is Primary key.        @Column(name="_name")    public String name; //mapping to _name and auto column type        @Column()    public int age; //auto column type and name        @Column(defaultValue="''")    public String phone; // default value in empty        public String address; // no mapping}

Create database

package cn.ieclipse.aorm.example;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.net.Uri;import cn.ieclipse.aorm.Aorm;import cn.ieclipse.aorm.Session;import cn.ieclipse.aorm.example.bean.Course;import cn.ieclipse.aorm.example.bean.Grade;import cn.ieclipse.aorm.example.bean.Student;/** * @author Jamling *  */public class ExampleContentProvider extends ContentProvider {        public static final String AUTH = "cn.ieclipse.aorm.example.provider";    public static final Uri URI = Uri.parse("content://" + AUTH);    private SQLiteOpenHelper mOpenHelper;    private static Session session;        @Override    public int delete(Uri arg0, String arg1, String[] arg2) {        return 0;    }        @Override    public String getType(Uri arg0) {        return null;    }        @Override    public Uri insert(Uri arg0, ContentValues arg1) {        return null;    }        @Override    public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,            String arg4) {        return null;    }        @Override    public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {        return 0;    }        public static Session getSession() {        return session;    }        @Override    public boolean onCreate() {        mOpenHelper = new SQLiteOpenHelper(this.getContext(), "example.db",                null, 1) {            public void onCreate(SQLiteDatabase db) {                // method 3: use AORM to create table                Aorm.createTable(db, Grade.class);                Aorm.createTable(db, Student.class);                Aorm.createTable(db, Course.class);            }                        public void onUpgrade(SQLiteDatabase db, int oldVersion,                    int newVersion) {                // update table, suggested to wrapper in if block                Aorm.updateTable(db, Grade.class);                Aorm.updateTable(db, Student.class);                Aorm.updateTable(db, Course.class);            }        };        session = new Session(mOpenHelper, getContext().getContentResolver());        return true;    }    }

查询

        Session session = ExampleContentProvider.getSession();        // 最简单的查询:查询所有的学生信息.        Criteria criteria = Criteria.create(Student.class);        // 添加条件: id相等        criteria.add(Restrictions.eq("id", 1));        // 添加条件: name like Jamling        criteria.add(Restrictions.like("name", "Jaming"));        // add restriction: age < 30        criteria.add(Restrictions.lt("age", 30));        // add order        criteria.addOrder(Order.asc("age"));        // set district        criteria.setDistinct(true);        // set limit from row 10 to 20        criteria.setLimit(10, 10);        List<Student> list = session.list(Student.class);        // if you use Android CursorAdapter you can:        Cursor c = session.query(criteria);        // set alias, so the project will be alias.columnn. e.g. s.name        // criteria.setAlias("s");        // multi-table query        criteria.addChild(StudentMore.class, "m", Criteria.INNER_JOIN,                Restrictions.geProperty("s.id", "m.id"));        // query to cursor        c = session.query(criteria);        // convert to list.        List<Object[]> ret = CursorUtils.getFromCursor(c,                new Class[] { Student.class }, new String[] { "s", "m" });        // query to list.        ret = session.listAll(criteria);        Object[] item = ret.get(0);        Student s = (Student) item[0];        StudentMore m = (StudentMore) item[1];        //

其它操作

        Session session = ExampleContentProvider.getSession();        // insert        Student s = new Student();        s.setName("Jamling");        long rowId = session.insert(s, null);        // update student's name to Jame whose id is 1        s.setId(1);        s.setName("Jame");        int rows = session.update(s);        // delete student whose id is 2        session.deleteById(Student.class, 2);        // query student whose id is 4        s = session.get(Student.class, 4);

文档

请参考 http://www.ieclipse.cn/p/Android-ORM/userguide.html

作者

Jamling ([email protected])


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap