LitePal

LitePal

最新dependencies

compile 'org.litepal.android:core:1.6.0'

配置litepal.xml

在main目录下创建assets文件夹,在assets目录下创建litepal.xml 内容如下:




    
    

    
    
   
 
    
        
    

    
    

    
    

初始化

由于操作数据库时需要用到Context,所以在自定义Application的oncreat()中初始化数据库LitePal.initialize(this)

创建表

/**
 * 存储已读未读的id
 */
data class NoticeId(var numId: Int) : DataSupport()

LitePal会在每个表中自动生成一个id列,毕竟每张表都一定要有主键的,所以当存储一些含有id的数据,并且要存储的id和自增的不一样的时候要谨慎,要把id存到另外的列中,比如numId等,总之自己创建的表(bean对象)尽量不要含有id.
现在只要你对数据库有任何的操作,NoticeId表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:

QLiteDatabase db = Connector.getDatabase();  

为了方便可以在LitePal.initialize(this)后面加上Connector.getDatabase() 这样就创建了数据库中的表

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        LitePal.initialize(this)
        Connector.getDatabase()
    }

升级数据

有段时间项目用到数据库存储一些数据,看了好多结果还是感觉郭神的LitePal最好用,下面是1.4.1版本的总结及用法
http://mp.weixin.qq.com/s/5FMsDWq7mj55iBxpLCNTwg

下面我将继续书写一下LitePal 1.5.0的一些更新的内容

1.异步操作数据库

Android官方是建议将所有的数据库操作都放在子线程中进行的。所以这一次支持异步操作数据库是LitePal 1.5.0版本的核心功能.

  • LitePal中所有的CRUD方法都加入了一个Async的副本方法。原来的有find()方法,现在多出一个findAsycn()方法,原来有save()方法,现在多出saveAsync()方法。如果想要进行异步数据库操作的时候,调用原API相对应的Async副本方法就可以了。
  • 由于是异步操作,那异步操作的结果就只能依靠回调来完成。所以,每一个Async副本方法的后面添加了一个listen()方法,专门用于监听异步操作的结果。
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.saveAsync().listen(new SaveCallback() {
    @Override
    public void onFinish(boolean success) {
    }
});

这里调用了findAll()方法的Async副本,也就是findAllAsyc()方法,并串接了一个listen()方法用于监听查询结果。需要注意的是,查询结果是使用泛型的方式回调到onFinish()方法中的,也就是说开发人员还需要自己做一次向下转型操作才行。回调到onFinish()方法之后都会切回到主线程.

2.不存在就存储,已存在就更新

LitePal 1.5.0版本中新增了一个saveOrUpdate()方法,专门用来处理这种不存在就存储,已存在就更新的需求。
使用saveOrUpdate()方法存储,有就更新 没有就存:

Person p = new Person();
p.setName("小明");
p.setAge(16);
p.saveOrUpdate("name=?", p.getName());

调用saveOrUpdate()方法后,LitePal内部会自动判断,如果表中已经存在小明这条记录了,就会自动更新,如果不存在的话,就会自动插入。

当然,这个新增的saveOrUpdate()方法也有它的Async副本。如果你想异步进行saveOrUpdate操作,那么只需要这样写就可以了:

Person p = new Person();
p.setName("小明");
p.setAge(16);
p.saveOrUpdateAsync("name=?", p.getName())
.listen(new SaveCallback() {
    @Override
    public void onFinish(boolean success) {
    }
});

好了,LitePal 1.5.0版本中最主要的两大新功能就介绍的差不多了

3.如何升级

升级方式一如既往的简单,如果你使用的是Android Studio,只需要在build.gradle中修改一下配置即可:

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

1.5.0版本中的所有的功能都是向下兼容的,因此你的升级不用付出任何成本。

kotlin存储对象

litepal.xml部分不变



    
    
    
        
    
    

创建一个kotlin数据bean并继承DataSupport,如果不想创建对象的时候都初始化一遍,直接在下面写成:(var name: String = "",var age: Int = 0)即可

data class Student(var name: String,var age: Int) : DataSupport()
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        //普通存储
        Student("张三", 27).save()
        val toJson = Gson().toJson(Student("王五", 78))
        //saveOrUpdate:没有就存储,有就直接覆盖
        Gson().fromJson(toJson, Student::class.java).saveOrUpdate("name=?", "王五")
    }
}
LitePal_第1张图片

阅读原文

你可能感兴趣的:(LitePal)