LitePal 是一款开源Android数据库框架,它采用了ORM的模式,将平时用到的一些数据库功能进行了封装
【项目地址】:https://github.com/LitePalFramework/LitePal
项目主页上就有详细的使用文档
新建一个空项目
day12_LitePalTest
一、配置 LitePal
引入依赖库:
implementation 'org.litepal.android:java:3.0.0'
在app/src/main
目录下新建一个文件夹assets
,在该目录下建一个litepal.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" />
<version value="1" />
<list>
</list>
</litepal>
<dbname>
标签数据库名
<version>
版本号
<list>
指定映射模型
最后给AndroidManifest.xml
文件加一行:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.day12_litepaltest">
<application
android:name="org.litepal.LitePalApplication"
......
>
</application>
</manifest>
二、创建和升级数据库
1、准备
首先为了方便,把上篇文章的主布局粘贴过来:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"
android:id="@+id/create_database"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增"
android:id="@+id/insert"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="改"
android:id="@+id/update"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删"
android:id="@+id/delete"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查"
android:id="@+id/quary"/>
</LinearLayout>
2、对象关系映射ORM
定义一个Book
类,快速生成其Getter
和 Setter
【快捷键:Alt+insert】
public class Book {
private int id;
private String author;
private double price;
private int pages;
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 int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
将Book
类添加带映射模型表中,修改litepal.xml
:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore" />
<version value="1" />
<list>
<mapping class = "com.example.day12_litepaltest.Book"/>
</list>
</litepal>
3、创建数据库
LitePal.getDatabase()
:只需要这一句就够了
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button_create = findViewById(R.id.create_database);
button_create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LitePal.getDatabase();
}
});
}
}
运行找库,库里找表,其他两张自动建的表不用管:
4、升级数据库
要在Book
表中增加一列press
:
public class Book {
......
private String press;
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
}
又要一张Category
表:
public class Category {
private int id;
private String category;
private int categoryCode;
public void setId(int id) {
this.id = id;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public int getCategoryCode() {
return categoryCode;
}
public void setCategoryCode(int categoryCode) {
this.categoryCode = categoryCode;
}
}
修改映射关系,记得版本号+1:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore" />
<version value="2" />
<list>
<mapping class = "com.example.day12_litepaltest.Book"/>
<mapping class = "com.example.day12_litepaltest.Category"/>
</list>
</litepal>
重新运行并找表:
三、增
首先需要让"表类"继承自LitePalSupport
:
public class Book extends LitePalSupport {
......
}
然后用实例.save()
即可
Button button_insert = findViewById(R.id.insert);
button_insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book = new Book();
book.setName("老人与海");
book.setAuthor("海明威");
book.setPages(456);
book.setPress("呼吸出版社");
book.setPrice(18.88);
book.save();
}
});
运行找数据:
四、改
实例.updateAll(语句条件,占位值...)
Button button_update = findViewById(R.id.update);
button_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book = new Book();
book.setPrice(12.00);
book.setPress("大头出版社");
book.updateAll("name = ? and author = ?", "老人与海", "海明威");
}
});
补充:改为默认值:实例.setToDefault(列名)
五、删
方法一:实例.delete()
方法二:LitePal.deleteAll(表名.class, 约束, 占位值等)
Button button_delete = findViewById(R.id.delete);
button_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LitePal.deleteAll(Book.class, "price < ?", "15");
}
});
六、查
LitePal.findAll(表名.class)
,会返回List
Button button_query = findViewById(R.id.quary);
button_query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Book> books = LitePal.findAll(Book.class);
for (Book book : books){
Log.d(TAG, "--------------------");
Log.d(TAG, "书名:"+book.getName());
Log.d(TAG, "作者:"+book.getAuthor());
Log.d(TAG, "出版社:"+book.getPress());
Log.d(TAG, "价格:"+book.getPrice());
Log.d(TAG, "页数:"+book.getPages());
Log.d(TAG, "--------------------");
}
}
});
七、补充
查询第一条数据:LitePal.findFirst(Book.class)
查询最后一条数据:LitePal.findLast(Book.class)
select
查询几列:
LitePal.select("name", "author").find(Book.class);
where
指定约束条件:
LitePal.where("pages > ?", "400").find(Book.class);
order
指定排序方式:[desc降序, asc升序]
LitePal.order("price desc").find(Book.class);
litmit
指定数量:
LitePal.litmit(3).find(Book.class);
offset
指定偏移量:
LitPal.offset(2).find(Book.class);
原生查询:
LitePal.findBySQL("select * from Book where pages > ?", "400");