LitePal是一款开源的Android数据库框架,其采用了对象关系映射(ORM)模式,对平常开发常用到的一些数据库功能进行封装,使得可以不用编写一条SQL语句就可以完成各种建表和增删改查操作。
关于ORM的理解:我们使用的编程语言是面向对象语言,使用的数据库是关系型数据库。将面向对象的语言和关系型数据库之间建立一种映射关系,这就是对象关系映射!
PS:本文配置只写出需要配置的内容,关于其他与配置无关的内容先删除了,避免杂乱,方便阅读。
要使用LitePal需要先配置:
①添加依赖:打开文件 build.gradle(Module:app) >
dependencies {
compile 'org.litepal.android:core:1.4.1'
}
②新建文件夹: app > src > main右键 > New > Directory > assets
③新建XML文件:assets右键 > New > File > litepal.xml
④编辑XML文件:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"/> //数据库名
<version value="1"/> //数据库版本
<list> //映射模型(用于映射表)
</list>
</litepal>
⑤编辑 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest >
<application
android:name="org.litepal.LitePalApplication" >
</application>
</manifest>
至此,配置全部完成,LitePal所有功能可以正常工作。
————————————————————————————————————————————
操作数据库
1.创建一个JavaBean(万能类~~~或者说是模型类)
package com.example.mjon.myapplication;
public class Book {
private int id;
private String name;
private String author;
private double price;
private int pages;
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 String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
}
以上内容非常好理解:类名 即 表名 ; 字段名 即 列名 ; ← 体现关系映射
2.将 JavaBean 添加到映射模型中 :
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"/> //数据库名
<version value="1"/> //数据库版本
<list> //映射模型
<mapping class="com.example.mjon.myapplication.Book"/>
</list>
</litepal>
映射完成,只要进行任意一次数据库操作,数据库就会被创建出来。
3.数据库操作:
①创建数据库、数据表:
LitePal.getDatabase();
根据实际需求,可以放在Activity中的onCreate()方法中,让数据库和表在程序启动时就被创建出来
②修改表、添加表:
修改表:直接修改表所对应 JavaBean 中的字段名 ,然后把映射配置中的版本号+1即可;
添加表:创建 JavaBean,添加字段名、Get和Set, 然后将完整类名添加到映射模型当中,同样地,把映射配置中的版本号+1即可;
PS:修改表、添加表相较SQLiteDatabases操作方式是不是特别简单~而且,最重要的是表中的数据不会丢失~~SQLiteDatabases方式的话~厄,要写一大堆逻辑。
使用LitePal进行CRUD操作时,模型类需要继承结构 extends DataSupport;
继承的作用就是调用 DataSupport 中封装的一些方法,才能对数据库进行操作;
【CRUD:创建、查询、更新、删除~】
③添加数据:
先创建模型类的实例化对象,然后调用类中set方法插入数据,再使用sava()方法保存~
Book book = new Book(); //实例化对象
book.setName("数据结构");
book.setAuthor("哥白尼");
book.setPrice(43.20);
book.setPages(420);
book.setPress("人民邮电出版社");
book.save(); //保存
④更新数据:
Ⅰ、更新自定义值
先创建模型类的实例化对象,然后调用类中set方法更新数据,再使用updateAll()方法执行更新;
updateAll()中第一个字符串参数为约束条件,第二个参数为约束条件的具体值;
Book book = new Book();
book.setPress("清华大学出版社");
book.setAuthor("牛顿");
book.updateAll("name = ? and pages = ?", "数据结构", "420"); //第一个""内容为列名 = ? 第二个""内容为列名对应的值
Ⅱ、更新默认值(不可直接使用set方式)
int的默认值是0,String的默认值是null,boolean的默认值是false,所以,当你想直接设置一个列的值为0的时候,使用set是不起作用的,而是要使用setToDefault(),其参数为列名;
Book book = new Book();
book.setToDefault("pages");
book.updateAll("author = ?", "哥白尼");
⑤删除数据:
非常好理解,第一个参数为JavaBean,第二个参数为约束条件,第三个参数为约束条件的具体值;
DataSupport.deleteAll(Book.class, "author = ?", "牛顿");
⑥查询数据(重点!!!因为其提供的API很多):
Ⅰ、查询所有数据
取出所有数据只要第一行就够了,它会返回一个已保存的List对象;for之后的内容是取出数据而已;
List<Book> list = DataSupport.findAll(Book.class);
for (Book book : list) {
sb.append(book.getId() +
"_" + book.getName() +
"_" + book.getAuthor() +
"_" + book.getPrice() +
"_" + book.getPages() +
"_" + book.getPress());
}
Ⅱ、查询第一条数据或最后一条数据(参数直接传入JavaBean就行了)
Book first = DataSupport.findFirst(Book.class);
Book last = DataSupport.findLast(Book.class);
Ⅲ、查询指定列的数据
select() 传入的参数是列名,传多少个看你具体需求; find()传入JavaBean,对应指哪一张表;
List<Book> books = DataSupport.select("author","press").find(Book.class);
Ⅳ、查询约束条件的数据
where() 传入的第一个参数是约束条件,之后的参数是约束条件的具体值; find()不再赘述~
List<Book> books = DataSupport.where("pages > ?", "400").find(Book.class);
Ⅴ、查询数据的排序方式
order() 传入的参数为字符串,字段名 空格 排序方式(asc 或者desc); find()不再赘述~
List<Book> books = DataSupport.order("id desc").find(Book.class);
Ⅵ、查询结果数量
limit() 传入的参数只有一个int,就是前多少条数据; find()不再赘述~
List<Book> books = DataSupport.limit(3).find(Book.class);
Ⅶ、查询结果偏移量(2、3、4)
limit()同上~~offset()也是传入int,指从第几条数据开始; find()不再赘述~
List<Book> books = DataSupport.limit(3).offset(1).find(Book.class);
Ⅷ、综合使用
根据实际需求使用不同的约束方法去查询数据,不再赘述~
List<Book> list = DataSupport.select("author", "press")
.where("pages > ?", "400")
.order("press desc")
.limit(6)
.offset(2)
.find(Book.class);
Ⅸ、如果以上查询API都无法满足你的需求,那么LitePal还支持原生态的SQL语句
Cursor cursor = DataSupport.findBySQL("select * from Book where pages > ? and author = ?", "400", "牛顿");
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
String press = cursor.getString(cursor.getColumnIndex("press"));
}while(cursor.moveToNext());
}
总的来说~LitePal操作数据库的方式简直不要太简便了~因为它提供了很多API,所以我们可以非常简单的对数据库进行基本操作。
附上LitePal:LitePal:GitHub