简介:
litepal是郭霖的一款开源的android数据库框架,采用关系映射(ORM)的模式,这是github
地址,最新版本已经更新到1.6,支持eclipse,gridle使用如下:
compile 'org.litepal.android:core:1.6.0'
配置:
创建assets
目录,新建litepal.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--数据库名字 -->
<dbname value="demo" />
<!--数据库版本 -->
<version value="1" />
<!--数据库实体类,用于映射-->
<list>
<mapping class="com.test.model.Reader" />
<mapping class="com.test.model.Magazine" />
</list>
</litepal>
litepal初始化有两种方式:
1.将你清单文件的Application
换成LitePalApplication
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
2.将你的Application
继承自Application
,然后在onCreat(),进行litepal
的初始化
public class MyOwnApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
...
}
使用litepal

创建实体类
litepal
需要用于映射的实体类需要继承DataSupport
,并生成get和set方法,关于这两个方法,推荐一个库:
lombok
,gridle使用添加:
compile 'org.projectlombok:lombok:1.16.18'
添加之后你的get和set方法只用在类名上面添加注解@Data就可以了,如下
@Data
public class Man{
@Column(unique = true, defaultValue = "unknown")
private int age;
private String name;
}
实体类支持注解约束:
@Column(unique = true) //是否唯一
@Column(defaultValue = "unknown") //指定字段默认值
@Column(nullable = false) //是否可以为空
@Column(ignore = true) //是否可以忽略
修改litepal.xml
当你添加表或修改表结构,都要修改litepal.xml,首先版本号要+1,如果添加表,还要添加
<list>
<mapping class="com.example.alguojian.bean.Man"></mapping>
</list>
添加数据
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();
Song song1 = new Song();
song1.setName("song1");
song1.setDuration(320);
song1.setAlbum(album);
song1.save();
Song song2 = new Song();
song2.setName("song2");
song2.setDuration(356);
song2.setAlbum(album);
song2.save();
更新数据
1.指定id:
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(2);
2.条件更新:
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "小明");
3.多个条件用and连接
Album album= new Album();
album.setTitle("第3次更新");
album.updateAll("title = ? and age> ?", "第2次更新", "12");
4.更新全部数据,将表所有数据名字修改:
Man values = new Man();
values.put("Name", "小化工");
DataSupport.updateAll(Man.class, values);
5.异步更新数据
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.saveAsync().listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
}
});
删除数据
1.指定ID
DataSupport.delete(Man.class, id);
2.条件删除,多个条件用and连接
DataSupport.deleteAll(Man.class, "age > ?" , "15");
3.删除全表数据
DataSupport.deleteAll(Man.class);
查询数据
1.查询第一条以及最后一条
News firstNews = DataSupport.findFirst(News.class);
News lastNews = DataSupport.findLast(News.class);
2.指定id
Song song = DataSupport.find(Song.class, id);
//指定多个id如下
//方式一:
List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7);
//方式二:
long[] ids = new long[] { 1, 3, 5, 7 };
List<News> newsList = DataSupport.findAll(News.class, ids);
3.查询所有
List<Song> allSongs = DataSupport.findAll(Song.class);
4.条件查询
查询 Man表 中 年龄大于12 的 第5到20条 数据,以插入时间倒序 排序方式呈现,只取 “名字”和“性别”和“身高” 三列内容。
List<Man> list = DataSupport.select("name", "sex","height")//需要的条目
.where("age> ?", "12")//条件
.order("inputTime desc")//倒序字段
.offset(5)//开始查询位置
.limit(15)//数据长度
.find(Man.class);//查询表
5.异步查询,用于代替findAll
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
@Override
public <T> void onFinish(List<T> t) {
List<Song> allSongs = (List<Song>) t;
}
});
删除数据库
LitePal.deleteDatabase("数据库名");
完结
关于litepal更多用法可以查看源码
github地址:https://github.com/LitePalFramework/LitePal
网友评论