概述:LitePal 是一个开源 Android 数据库框架,它采用了对象关系映射的模式(ORM),将我们开发常用的数据库功能进行了封装,即使你不懂SQL语句,也可以对数据库完成增删改查等操作。
问题:上文提到了对象关系映射的模式(ORM), 那这到底是啥呢?
安卓开发使用的是面向对象的编程语言,而使用的数据库却是关系型数据库,那么面向对象的语言和面向关系的数据库之间建立的一种映射关系,就是对象关系映射。这种模式可以让我们用面向对象的思维来操作数据库,可以不用SQL语句进行数据库操作,这就是它的强大之处。
下面将会讲解LitePal框架的配置和使用LitePal对数据库的增删改查功能。
一:配置LitePal。
步骤:
1.下载LitePal框架,地址为:https://github.com/LitePalFramework/LitePal
点击clone or download按钮,下载zip文件,文件只有6M左右。
2.将zip文件解压后,在LitePal-master\downloads目录下有很多以 .jar 结尾的文件,将版本号最大的 src.jar 文件拷贝添加到AndroidStudio 下 app/libs目录中。然后点击添加的 jar 文件, 右键——>Add As Library——>ok。这样 litePal 数据库框架就添加到了你得项目中了。
3.配置litepal.xml文件。
在AndroidStudio 中右击 app/src/main 目录——>New——>Directory,创建一个 assets 目录,然后右击 assets 目录——>New——>File,创建litepal.xml文件,加上后缀。
4.litepal.xml文件是空的,需要编辑如下内容。
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="1"></version>
<list>
</list>
</litepal>
上面代码中<list>属性里面暂时为空,这是用来将类添加到映射模式中去的,后面会配置。上面 dbname 表示数据库名字,virsion 表示数据库版本号,这里写1就可以。
5.由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了。配置代码在第二行。
<application
android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
LitePal 配置到这里就完成了。下面讲解创建数据库。
二:创建数据库。
LitePal 是使用面向对象的思维方式来操作数据库的,创建数据库方法就是定义类,下面定义一个Book类,在数据库中就是Book表了。
1.定义Book类。并且写上所有成员变量的setter和getter方法。
(自动添加setter和getter方法为:在空白区域单击右键——>Generate——>选择setter和getter——>按住shift键选择需要设置的成员变量。)
package com.example.shinelon.litepaltest;
import org.litepal.crud.LitePalSupport;
public class Book extends LitePalSupport {
private int id;
private String name;
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
上面的 Book 类继承自 LitePalSupport。注意不是继承 DataSupport,在LitePal2.0.0 版本时弃用DataSupport,改为使用LitePal和LitePalSupport。如下:
2.修改 litepal.xml 文件。即在<list>属性里面加上需要映射的类,我们这里就是Book类了。需要注意的是一定要根据自己的包名来写路径。我这里是 com.example.shinelon.litepaltest.Book。
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="1"></version>
<list>
<mapping class="com.example.shinelon.litepaltest.Book"></mapping>
</list>
</litepal>
3.调用LitePal.getDatabase(); 语句完成数据库的创建。
LitePal.getDatabase();
这样就成功创建了一个数据库了,下面就到了最核心的部分了,对数据库的增删改查。
三:数据库的增删改查。
1.使用 LitePal 添加数据。
使用 Book 类对象调用各成员变量的setter方法添加数据,最后再调用 save() 方法。
Book book = new Book();
book.setId(1);
book.setName("tan");
book.setPrice(10);
book.save();
2.使用 LitePal 更新数据。
Book book1 = new Book();
book1.setPrice(20);
book1.updateAll("name=?","math");
代码的执行的操作是,将所有 name = math 的书的价格更改为 20。其中 ?号是一个占位符,通过后面的参数来设置。
3.使用 LitePal 删除数据。
LitePal.deleteAll(Book.class,"name=?","English");
代码执行的操作是把所有 name = English 的书删除。
4.使用 LitePal 查询数据。
查询数据稍微复杂一点,但也不难。在SQL语言中查询也是最重要,最难的知识。LitePal中提供了如下方法供你任意组合,来达到你的查询目的。首先第一步你需要定义一个 List<Book> books 集合 用来存放查询的结果。
4.1.findAll() 方法,查询表中所欲数据。
List<Book> books = LitePal.findAll(Book.class);
4.2.findFirst() 方法和findLast()方法。查询第一条数据和最后一条数据。
//由于只有一条数据,所以不需要使用集合
Book firstBook = LitePal.findFirst(Book.class);
//同理查询最后一条数据
Book lastBook = LitePal.findLast(Book.class);
4.3.select() 方法,用于指定查询哪几列的数据。
List<Book> books = LitePal.select("id","name","price").find(Book.class);
4.4where() 方法,用于指定查询的约束条件。下面查询 price 大于 10 的数据。
List<Book> books = LitePal.where("price>?","10").find(Book.class);
4.5.order() 方法,用于指定对结果的排序方式。下面按 price 降序排序。
List<Book> books = LitePal.order("price desc").find(Book.class);
4.6.limit() 方法,用于指定查询结果的数量。下面查询只会显示前面3个数据。
List<Book> books = LitePal.limit(3).find(Book.class);
4.7offset() 方法,用于指定查询的偏移量。下面设置偏移量为2,即显示第三条数据和第三条数据以后的数据。
List<Book> books = LitePal.offset(2).find(Book.class);
4.8.最后就是这些方法的任意组合了,使用也很方便。
List<Book> books1 = LitePal.select("id","name","price")
.where("price>?","5")
.order("price")
.limit(10)
.offset(2)
.find(Book.class);
上面代码表示:查询 Book 表第3到第13条满足 price 大于 10 这个条件的 id ,name, price 这三列,并将这些数据按价格升序排序。
好吧,关于LitePal 的配置和对数据库的操作到这就结束了,LitePal操作数据库比文件存储和SharedPreferences存储要好,它适合存储较为复杂的数据。希望能帮助到大家。最后截一张图,有关 LitePal 内部 id 的问题。