Android流行ORM框架

Android流行ORM框架

Android ORM框架

Room

1
2
3
4
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
implementation "android.arch.persistence.room:rxjava2:$room_version"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@Entity(tableName = "user")
public class User {

@PrimaryKey
private int id;

@ColumnInfo(name = "first_name")
private String firstName;

@ColumnInfo(name = "last_name")
private String lastName;

@Ignore
private String nickName;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Dao
public interface UserDao {

@Query("select * from user")
List<User> getAll();

@Query("select * from user where id in (:ids)")
List<User> queryUserByIds(int[] ids);

@Query("select * from user where first_name like :first and last_name like :last limit 1")
User findByName(String first, String last);

@Insert(onConflict = REPLACE)
void insertAll(User... users);

@Delete
void delete(User user);

@Query("SELECT * from user where id = :id LIMIT 1")
public Flowable<User> loadUserById(int id);
}
1
2
3
4
5
6
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

public abstract UserDao userDao();

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private fun testRoom() {
val db = Room.databaseBuilder(applicationContext,
AppDatabase::class.java, "database-name").build()

var all = db.userDao().all

val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, " + "`name` TEXT, PRIMARY KEY(`id`))")
}
}
val MIGRATION_2_3 = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE Book "
+ " ADD COLUMN pub_year INTEGER")
}
}
Room.databaseBuilder(applicationContext, AppDatabase::class.java, "database-name")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3).build()
}

GreenDao

Realm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// product
buildscript {
repositories {
...
maven {url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'}
}
dependencies {
...
classpath "io.realm:realm-gradle-plugin:5.8.0-SNAPSHOT"
}
}

allprojects {
repositories {
...
maven {url 'http://oss.jfrog.org/artifactory/oss-snapshot-local'}
}
}


// module
apply plugin: 'realm-android'
1
2
3
4
5
6
7
8
9
10
class BaseApplication : Application() {

override fun onCreate() {
super.onCreate()
Realm.init(this);
val config = RealmConfiguration.Builder().build()
Realm.setDefaultConfiguration(config)
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// 新建一个对象,并进行存储
private fun testCreateRealm() {
val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val user = realm.createObject(User::class.java)
user.firstName = "lalla"
user.lastName = "aaaa"
realm.commitTransaction()
}

// 复制一个对象到Realm数据库
private fun copyToRealm() {
val realm = Realm.getDefaultInstance()

val user = User()
user.firstName = "lalla"
user.lastName = "aaaa"

realm.beginTransaction()
realm.copyToRealm(user)
realm.commitTransaction()
}

// 使用事务块
private fun testExecuteTransaction() {
val realm = Realm.getDefaultInstance()
val user = realm.createObject(User::class.java)
user.firstName = "lalla"
user.lastName = "aaaa"

realm.executeTransaction {
it.copyToRealm(user)
}
}

private fun testDelete() {
val realm = Realm.getDefaultInstance()
val users = realm.where(User::class.java).findAll()
realm.executeTransaction {
val user = users[1]
user?.deleteFromRealm()
//删除第一个数据
users.deleteFirstFromRealm()
//删除最后一个数据
users.deleteLastFromRealm()
//删除位置为1的数据
users.deleteFromRealm(1)
//删除所有数据
users.deleteAllFromRealm()
}
}

private fun testUpdate() {
val realm = Realm.getDefaultInstance()
val user = realm.where(User::class.java).equalTo("id", "1").findFirst()
realm.beginTransaction()
user?.firstName = "1111"
realm.commitTransaction()
}

private fun testQuery() {
val realm = Realm.getDefaultInstance()
val users = realm.where(User::class.java).findAll()

var average = users.average("age")
var max = users.max("age")
var sort = users.sort("age")

val user = realm.where(User::class.java).equalTo("id", "1").findFirst()
val user1 = realm.where(User::class.java).between("age", 1, 10).findFirst()
val user2 = realm.where(User::class.java).lessThan("id", 1).findFirst()
val user3 = realm.where(User::class.java).contains("id", "1").findFirst()
}

DBFlow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// product
allprojects {
repositories {
...
maven { url "https://www.jitpack.io" }
}
}

// module
dependencies {
// if Java use this. If using Kotlin do NOT use this.
annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"

// Use if Kotlin user.
kapt "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}"

// sql-cipher database encryption (optional)
implementation "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}"
implementation "net.zetetic:android-database-sqlcipher:${sqlcipher_version}@aar"

// kotlin extensions
implementation "com.github.Raizlabs.DBFlow:dbflow-kotlinextensions:${dbflow_version}"

// RXJava 2 support
implementation "com.github.Raizlabs.DBFlow:dbflow-rx2:${dbflow_version}"

// RXJava 2 Kotlin Extensions Support
implementation "com.github.Raizlabs.DBFlow:dbflow-rx2-kotlinextensions:${dbflow_version}"
}
1
2
3
4
5
6
7
8
class BaseApplication : Application() {

override fun onCreate() {
super.onCreate()
FlowManager.init(this)
}

}
1
2
3
4
5
6
7
8
9
@Database(version = VERSION, name = NAME)
public class DBFlowDataBase {

//数据库名称
static final String NAME = "RuomizDataBase";
//数据库版本
static final int VERSION = 1;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Table(database = DBFlowDataBase.class)
public class DBFlowModel extends BaseModel {

@PrimaryKey(autoincrement = true)
public int id;

@Column
public String name;

@Column
public int age;

@Column
public String address;

@Column
public String phone;

}

编译之后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private fun testDBFlow() {
val dbFlowModel = DBFlowModel()
dbFlowModel.name = "Ruomiz"
dbFlowModel.address = "beijing"
dbFlowModel.age = 100
dbFlowModel.phone = "13333333333"
dbFlowModel.save()
dbFlowModel.update()
dbFlowModel.delete()
dbFlowModel.insert()

//根据name 单个查询
val dbFlowModel1 = Select().from(DBFlowModel::class.java).where(DBFlowModel_Table.name.`is`(name)).querySingle()

//单个查询
val dbFlowDataBase = Select().from(DBFlowDataBase::class.java).querySingle()
//返回所有结果
val dbFlowDataBases = Select().from(DBFlowDataBase::class.java).queryList()
}

OrmLite

下载地址:http://ormlite.com/releases/

需要下载最新的 core.jar 和 android.jar 并添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@DatabaseTable(tableName = "user")
public class User {

@DatabaseField(generatedId = true)//表示id为主键且自动生成
private int id;

@DatabaseField(columnName = "first_name")
private String firstName;

@DatabaseField(columnName = "last_name")
private String lastName;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

private static final String TABLE_NAME = "sqlite-test.db";
/**
* userDao ,每张表对于一个
*/
private Dao<User, Integer> userDao;

public DatabaseHelper(Context context, String databaseName,
CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, User.class);
} catch (SQLException e) {
e.printStackTrace();
}

}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource,
int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, User.class, true);
onCreate(sqLiteDatabase, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}

public void insertUser(User user) throws SQLException {
getUserDao().create(user);
}

public void deleteUserById(int id, User user) throws SQLException {
getUserDao().deleteById(id);
getUserDao().delete(user);
}

public void updateData() throws SQLException {
UpdateBuilder<User, Integer> updateBuilder = getUserDao().updateBuilder();
updateBuilder.setWhere(updateBuilder.where().eq("name", "jack").and().gt("age", 19));
updateBuilder.updateColumnValue("name", "Jack");
updateBuilder.updateColumnValue("phone", "1111765765");
updateBuilder.update();
}

public void query() throws SQLException {
List<User> users = getUserDao().queryForAll();

User user = getUserDao().queryForId(3);

List<User> jsckUser = getUserDao().queryForEq("name", "Jack");
}

/**
* 获得userDao
*/
public Dao<User, Integer> getUserDao() throws SQLException {
if (userDao == null) {
userDao = getDao(User.class);
}
return userDao;
}

/**
* 释放资源
*/
@Override
public void close() {
super.close();
userDao = null;
}

}

分析及对比

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×

keyboard_arrow_up 回到顶端