Android 数据库操作 LiteOrm框架的使用

LiteOrm是一个速度快、小巧、强大的android ORM框架类库,让你一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。

官方github: https://github.com/litesuits/android-lite-orm
本篇参考:
//www.greatytc.com/p/0d72226ef434(好理解)
https://my.oschina.net/u/2320057/blog/816059(联级多表操作)
LiteOrm基本使用:
第一步:导入
将github下载的jar包复制到项目的app中的libs文件夹下:


然后:右键选中jar包,点击:add as library,点击ok


现在就可以开始使用了
使用步骤:
1.建立LiteOrmMannger.class作为统一管理一个app的管理数据库(有比较好用的固定格式,每个app只需要改不同的数据库名称)
这里给出笔者现在使用的LiteOrmMannger.class(设计模式:单例模式)

package safetytaxfree.de.ecommerceandroid.LiteOrmTest;

import android.content.Context;
import android.text.TextUtils;

import com.litesuits.orm.LiteOrm;
import com.litesuits.orm.db.DataBaseConfig;
import com.litesuits.orm.db.assit.QueryBuilder;
import com.litesuits.orm.db.assit.WhereBuilder;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * Created by jzhu on 2016/11/9.
 */

public class LiteOrmManager {

    private static volatile LiteOrmManager sInstance;

    private static LiteOrm liteOrm;

    public LiteOrmManager(Context context) {
        if (liteOrm == null) {
            //这里修改数据库名 一般一个项目对应一个数据库 一个数据库对应一个manager
            DataBaseConfig config = new DataBaseConfig(context, "smzcpsg.db");
            config.debugged = true; // open the log
            config.dbVersion = 1; // set database version
            liteOrm = LiteOrm.newSingleInstance(config);

            /*单表查询 多表是:liteOrm = LiteOrm.newCascadeInstance(config);
             *
              * 也有两者共同:
              * LiteOrm liteOrm = LiteOrm.newCascadeInstance(this, "cascade.db");
                liteOrm.cascade().save(user);//级联操作:保存[当前对象],以及该对象所有的[关联对象]以及它们的[映射关系]。
                liteOrm.single().save(user);//非级联操作:仅保存[当前对象],高效率。
              * */

        }
        liteOrm.setDebugged(true); // open the log
    }

    public static void deleteDatabase() {
        liteOrm.deleteDatabase();
        liteOrm.openOrCreateDatabase();
    }


    public static LiteOrmManager getInstance(Context context) {
        if (null == sInstance) {
            synchronized (LiteOrmManager.class) {
                if (null == sInstance) {
                    sInstance = new LiteOrmManager(context);
                }
            }
        }
        return sInstance;
    }



    //    public static DatabaseManager getInstance() {
    //        return ourInstance;
    //    }


//    public LiteOrm getCascadeInstance() {
//        return liteOrm.cascade();
//    }

    public LiteOrm getSingleInstance() {
        return liteOrm.single();
    }

    public <T> int save(Collection<T> list, Class<T> clazz) {//清空并保存多个一个列表的对象,以某个model.class保存
        LiteOrm lOrm = liteOrm.single();
        lOrm.deleteAll(clazz);
        return lOrm.save(list);
    }

    public <T> int save(Collection<T> list) {//保存多个一个列表的对象
        LiteOrm lOrm = liteOrm.single();
        return lOrm.save(list);
    }

    public <T> ArrayList<T> query(Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.query(clazz);
    }

    public <T> int delete(T t) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.delete(t);
    }

    public <T> int update(T t) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.update(t);
    }

    public <T> long save(T t) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.save(t);
    }

    public <T> int delete(Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.delete(clazz);
    }

    public <T> int deleteAll(Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.deleteAll(clazz);
    }

    public long queryCount(QueryBuilder var1) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.queryCount(var1);
    }

    public <T> int deleteByWhereBuilder(Class<T> clazz, String column, Object value) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.delete(new WhereBuilder(clazz).equals(column, value));
    }

    public <T> int deleteByWhereBuilder(Class<T> clazz, String column, Object value, String column1, Object value1) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.delete(new WhereBuilder(clazz).equals(column, value).and().equals(column1, value1));
    }

    public <T> int deleteWhereBuilderByAndEquals(Map<String, Object> whereArgs, Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        WhereBuilder builder = new WhereBuilder(clazz);
        for (Map.Entry<String, Object> entry : whereArgs.entrySet()) {
            builder.andEquals(entry.getKey(), entry.getValue());
        }
        return lOrm.delete(builder);
    }

    public <T> ArrayList<T> queryBuilderByAppendAndEqual(Map<String, Object> whereArgs, String ascKey, Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        QueryBuilder builder = new QueryBuilder(clazz);
        for (Map.Entry<String, Object> entry : whereArgs.entrySet()) {
            builder.whereAppendAnd().whereEquals(entry.getKey(), entry.getValue());
        }
        if (!TextUtils.isEmpty(ascKey))
            builder.appendOrderDescBy(ascKey);
        return lOrm.query(builder);
    }

    public <T> long saveObject(T t, Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        lOrm.delete(clazz);
        return save(t);
    }

    public <T extends Object> T queryObject(Class<T> clazz) {
        ArrayList<T> list = query(clazz);
        if (list != null && list.size() > 0) {
            return list.get(0);
        }
        return null;
    }

    public <T> ArrayList<T> queryByEqual(String column, Object keyword, Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.query(new QueryBuilder<>(clazz).whereEquals(column, keyword).appendOrderDescBy("id"));
    }

    public <T extends Object> T queryObjectByEqual(String name, Object keyword, Class<T> clazz) {
        ArrayList<T> list = queryByEqual(name, keyword, clazz);
        if (list != null && list.size() > 0) {
            return list.get(0);
        } else {
            return null;
        }
    }

    public <T> ArrayList<T> queryByEqual(String column, Object keyword, Class<T> clazz, boolean asc, String ascKey) {
        LiteOrm lOrm = liteOrm.single();
        if (TextUtils.isEmpty(ascKey)) {
            return lOrm.query(new QueryBuilder<>(clazz).whereEquals(column, keyword));
        }
        if (asc) {
            return lOrm.query(new QueryBuilder<>(clazz).whereEquals(column, keyword).appendOrderAscBy(ascKey));
        } else {
            return lOrm.query(new QueryBuilder<>(clazz).whereEquals(column, keyword).appendOrderDescBy(ascKey));
        }
    }


    public <T> ArrayList<T> queryByEqual(String column, Object keyword, String column1, Object keyword1, Class<T> clazz) {
        LiteOrm lOrm = liteOrm.single();
        return lOrm.query(new QueryBuilder<>(clazz).where(column + "=?", keyword).whereAnd(column1 + "=?", keyword1));
    }


    //拓展manager

    /**
     * 插入一条记录
     *
     * @param t
     */
    public <T> long insert(T t) {
        return liteOrm.save(t);
    }

    /**
     * 插入所有记录
     *
     * @param list
     */
    public <T> void insertAll(List<T> list) {
        liteOrm.save(list);
    }

    /**
     * 查询所有
     *
     * @param cla
     * @return
     */
    public <T> List<T> getQueryAll(Class<T> cla) {
        return liteOrm.query(cla);
    }

    /**
     * 查询  某字段 等于 Value的值
     *
     * @param cla
     * @param field
     * @param value
     * @return
     */
    public <T> List<T> getQueryByWhere(Class<T> cla, String field, String[] value) {
        return liteOrm.<T>query(new QueryBuilder(cla).where(field + "=?", value));
    }

    /**
     * 查询  某字段 等于 Value的值  可以指定从1-20,就是分页
     *
     * @param cla
     * @param field
     * @param value
     * @param start
     * @param length
     * @return
     */
    public <T> List<T> getQueryByWhereLength(Class<T> cla, String field, String[] value, int start, int length) {
        return liteOrm.<T>query(new QueryBuilder(cla).where(field + "=?", value).limit(start, length));
    }


    /**
     * 删除集合中的数据
     *
     * @param list
     * @param <T>
     */
    public <T> void deleteList(List<T> list) {
        liteOrm.delete(list);
    }


}

2.建立存入数据库的model类
注意:此处的model是存入数据库的数据模型和retrofit请求中的实体类Bean不是同一个东西,比如retrofit请求到的实体为UserBean,要存放用户信息也需要重新建立UserModel
2.1确定表名
@Table设置表名
2.2确定主键 一般就是id
@PrimaryKey(AssignType.AUTO_INCREMENT)
@Column("id")
private long id;
2.3确定列名 可以有多个
@Column("searchKey")
private String searchKey;

package safetytaxfree.de.ecommerceandroid.LiteOrmTest;

import com.litesuits.orm.db.annotation.Column;
import com.litesuits.orm.db.annotation.PrimaryKey;
import com.litesuits.orm.db.annotation.Table;
import com.litesuits.orm.db.enums.AssignType;

@Table("user")
public class UserModel {

    @PrimaryKey(AssignType.AUTO_INCREMENT)
    @Column("id")
    private long id;

    @Column("firstName")
    private String firstName;
    @Column("lastName")
    private String lastName;
    @Column("passport")
    private String passport;
    @Column("profile")
    private String profile;
    @Column("shopUuid")
    private String shopUuid;
    @Column("token")
    private String token;
    @Column("uuid")
    private String uuid;

    public long getId() {
        return id;
    }



    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPassport() {
        return passport;
    }

    public void setPassport(String passport) {
        this.passport = passport;
    }

    public String getProfile() {
        return profile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public String getShopUuid() {
        return shopUuid;
    }

    public void setShopUuid(String shopUuid) {
        this.shopUuid = shopUuid;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
}

以上为最基础的设置 其他注解使用方法 以后补充
3.在TestActivity中导入LiteOrmMannger 不需要建立对象 可以直接使用:
LiteOrmMannger.getInstance(this).save(user1);

    void saveinfo(Take take){//此处的Take就是retrofit请求得到的user实体对象
        UserModel user1=new UserModel();
        user1.setUuid(take.getContent().getUuid());
        user1.setFirstName(take.getContent().getFirstName());
        user1.setLastName(take.getContent().getLastName());
        user1.setShopUuid(take.getContent().getShopUuid());
        user1.setToken(take.getContent().getToken());
        LiteOrmManager.getInstance(this).save(user1);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容