LiteOrm is a fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line of code efficiently.

Overview

#LiteOrm:Android高性能数据库框架

A fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line of code efficiently.

English Intro :Readme

LiteOrm是一个小巧、强大、比系统自带数据库操作性能快1倍的 android ORM 框架类库,开发者一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。

汉语简介 :Readme

QQ群: 新群 42960650一群(满) 47357508


1. 初步认识

自动化且比系统自带数据库操作快1倍!

LiteOrm是android上的一款数据库(ORM)框架库。速度快、体积小、性能高。开发者基本一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。

10万条数插入对比系统API 10万条数插入对比系统API

100 000条数据测试 100 000条数据测试

###设计原则 :

  • 轻量、专注、性能优先、线程无关,专注数据及其关系存储和操作。
  • 无需工具辅助,不需要无参构造,不需要繁多注解,约定优于配置。
  • 使用极致简约,例如:db.save(u); db.query(U.class); db.deleteAll(U.class);

###功能特点 :

  • 支持多库:每个数据库文件对应一个LiteOrm管理类实例。
  • SD卡存储:可以将DB文件放在你认为合理的位置。
  • 自动建表:开发者无需关心数据库以及表细节。
  • 库文件操作:新建、打开、删除、释放一个数据库文件。
  • 独立操作:使用 LiteOrm 的 single 实例,可与 cascade 方式平滑切换,性能高,仅处理该对象数据,其关系、和关联对象忽略;
  • 级联操作:使用 LiteOrm 的 cascade 实例,可与 single 方式平滑切换,全递归,该对象数据,及其关系、和关联对象都被处理;
  • 关系存储和恢复:真正实现实体关系映射持久化以及恢复,只需在实体的关联属性上标出关系类型即可。
  • 智能列探测:App升级或者Model改变,新加了属性字段,该字段将被探测到并加入数据库中,因此无需担心新字段不被存储。
  • 丰富API支持:save(replace), insert, update, delete, query, mapping, etc。
  • 自动识别类型:分别转化为以sqlite支持的TEXT, REAL, INTEGER, BLOB几种数据类型存储。
  • 自动构建对象,通过反射和探测构造函数参数等hack手法新建对象,大多情况下亦不需要无参构造函数。
  • 更新指定列,可灵活、强制、批量赋值,强制赋值将无视被操作对象的真实值。
  • 存储序列化字段:Date、ArrayList、Vector等各种容器智能保存及读取。
  • 约束性语法支持:NOT NULL, UNIQUE, DEFAULT, COLLATE, CHECK, PRIMARY KEY,支持冲突算法。
  • 灵活的查询和删除:columns, where, roder, limit, having group, etc。

2. 快速起步:初始化应保持单例

一个数据库对应一个LiteOrm的实例,如果一个App只有一个数据库,那么LiteOrm应该是全局单例的。 如果多次新建LiteOrm实例,系统会提示你应该关闭之前的数据库,也可能会引起其他未知错误。

保持单例:

static LiteOrm liteOrm;

if (liteOrm == null) {
    liteOrm = LiteOrm.newSingleInstance(this, "liteorm.db");
}
liteOrm.setDebugged(true); // open the log

3. 基本注解

新建一个Test Model,将其作为操作对象:

@Table("test_model")
public class TestModel {

    // 指定自增,每个对象需要有一个主键
    @PrimaryKey(AssignType.AUTO_INCREMENT)
    private int id;

    // 非空字段
    @NotNull
    private String name;

    //忽略字段,将不存储到数据库
    @Ignore
    private String password;

    // 默认为true,指定列名
    @Default("true")
    @Column("login")
    private Boolean isLogin;
}

LiteOrm将为开发者建一个名为“test_model”的数据库表,其字段为:id name login。 建表语句:CREATE TABLE IF NOT EXISTS test_model (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT, login TEXT DEFAULT true) 更多注解关注其他篇章或直接参看Samples。

4. 常用操作

直接操作对象即可,LiteOrm会为你完成探测、建表等工作。

  • 保存(插入or更新)
School school = new School("hello");
liteOrm.save(school);
  • 插入
Book book = new Book("good");
liteOrm.insert(book, ConflictAlgorithm.Abort);
  • 更新
book.setIndex(1988);
book.setAuthor("hehe");
liteOrm.update(book);
  • 更新指定列
// 把所有书的author强制批量改为liter
HashMap<String, Object> bookIdMap = new HashMap<String, Object>();
bookIdMap.put(Book.COL_AUTHOR, "liter");
liteOrm.update(bookList, new ColumnsValue(bookIdMap), ConflictAlgorithm.Fail);
// 仅 author 这一列更新为该对象的最新值。
//liteOrm.update(bookList, new ColumnsValue(new String[]{Book.COL_AUTHOR}, null), ConflictAlgorithm.Fail);
  • 查询
List list = liteOrm.query(Book.class);
OrmLog.i(TAG, list);
  • 查找 使用WhereBuilder
List<Student> list = liteOrm.query(new QueryBuilder<Student>(Student.class)
        .where(Person.COL_NAME + " LIKE ?", new String[]{"%0"})
        .whereAppendAnd()
        .whereAppend(Person.COL_NAME + " LIKE ?", new String[]{"%s%"}));
OrmLog.i(TAG, list);
  • 查询 根据ID
Student student = liteOrm.queryById(student1.getId(), Student.class);
OrmLog.i(TAG, student);
  • 查询 任意
List<Book> books = liteOrm.query(new QueryBuilder<Book>(Book.class)
        .columns(new String[]{"id", "author", Book.COL_INDEX})
        .distinct(true)
        .whereGreaterThan("id", 0)
        .whereAppendAnd()
        .whereLessThan("id", 10000)
        .limit(6, 9)
        .appendOrderAscBy(Book.COL_INDEX));
OrmLog.i(TAG, books);
  • 删除 实体
// 删除 student-0
liteOrm.delete(student0);
  • 删除 指定数量
// 按id升序,删除[2, size-1],结果:仅保留第一个和最后一个
// 最后一个参数可为null,默认按 id 升序排列
liteOrm.delete(Book.class, 2, bookList.size() - 1, "id");
  • 删除 使用WhereBuilder
// 删除 student-1
liteOrm.delete(new WhereBuilder(Student.class)
        .where(Person.COL_NAME + " LIKE ?", new String[]{"%1%"})
        .and()
        .greaterThan("id", 0)
        .and()
        .lessThan("id", 10000));
  • 删除全部
// 连同其关联的classes,classes关联的其他对象一带删除
liteOrm.deleteAll(School.class);
liteOrm.deleteAll(Book.class);


// 顺带测试:连库文件一起删掉
liteOrm.deleteDatabase();
// 顺带测试:然后重建一个新库
liteOrm.openOrCreateDatabase();
// 满血复活

关于作者(About Author)


我的博客 :http://vmatianyu.cn

我的开源站点 :http://litesuits.com

Comments
  •  msg = near

    msg = near "from": syntax error

    如果我的对象中一个字段名叫from,liteorm直接就报错了。log显示create table就失败了。 msg = near "from": syntax error 这样的字段话取名还要想想想是不是和sql命令冲突? 我测试加这句就好了@Column("ffrom"),但这样好难用。。。

    @PrimaryKey(PrimaryKey.AssignType.BY_MYSELF) @Column("id") private String id; private String textContent; private String from; private String to;

    opened by roytan883 26
  • 是否支持成员变量为其他对象

    是否支持成员变量为其他对象

    插入如下对象时报空指针异常:

    public class Province extends Area implements Parcelable {
    
        @JSONField(name = "cities")
        public ArrayList<City> cities;
        //...
    }
    

    其中City也继承自Area:

    public class City extends Area implements Parcelable {
    
        @JSONField(name = "areas")
        public ArrayList<Area> areas;
        //...
    }
    

    Area的结构如下:

    public class Area implements Parcelable {
        @JSONField(name = "name")
        public String name;
        @JSONField(name = "code")
        public int code;
        @JSONField(name = "level")
        public final int level;
        //...
    }
    

    异常信息如下:

     java.lang.NullPointerException
         at com.litesuits.orm.db.assit.SQLBuilder.buildInsertSql(SQLBuilder.java:270)
         at com.litesuits.orm.db.assit.SQLBuilder.buildReplaceAllSql(SQLBuilder.java:236)
         at com.litesuits.orm.db.impl.SingleSQLiteImpl.save(SingleSQLiteImpl.java:74)
         at com.parkingwang.app.support.CacheHelper.saveToDbCache_aroundBody6(CacheHelper.java:97)
         at com.parkingwang.app.support.CacheHelper$AjcClosure7.run(CacheHelper.java:1)
         at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149)
         at hugo.weaving.internal.Hugo.logAndExecute(Hugo.java:30)
         at com.parkingwang.app.support.CacheHelper.saveToDbCache(CacheHelper.java:97)
         at com.parkingwang.app.account.vehicle.VehicleCallback.onUISuccess(VehicleCallback.java:37)
         at com.parkingwang.api.NotifyCallback.onUIResponse(NotifyCallback.java:79)
         at com.parkingwang.api.NotifyCallback.onUIResponse(NotifyCallback.java:35)
         at com.github.yoojia.fast.http.ParsableHttpCallback$1.handleMessage(ParsableHttpCallback.java:29)
         at android.os.Handler.dispatchMessage(Handler.java:106)
         at android.os.Looper.loop(Looper.java:193)
         at android.app.ActivityThread.main(ActivityThread.java:5551)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:515)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730)
         at dalvik.system.NativeStart.main(Native Method)
    
    opened by msdx 6
  • Android 6.0 不支持,直接报错结束。

    Android 6.0 不支持,直接报错结束。

    在6.0上报错。5.1和4.4上面正常。 输出日志

    03-05 08:12:55.621 8980-8980/? E/SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1]
    03-05 08:12:55.621 8980-8980/? E/SQLiteLog: (14) os_unix.c:31278: (2) open(/storage/emulated/0/xxxx/database/xxxx.db) - 
    03-05 08:12:55.622 8980-8980/? E/SQLiteDatabase: Failed to open database '/storage/emulated/0/xxxx/database/xxxx.db'.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    
    opened by leveychen 3
  • Parcelable序列化后,存不上集合数据了

    Parcelable序列化后,存不上集合数据了

    @Table("uploadtestreportdata") public class UploadTestReportData implements Serializable {

    @PrimaryKey(AssignType.AUTO_INCREMENT)
    private int ids;
    @Mapping(Relation.OneToMany)
    private ArrayList<UploadTaskResultObjectAct> taskResultList;
    

    @Table("uploadtaskresultobjectact") public class UploadTaskResultObjectAct implements Parcelable{

    @PrimaryKey(AssignType.AUTO_INCREMENT)
    private int idssss;
    
    @Column("taskId")
    private String  taskId;
    
    @Column("sampleNo")
    private String sampleNo;
    

    通过 UploadTaskResultObjectAct.class 查询不出数据了,是一个空集合

    opened by ObliverSen 1
  • 无法更新数据失败

    无法更新数据失败

    mUserInfo.setIsCurrUser("0"); Log.i("主键",mUserInfo.getId() + ""); ColumnsValue cv = new ColumnsValue(new String[]{"is_curr"}); mLiteOrm.update(mUserInfo, cv, ConflictAlgorithm.None);

    这里mUserInfo所有数据正常,主键也存在 image

    where条件的主键一直是空

    opened by Ludejin 1
  • LiteOrm.newSingleInstance(Context context, String dbName) 初始化后紧接着调用查询会查询不到内容

    LiteOrm.newSingleInstance(Context context, String dbName) 初始化后紧接着调用查询会查询不到内容

    版本:1.6.0、1.6.3 使用 LiteOrm.newSingleInstance(Context context, String dbName) 初始化数据库之后,紧接着调用query 查询会查询不到内容,即使数据库中其实有结果数据。除非在查询之前随便 liteOrm.save(...) 一下,QAQ 被坑了一整个晚上!最后的这个解决方法的发现也是突发奇想...

    作者看看是什么原因,修正一下吧😂

    opened by drakeet 1
  • 子元素是List集合,能保存关联。却无法取出。

    子元素是List集合,能保存关联。却无法取出。

    package com.litesuits.orm.junit;

    import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List;

    import com.litesuits.orm.LiteOrm; import com.litesuits.orm.db.annotation.Column; import com.litesuits.orm.db.annotation.Mapping; import com.litesuits.orm.db.annotation.PrimaryKey; import com.litesuits.orm.db.annotation.Table; import com.litesuits.orm.db.enums.AssignType; import com.litesuits.orm.db.enums.Relation; import com.litesuits.orm.model.demo.Teacher;

    import android.content.Context; import android.os.Environment; import android.test.AndroidTestCase;

    public class MyDemoTest extends AndroidTestCase {

    public static final String DB_NAME = Environment
            .getExternalStorageDirectory().getAbsolutePath()
            + "/lite/orm/love.db";
    
    public void estHello() {
        System.out.println("你好");
    }
    
    public void estSaveData() {
        Context mContext = getContext();
        LiteOrm liteOrm = LiteOrm.newCascadeInstance(mContext, DB_NAME);
        liteOrm.save(new Teacher("丽华", 23));
        liteOrm.save(getHomeTypeList());
    
    }
    
    public void estDeleteData(){
        Context mContext = getContext();
        LiteOrm liteOrm = LiteOrm.newCascadeInstance(mContext, DB_NAME);
        liteOrm.delete(HomeType.class);
    }
    
    public void testGetData(){
        Context mContext = getContext();
        LiteOrm liteOrm = LiteOrm.newCascadeInstance(mContext, DB_NAME);
        List<HomeType> hy = liteOrm.query(HomeType.class);
        System.out.println("hy = "+hy.toString());
    
    }
    
    public List<HomeType> getHomeTypeList(){
        List<HomeType>  homeTypes = new ArrayList<MyDemoTest.HomeType>();
    
        for (int i = 1; i <= 3; i++) {
            List<UserHome> userhomes = new ArrayList<MyDemoTest.UserHome>();
            UserHome[] uhs = new UserHome[3];
            for (int j = 1; j <= 3; j++) {
                userhomes.add(new UserHome("uid" + i + j, "nickname" + i + j));
                uhs[j-1] = new UserHome("uid" + i + j, "nickname" + i + j);
            }
    

    // homeTypes.add(new HomeType("hometypelist:" + i, "title," + i, // (UserHome[]) (userhomes.toArray()))); // homeTypes.add(new HomeType("hometypelist:" + i, "title," + i, // uhs)); homeTypes.add(new HomeType("hometypelist:" + i, "title," + i, userhomes)); } return homeTypes; }

    @Table("home_type")
    public static class HomeType implements Serializable {
    
        private static final long serialVersionUID = -6048223356798388872L;
        public static final String VISIBLE = "1";
        public static final String NONE = "0";
    
        @PrimaryKey(AssignType.AUTO_INCREMENT)
        @Column("db_id")
        private long db_id;
    
        @Column("hometypelist")
        private String hometypelist;
        @Column("type_id")
        private String type_id;
        private String title;
        private String image;
        private String typeinfo;
        private String home_image;
    
        /** 推荐是否有更多 0无 1 有 */
        private String usermore;
    
        @Mapping(Relation.OneToMany)
        @Column("userlist")
    

    // private UserHome[] userlist; private List userList;

        private HomeType(String hometypelist, String title,
                List<UserHome> userList) {
            this.hometypelist = hometypelist;
            this.title = title;
            this.userList = userList;
        }
    
    
        public String getHometypelist() {
            return hometypelist;
        }
    
        public void setHometypelist(String hometypelist) {
            this.hometypelist = hometypelist;
        }
    
        public String getType_id() {
            return type_id;
        }
    
        public void setType_id(String type_id) {
            this.type_id = type_id;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getImage() {
            return image;
        }
    
        public void setImage(String image) {
            this.image = image;
        }
    
        public String getTypeinfo() {
            return typeinfo;
        }
    
        public void setTypeinfo(String typeinfo) {
            this.typeinfo = typeinfo;
        }
    

    // public UserHome[] getUserlist() { // return userlist; // } // // public void setUserlist(UserHome[] userlist) { // this.userlist = userlist; // }

        public String getHome_image() {
            return home_image;
        }
    
        public void setHome_image(String home_image) {
            this.home_image = home_image;
        }
    
        /** 推荐是否有更多 0无 1 有 */
        public String getUsermore() {
            return usermore;
        }
    
        public void setUsermore(String usermore) {
            this.usermore = usermore;
        }
    
        @Override
        public String toString() {
            return "HomeType [hometypelist=" + hometypelist + ", type_id="
                    + type_id + ", title=" + title + ", image=" + image
                    + ", typeinfo=" + typeinfo + ", home_image=" + home_image
    

    // + ", userlist=" + Arrays.toString(userlist) + "]"; + ", userlist=" + userList.toString() + "]"; }

    }
    
    @Table("user_home")
    public static class UserHome implements Serializable {
    
        private static final long serialVersionUID = -1311542533996146739L;
    
        @PrimaryKey(AssignType.AUTO_INCREMENT)
        @Column("db_id")
        private long db_id;
    
        @Column("uid")
        private String uid;
        @Column("easemob_uuid")
        private String easemob_uuid;
        @Column("gender")
        private String gender;
        @Column("nickname")
        private String nickname;
        @Column("header")
        private String header;
        @Column("voice")
        private String voice;
        @Column("voice_time")
        private String voice_time;
    
    
    
        private UserHome(String uid, String nickname) {
            this.uid = uid;
            this.nickname = nickname;
        }
    
        public String getUid() {
            return uid;
        }
    
        public void setUid(String uid) {
            this.uid = uid;
        }
    
        public String getEasemob_uuid() {
            return easemob_uuid;
        }
    
        public void setEasemob_uuid(String easemob_uuid) {
            this.easemob_uuid = easemob_uuid;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public String getNickname() {
            return nickname;
        }
    
        public void setNickname(String nickname) {
            this.nickname = nickname;
        }
    
        public String getHeader() {
            return header;
        }
    
        public void setHeader(String header) {
            this.header = header;
        }
    
        public String getVoice() {
            return voice;
        }
    
        public void setVoice(String voice) {
            this.voice = voice;
        }
    
        public String getVoice_time() {
            return voice_time;
        }
    
        public void setVoice_time(String voice_time) {
            this.voice_time = voice_time;
        }
    
        @Override
        public String toString() {
            return "UserHome [db_id=" + db_id + ", uid=" + uid
                    + ", easemob_uuid=" + easemob_uuid + ", gender=" + gender
                    + ", nickname=" + nickname + ", header=" + header
                    + ", voice=" + voice + ", voice_time=" + voice_time + "]";
        }
    
    }
    

    }

    opened by sfyc23 1
  • 我遇到一个问题,不知道是个人原因还是框架的原因,希望能够帮我解答!

    我遇到一个问题,不知道是个人原因还是框架的原因,希望能够帮我解答!

    有两个Activity:FirstActivity,SecondActivity 1、我在FirstActivity获取服务器上的数据,并保存数据表为test 2、FirstActivity执行finish(),打开SecondActivity 3、SecondActivity查询test表,查不出数据,而且输出的表名为空 4、SecondActivity执行finish(),回到FirstActivity,FirstActivity可以查出数据 重复第2项的操作,结果与第3的一样 注:导出的db文件可以看到已保存的数据。

    opened by PassersHowe 0
  • jar包在系统源码中引入失败,

    jar包在系统源码中引入失败,

    报这种注解错误NotNull cannot be resolved to a type,The import com.litesuits cannot be resolved 我的一个项目是要在系统源码中编译运行,在Androidstudio 中引入这个jar包没问题但放到系统源码编译就出现了找不到

    opened by huanyuan 0
  • W/System.err: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)

    W/System.err: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)

    全局使用一个sqlite public static LiteOrm getOrmInstance(){ if (liteOrm == null) { synchronized (OrmUtil.class){ if(liteOrm==null){ liteOrm = LiteOrm.newSingleInstance(MyApplication.getAppContext(), "liteorm.db"); } } } liteOrm.setDebugged(true); // open the log return liteOrm; } 出现这种问题java.lang.IllegalStateException: attempt to re-open an already-closed object: 怎么解决啊 作者,有时间看下

    opened by forTribeforXuanmo 0
Owner
马天宇
welcome to http://litesuits.com
马天宇
A blazing fast, powerful, and very simple ORM android database library that writes database code for you.

README DBFlow is fast, efficient, and feature-rich Kotlin database library built on SQLite for Android. DBFlow utilizes annotation processing to gener

Andrew Grosner 4.9k Dec 30, 2022
greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases.

Check out ObjectBox Check out our new mobile database ObjectBox (GitHub repo). ObjectBox is a superfast object-oriented database with strong relation

Markus Junginger 12.6k Jan 3, 2023
An Android library that makes developers use SQLite database extremely easy.

LitePal for Android 中文文档 LitePal is an open source Android library that allows developers to use SQLite database extremely easy. You can finish most o

Lin Guo 7.9k Dec 31, 2022
An Android library that makes developers use SQLite database extremely easy.

LitePal for Android 中文文档 LitePal is an open source Android library that allows developers to use SQLite database extremely easy. You can finish most o

Lin Guo 7.9k Jan 4, 2023
AndroidQuery is an Android ORM for SQLite and ContentProvider which focuses on easy of use and performances thanks to annotation processing and code generation

WARNING: now that Room is out, I no longer maintain that library. If you need a library to easy access to default android ContentProvider, I would may

Frédéric Julian 19 Dec 11, 2021
lightweight and minimalist ORM for Java/Android. works with SQLite & MySQL. (not actively maintained)

Description ORMAN is an minimalistic and lightweight ORM framework for Java which can handle your common database usage without writing SQL and strugg

Ahmet Alp Balkan 246 Nov 20, 2022
lightweight and minimalist ORM for Java/Android. works with SQLite & MySQL. (not actively maintained)

Description ORMAN is an minimalistic and lightweight ORM framework for Java which can handle your common database usage without writing SQL and strugg

Ahmet Alp Balkan 246 Nov 20, 2022
A simple ToDo app to demonstrate the use of Realm Database in android to perform some basic CRUD operations like Create, Update and Delete.

Creating a Realm Model Class @RealmClass open class Note() : RealmModel { @PrimaryKey var id: String = "" @Required var title: String

Joel Kanyi 15 Dec 18, 2022
a 3d database ORM experiment. (used in two commercial projects)

Android-TriOrm a 3d database ORM experiment for Android. (used in two commercial projects). based around small tables concept and JVM Serialization. H

Tomer Shalev 19 Nov 24, 2021
ORMDroid is a simple ORM persistence framework for your Android applications.

ORMDroid is a simple ORM persistence framework for your Android applications, providing an easy to use, almost-zero-config way to handle model persist

Ross Bamford 87 Nov 10, 2022
SquiDB is a SQLite database library for Android and iOS

Most ongoing development is currently taking place on the dev_4.0 branch. Click here to see the latest changes and try out the 4.0 beta. Introducing S

Yahoo 1.3k Dec 26, 2022
Compile time processed, annotation driven, no reflection SQLite database layer for Android

SqliteMagic Simple yet powerful SQLite database layer for Android that makes database handling feel like magic. Overview: Simple, intuitive & typesafe

Siim Kinks 118 Dec 22, 2022
android 数据库框架,sqlite database

DBExecutor 主要的功能 1.使用了读写锁,支持多线程操作数据。 2.支持事务 3.支持ORM 4.缓存Sql,缓存表结构 这个类库主要用于android 数据库操作。 始终围绕着一个类对应一个表的概念。 只要创建一个实体类,就不用当心它怎么存储在数据库中,不用重新写增删改查的代码。基本的功

null 77 May 31, 2021
Realm is a mobile database: a replacement for SQLite & ORMs

Realm is a mobile database that runs directly inside phones, tablets or wearables. This repository holds the source code for the Java version of Realm

Realm 11.4k Jan 2, 2023
Android Crud com Img

Android_Crud_Image Projeto que envolve todo o Processo de desenvolver uma aplicaçao com os principios basicos de entradas e saidas de dados ! ✓Add/Upd

Taticalzero 1 Oct 27, 2021
Android ORM

Shillelagh Shillelagh is an sqlite library. It was built to make life easier. The entire library was built around simplicity when using sqlite in Andr

Andrew Reitz 49 Sep 11, 2020
Compile-time active record ORM for Android

Ollie Compile-time active record ORM for Android. Multiple mapping methods. SQLiteDatabase-like interface (QueryUtils.java). Lightweight query builder

Michael Pardo 423 Dec 30, 2022
An ORM for Android with type-safety and painless smart migrations

Android Orma Orma is a ORM (Object-Relation Mapper) for Android SQLiteDatabase. Because it generates helper classes at compile time with annotation pr

The Maskarade project 440 Nov 25, 2022
Performance comparison of Android ORM Frameworks

Performance comparison of Android ORM Frameworks At the moment there are a lot of ORM-libraries for the Android OS. We reviewed the most popular ones

Alexey Zatsepin 328 Dec 21, 2022