《第一行代码》阅读笔记(二十二)——LitePal操作数据库
这里郭神又是一顿称赞,反正强无敌就行了。笔者也咨询了一些大神、专家。对于初学者来说这个框架不仅十分方便,足以应付需求,而且郭神讲解通俗易懂,值得一看。
附上Github链接:https://github.com/LitePalFramework/LitePal
配置LitePal
总结起来就是一句话(最新版的需要去github上面找)
implementation 'org.litepal.guolindev:core:3.1.1'
在该目录下新建litepal.xml
并输入以下内容
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="BookStore" />
<version value="1" />
<list>
</list>
</litepal>
其中,标签用于指定所有的映射模型,我们稍后就会用到。
最后在AndroidManifest.xml添加属性
android:name="org.litepal.LitePalApplication"
新建和更新数据库
第一步:创建实体类
LitePal的强大之处就在于可以和对象映射,其实这也是大部分数据库框架的作用所在,不需要像上节一样在abd里面操作数据库了,而是直接使用对象。所以我们先新建一个Book类,设定好属性。
package com.firstcode.databasetest;
public class Book {
private int id;
private String author;
private double price;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第二步:在litepal.xml添加映射关系
<list>
<mapping class="com.firstcode.databasetest.Book" />
</list>
我感觉目前来说比mybatis简单一些,这个映射关系很好理解,就是上一节我们建立的数据库中的每个字段会和类中的每个属性结合起来。
第三步:在MainActivity中生成一个数据库
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Connector.getDatabase();
}
});
}
}
更新一个数据库
操作十分简单,只需要更新相应的类中的属性,或者新建一个类,在配置文件中增加映射,然后将<version value="1" />
中的value变成2就行了。
添加数据
同样非常简单。
第一步:继承DataSupport
其实这个类已经被弃用了,改成了LitePalSupport
public class Book extends LitePalSupport
第二步:
新建一个Book类并且设置好值,再save一下就行了。
Book book = new Book();
book.setAuthor("The Da Vinci Code");
book.setId(454);
book.setName("Dan Brown");
book.setPrice(16.96);
book.save();
修改数据
修改数据有两种方式,第一种就是更改book的属性值再save一下。如下
Book book = new Book();
book.setAuthor("The Lost Symbol");
book.setId(510);
book.setName("Dan Brown");
book.setPrice(19.96);
book.save();
book.setPrice(10.99);
book.save();
但是这样操作有个限制,就是已存储的对象才能使用这个方法修改。什么是已存储的对象呢,就是调用 book.isSaved()返回true的对象。一般有两种情况,第一种就是save的,第二种就是litepal查询API查询出来的。
第二种方式就是通过updateAll()。如下
Book book1 = new Book();
book1.setPrice(10.99);
book1.updateAll("name = ?","The Lost Symbol");
注意事项:
- setToDefault()方法可以将对象设置成默认值
- update()方法不带参数的时候是对所有的参数进行更新
删除数据
更改成LitePalSupport后,删除数据有所不同,不能在使用以前的方法了。查阅官方API后得知删除单个,使用LitePal.delete(Book.class, 2);
删除多个数据,使用
LitePal.deleteAll(Book.class, "name = ?", "The Lost Symbol");
第一个参数就是操作对象的class文件,然后第二个参数可以是主键id,或者是条件语句,如果是条件语句,第三个参数就是占位符的值。
查找数据
和删除相似,查找一个数据使用
Book book = LitePal.find(Book.class, 2);
查找多个使用findAll
List
但是查询的方式多种多样,LitePal也为我们提供了更多的接口。如下图所示
但是这些都比较老了,让我们看看官网的例子吧
List<Song> songs = LitePal
.where("name like ? and duration < ?", "song%", "200")
.order("duration")
.find(Song.class);
这种格式排布就非常像数据库了。
SQL查询
他也同样支持原生SQL的查询,调用下面的语句即可。
LitePal.findBySQL();
但是注意这里的返回值是Cursor。操作就和SQLDataBase一样了
至此Android的数据库操作学习就告一段落了。