dbflow android,我喜欢 Android中好用又实惠的DBFlow
引入DBflow库1 添加仓库托管地址allprojects{repositories{google()jcenter()maven{url"https://jitpack.io"}//DBFlow}}2 在moudel的build.gradle中添加#定义DBFlow版本defdbflow_version="4.2.4"#androidstudio3.1版本compile...
引入DBflow库
1 添加仓库托管地址allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" } //DBFlow
}
}
2 在moudel的build.gradle中添加#定义DBFlow版本
def dbflow_version = "4.2.4"
#android studio3.1版本 compile关键字已废除,改为 implementation 或 api
annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
implementation "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
implementation "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
在Application中初始化Dbflow
第一种直接初始化public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
...
}
....
}
第二种带配置参数的初始化public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
dbFlowInit();
....
}
private void dbFlowInit(){
try {
FlowManager.init(new FlowConfig.Builder(getApplicationContext())
.openDatabasesOnInit(true) .build());
FlowLog.setMinimumLoggingLevel(FlowLog.Level.D);
} catch (Exception e) {
e.printStackTrace();
}
}
....
}
使用第二种方式初始化后数据库表讲创建,第一种方法只创建数据库,库中的表只用进行操作时才创建。
新建AppDatabase类,配置数据库相关参数@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {
//数据库名称
public static final String NAME = "app_db.db";
//数据库版本号
public static final int VERSION = 1;
}
这里使用@Database注解定义了创建的数据库的名称为 app_db.db,数据库初始化版本号是1。
新建数据库表import com.raizlabs.android.dbflow.structure.BaseModel;
import com.app.AppDatabase;
@Table(database = AppDatabase.class)
public class User extends BaseModel{
@PrimaryKey
public String userId;
@Column
public String userName;
@Column
public String password;
...
}
这里定义了数据库表User 继承了 BaseModel ,@Table注解指定数据库类,@PrimaryKey定义主键,@Column定义表中字段。继承BaseModel后 User将具有save()、update()、delete()三个方法插入、修改、删除表中的单条记录。
数据库升级
新建表:1 创建指定的表结构类;2 将AppDatabase类中的版本号增加:VERSION = 2;import com.raizlabs.android.dbflow.structure.BaseModel;
import com.app.AppDatabase;
@Table(database = AppDatabase.class)
public class Book extends BaseModel{
@PrimaryKey
public String bookId;
@Column
public String bookName;
@Column
public int page;
...
}
表结构增加字段: 1 User类中增加属性address并用@Column标记;2 将AppDatabase类中的版本号增加:VERSION = 3;3 新建类继承AlterTableMigrationimport com.raizlabs.android.dbflow.structure.BaseModel;
import com.app.AppDatabase;
@Table(database = AppDatabase.class)
public class User extends BaseModel{
@PrimaryKey
public String userId;
@Column
public String userName;
@Column
public String password;
@Column
public String address;
...
}
//----------------------------------------
import com.app.model100.User;
import com.raizlabs.android.dbflow.annotation.Migration;
import com.raizlabs.android.dbflow.sql.SQLiteType;
import com.raizlabs.android.dbflow.sql.migration.AlterTableMigration;
@Migration(version = 3, database = AppDatabase.class)
public class AlterUser3Migration extends AlterTableMigration {
public AlterUser2Migration(Class table) {
super(table);
}
@Override
public void onPreMigrate() {
addColumn(SQLiteType.TEXT, "address");
}
}
AlterUser3Migration 继承AlterTableMigration的类用于增加表中字段;继承AlterTableMigration传入要修改的表结构类,在 onPreMigrate()方法中增加字段 addColumn(SQLiteType.TEXT, "address");
DBFlow查询 DBFlow 给我没实现的面向对象的查询 SQLiteUser users = SQLite.select().from(User.class).where(User_Table.userId.is("001")).querySingle();
查询userid等于001的用户,次查询最多只查询出一条记录 sql:SELECT * FROM `user` WHERE `userId`='001'List users = SQLite.select().from(User.class).where(User_Table.userName.like("张%")).queryList();
查模糊询用户名以"张"开头的用户信息
说明:
User_Table这是DBFlow给我们自动生成的,如果你定的数据库表没有*_Table的类存在,可以Make你的项目DBFlow就会自动创建。
querySingle() 查询只返回单条记录
select() 查询的自动没有默认是全部
from()指定查询的数据表类
where()增加查询条件
and()并且
or()或者
常用的查询条件操作符
is(), eq() 等介于 =
isNot(), notEq() 等介于 !=
isNull()等介于 IS NULL
isNotNull()等介于 IS NOT NULL
like()等介于 模糊查询
glob()
greaterThan(), greaterThanOrEqual(), lessThan(), lessThanOrEqual()
between() BETWEEN
in(),
notIn()
排序
// true为'ASC'正序, false为'DESC'反序SQLite.select()
.from(table)
.where()
.orderBy(Customer_Table.customer_id, true)
.queryList();
分组SQLite.select()
.from(table)
.groupBy(Customer_Table.customer_id, Customer_Table.customer_name)
.queryList();
HavingSQLite.select()
.from(table)
.groupBy(Customer_Table.customer_id, Customer_Table.customer_name))
.having(Customer_Table.customer_id.greaterThan(2))
.queryList();
分页SQLite.select()
.from(table)
.limit(3)
.offset(2)
.queryList();
DBFlow中也可以直接使用SQL语句进行查询
FlowCursor cursor = FlowManager.getWritableDatabase(AppDatabase.class).rawQuery("SELECT * FROM user WHERE userId= ?",new String[]{"001"});
再用cursor给类设置取值时 user.setUserId(cursor.getString(cursor.getColumnIndex("userId"))); 字段 名称要和User类中的属性大小写一致
更多推荐
所有评论(0)