欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android之LitePal 3.0 的基本使用

程序员文章站 2024-03-17 09:36:40
...

一.LitePal简介

LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作,并且LitePal很“轻”,jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别。

GitHub : http://github.com/LitePalFramework/LitePal

二.LitePal的使用

1.添加依赖

在app/build.gradle文件中添加compile依赖如下:

dependencies {
    compile 'org.litepal.android:java:3.0.0'
}
2.在assets目录下创建litepal.xml配置文件

项目文件夹下New->Folder->Assets Folder创建相应的assets文件夹,然后在assets文件夹下创建一个名为litepal.xml的文件,编辑文件如下:

<?xml version="0.1" encoding="utf-8"?>
<litepal>
    <dbname value="lss0555_litepaldemo" />            // 数据库名称为litepaldemo,默认以 .db 结尾,如未以此结尾,则自动添加。
    <version value="1" />                     // 数据库版本为1,每次数据库发生变动版本号必须+1
    <list>                                    // 有几张表就在list之间写几个mapping
        // list标签中的实体类都应该继承LitePalSupport这个类,这个千万别忘记
        <mapping class="example.com.litepal.model.New"></mapping>
    </list>
    <storage value="lss0555/litepal/database" />  //storage 定义数据库文件存储的地方,可选 internal(内部) 和 external(外部), 默认为 internal
</litepal>
3.在Application中初始化

在自己的application中加入一行代码即可:

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
        super.onCreate();
        // 初始化
        LitePal.initialize(this); 
    }  
 ... 
 }

经过上面3步的配置,LitePal就已经集成成功并可以正常使用了。

三.使用测试

1.实体类创建
/**
 * Created by lss0555 on 2019/3/11/011.
 * 从LitePal 2.0.0版本开始建议使用继承LitePalSupport类,
 * DataSupport类已经被标为了废弃,虽然暂时还可以正常工作,但是不建议再继续使用了
 */

public class New extends LitePalSupport {
    private int id;

    //不为空
    @Column(nullable = false)
    private String title;

    @Column
    private String detail;

    @Column
    private String imgurl;
注意:
  • 不管实体类中有没有id这个属性,都会默认创建一个为整型的id字段,作为自增的主键
  • 如果实体类中有一个字段名为id,那么类型只能为int或者long
  • id字段的值始终为当前记录的行号(下标从1开始),即使我们在实体类中定义了int或者long类型的id字段,在添加数据时人为的设置id的值为100,等其他值,查询数据库发现该id字段的值设置是无效的,她始终等于该条记录所在的行id,即第几条记录。
  • 所有的column注解总共有四个,defaultValue的默认值为空字符,所以这个注解只能用以是String类型的字段,即字符型才有默认值
  • litepal支持的实体类字段映射类型为 int,long,double,float,byte[],boolean,String,Date;不支持String[]数组型

2.数据库增删改查操作

(1) .存储操作
        New aNew = new New();
        aNew.setTitle("新闻1");
        aNew.setDetail("详情1");
        aNew.setImgurl("http://www.baidu.com");
        aNew.setUserid("lss0888");
        aNew.save();

save()方法是有返回值的,返回true代表添加成功,返回flase代表添加失败。

save()是添加一条数据,批量添加是 LitePal.saveAll(news);

(2). 删除记录
//删除数据库中new表的所有记录 
LitePal.deleteAll(New.class); 

//删除数据库new表中id为1的记录 
LitePal.delete(New.class,1); 

//删除数据库new表中idn大于3的记录 
LitePal.delete(Movie.class, "id > ?" ,3); 
(3). 修改记录

1.根据条件修改

New aNew = new New();
aNew.setTitle("新闻11新闻11新闻11");
aNew.setDetail("详情1新闻11新闻11新闻11");
aNew.setImgurl("http://www.baidu.com新闻11");
aNew.setUserid("lss0888新闻11");
aNew.update(11);

2.更新所有title为新闻1的记录,将title字段设为标题2

New aNew = new New();
aNew.setTitle("标题2");
aNew.updateAll("title = ?", "新闻1");

3.多条件更新

New aNew = new New();
aNew.setTitle("新闻888");
aNew.setDetail("详情888");
aNew.updateAll("title=? and detail=?", "标题2","详情1");
(4). 查询记录

1.查询所有

List<New> newList = LitePal.findAll(New.class);

2.查询id为1

New aNew = LitePal.find(New.class, 1);

3.查找title新闻1的记录,并且以id排序

List<New> aNew = LitePal.where("title = ?", "新闻1").order("id").find(New.class);

4.查找所有id龄小于2

List<New> aNew = LitePal.where("id < ?", "3").find(New.class);

5.多条件查询

int age = 12;//条件一
String sex = "man";条件二
DataSupport.where("age = ? and sex = ?", "" + age, sex).find(Comment.class);//查询表Comment

(5). 原始sql语句操作
 Cursor select_ = LitePal.findBySQL(sql);

findBySQL()方法接收任意个字符串参数,其中第一个参数就是SQL语句,后面的参数都是用于替换SQL语句中的占位符的,用法非常简单。另外,findBySQL()方法返回的是一个Cursor对象,这和原生SQL语句的用法返回的结果也是相同的。

(6). 删除数据库
LitePal.deleteDatabase("")
(7). 创建数据库
LitePal.getDatabase()
(8). 混淆配置
-keep class org.litepal.** {
    *;
}

-keep class * extends org.litepal.crud.LitePalSupport{
    *;
}
(9). 使用LitePal来完成升级表的操作:

包括新增一张表,新增表中的一个字段,删除表中的一个字段,删除表等,每一次的升级操作litepal.xml文件中数据库的版本号都必须加1.
具体升级操作参考博客:

https://blog.csdn.net/guolin_blog/article/details/39151617

相关标签: Litepal3.0