LitePal:一开源的android数据库框架

在写项目的时候遇到了数据库的相关操作,Android 提供的数据库的创建和使用感觉有点小复杂,想着有没有比较好的轮子–框架或者工具类可以使用,结果发现了litepal,一个类似于hibernate,面向对象的方式对数据库进行开发。在万物皆对象的世界,使用起来觉得太爽了。
LitePal是一款开源的android数据库框架(https://github.com/LitePalFramework/LitePal),它采用了对象关系映射(ORM)的模型,把对数据库的操作转换为对对象的操作。
Litepal的使用步骤:
1.Android studio中在gradle文件中添加:
[java] view plain copy

dependencies {  
    compile 'org.litepal.android:core:1.3.1'  
}  

也可以下载jar包,添加到项目中。下载地址同上面的github地址。
2.在assets目录下新建一个litepal.xml文件,该文件是配置文件,litpal根据该文件反射得到相关的信息。
[html] view plain copy

  
  
    
      


[html] view plain copy

      

我的项目中创建了一张表。
3.配置LitepalApplication,原因是数据库的操作需要context,配置了LitepalApplication,就不使用context。
配置如下:

看了一下LitePalApplication的源码,继承这个Application可以使用个tConext获得全局的context,源码如下:
[java] view plain copy

      /** 
 * Get the global application context. 
 *  
 * @return Application context. 
 * @throws org.litepal.exceptions.GlobalException 
 */  
public static Context getContext() {  
    if (sContext == null) {  
        throw new GlobalException(GlobalException.APPLICATION_CONTEXT_IS_NULL);  
    }  
    return sContext;  
}  

如果你的application还有一层继承关系,比如
public class MyOwnApplication extends BaseApplication { … }
这个时候可以使用下面的方法去注册:
public class MyOwnApplication extends BaseApplication { @Override public void onCreate() { super.onCreate(); LitePalApplication.initialize(this);
} … }
4.建表,新建一个类继承DataSupport,该DataSupport是litepal中的。如下是我的项目中的:
[java] view plain copy

package com.wjustudio.phoneManager.javaBean;  
  
import org.litepal.crud.DataSupport;  
  
/** 
 * songwenju on 16-4-20 : 12 : 23. 
 * 邮箱:[email protected] 
 */  
public class BlackNumInfo extends DataSupport{  
    private String blackNum;  
    private int mode;  
  
    public String getBlackNum() {  
        return blackNum;  
    }  
  
    public void setBlackNum(String blackNum) {  
        this.blackNum = blackNum;  
    }  
  
    public int getMode() {  
        return mode;  
    }  
  
    public void setMode(int mode) {  
        this.mode = mode;  
    }  
  
    public BlackNumInfo() {  
    }  
  
    @Override  
    public String toString() {  
        return "BlackNumInfo{" +  
                "blackNum='" + blackNum + '\'' +  
                ", mode=" + mode +  
                '}';  
    }  
}  

数据库的升级,就在类里面添加一些字段,修改之前配置的xml的版本号。
5.对数据库表的curd操作
1) 保存数据,调用对象的save方法
2)修改数据,分情况:如果知道id的话先使用find,再使用save。github给的例子是这样的:
[java] view plain copy

Album albumToUpdate = DataSupport.find(Album.class, 1);  
albumToUpdate.setPrice(20.99f); // raise the price  
albumToUpdate.save();  

如果想修改全部的数据:
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price albumToUpdate.update(id);
或者是有一定的条件的数据,这里面虽然也用updateAll,更新满足条件的所有数据,如果条件是主键或者是唯一列相关的,就相当于修改了一条数据。
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price albumToUpdate.updateAll(“name = ?”, “album”);

3)删除
知道Id:
DataSupport.delete(Song.class, id);
删除满足条件的数据:
DataSupport.deleteAll(Song.class, “duration > ?” , “350”);
4)查询数据
知道Id:
Song song = DataSupport.find(Song.class, id);
查询全部:
List allSongs = DataSupport.findAll(Song.class);
查询满足条件的:
List songs = DataSupport.where(“name like ?”, “song%”).order(“duration”).find(Song.class);

我的项目用的是MVP的设计模式,下面附上代码:

[java] view plain copy

package com.wjustudio.phoneManager.biz;  
  
import com.wjustudio.phoneManager.javaBean.BlackNumInfo;  
  
import java.util.List;  
  
/** 
 * songwenju on 16-4-20 : 12 : 27. 
 * 邮箱:[email protected] 
 */  
public interface IBlackNumBiz {  
    /** 
     * 获得所有的黑名单 
     * @return 
     */  
    List getAllBlackNum();  
  
    /** 
     * 添加一个黑名单 
     * @param blackNumInfo 
     */  
    void insertBlackNum(BlackNumInfo blackNumInfo);  
  
    /** 
     * 通过电话号码获得一个blackNumInfo 
     * @param blackNum 
     */  
    BlackNumInfo getBlackNumInfo(String blackNum);  
  
    /** 
     * 删除黑名单信息 
     * @param blackNumInfo 
     */  
    void deleteBlackNum(BlackNumInfo blackNumInfo);  
  
    /** 
     * 升级黑名单信息 
     * @param blackNumInfo 
     */  
    void updateBlackNum(BlackNumInfo blackNumInfo);  
  
    /** 
     * 黑名单信息是否存在 
     * @param blackNum 
     * @return 
     */  
    boolean isExist(String blackNum);  
  
}  

[java] view plain copy

package com.wjustudio.phoneManager.biz;  
  
import android.content.ContentValues;  
  
import com.wjustudio.phoneManager.javaBean.BlackNumInfo;  
  
import org.litepal.crud.DataSupport;  
  
import java.util.List;  
  
/** 
 * songwenju on 16-4-20 : 13 : 23. 
 * 邮箱:[email protected] 
 */  
public class BlackNumBizImpl implements IBlackNumBiz {  
    public static final int BLACK_NUM_PHONE = 1;  
    public static final int BLACK_NUM_SMS = 2;  
    public static final int BLACK_NUM_ALL = 3;  
  
  
    @Override  
    public List getAllBlackNum() {  
        return DataSupport.findAll(BlackNumInfo.class);  
    }  
  
    @Override  
    public void insertBlackNum(BlackNumInfo blackNumInfo) {  
        blackNumInfo.saveThrows();  
    }  
  
    @Override  
    public BlackNumInfo getBlackNumInfo(String blackNum) {  
        List blackNumInfos = DataSupport.where("blackNum = ?", blackNum).find(BlackNumInfo.class);  
  
        return blackNumInfos.get(0);  
    }  
  
    @Override  
    public void deleteBlackNum(BlackNumInfo blackNumInfo) {  
        if (!blackNumInfo.isSaved()) {  
            blackNumInfo.save();  
        }  
  
        blackNumInfo.delete();  
    }  
  
    @Override  
    public void updateBlackNum(BlackNumInfo blackNumInfo) {  
        ContentValues values = new ContentValues();  
        values.put("mode", blackNumInfo.getMode());  
        DataSupport.updateAll(BlackNumInfo.class, values, "blackNum = ?", blackNumInfo.getBlackNum());  
    }  
  
    @Override  
    public boolean isExist(String blackNum) {  
        List blackNumInfos = DataSupport.where("blackNum = ?", blackNum).find(BlackNumInfo.class);  
  
        return blackNumInfos !=null && blackNumInfos.size()> 0;  
    }  
  
  
}  

这样在项目中可以使用BlackNumBizImpl的对象对数据库进行增删改查了。

你可能感兴趣的:(LitePal:一开源的android数据库框架)