12/08/2018, 14:32
Android ORM cho SQLite database
Phát triển ứng dụng android hẳn ai cũng đã từng làm việc với SQLite database nhưng chắc chắn không phải ai cũng thoải mái khi làm việc với cú pháp của nó khi phải tạo bảng hay truy vấn dữ liệu từ bàng. Một vấn đề nữa là SQLite database tương đối là chậm trong việc read và write dữ liệu. Trước ...
- Phát triển ứng dụng android hẳn ai cũng đã từng làm việc với SQLite database nhưng chắc chắn không phải ai cũng thoải mái khi làm việc với cú pháp của nó khi phải tạo bảng hay truy vấn dữ liệu từ bàng.
- Một vấn đề nữa là SQLite database tương đối là chậm trong việc read và write dữ liệu.
- Trước tiên chúng ta phải hiểu được khái niệm ORM là gì?. ORM là kỹ thuật chuyển đổi dữ liệu giữa các hệ thống khác (không phải là mô hình hướng đối tượng) sang các đối tượng trong ngôn ngữ lập trình hướng đối tượng. Trong trường hợp này chúng ta chuyển dữ liệu từ các dòng dữ liệu trong CSDL quan hệ sang đối tượng.
- Trong bài viết này mình sẽ giới thiệu cho mọi người 1 thư viện mà rất tiện lợi và có nhiều tính năng hay:
- Maximum performance
- Dễ dàng sử dung: thư viện cung cấp rất nhiều method giúp ta làm việc dễ dàng với SQLite database
- Tiêu thụ bộ nhớ tối thiểu
- Dung lượng thư viện rất nhỏ(<100kb)
- Database encryption: đảm bảo tính bảo mật của dữ liệu
- Cộng đồng phát triển mạnh mẽ: Dễ dàng giải quyết khi gặp bất cứ vấn đề gì
- http://greenrobot.org/greendao/
- Github
Bước 1: Thêm đoạn code dưới vào root.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' } }
Bước 2: Thêm đoạn code dưới vào module.gradle
apply plugin: 'org.greenrobot.greendao' dependencies { compile 'org.greenrobot:greendao:3.2.0' }
Bước 3: Tạo table Note với 3 trường id, text, date
- Tạo table Note
@Entity public class Note { @Id(autoincrement = true) private Long id; private String text; private long date; }
- Trong Android studio chọn build -> Make project để android tự động generate table và các lớp tiện ích liên quan
- Còn rất nhiều annotations mọi người có thể tham khảo tại đây
- Sau khi Make project thì class Note sẽ thành như Sau
package com.nhahv.greendao; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Generated; @Entity public class Note { @Id(autoincrement = true) private Long id; private String text; private long date; @Generated(hash = 1987433398) public Note(Long id, String text, long date) { this.id = id; this.text = text; this.date = date; } @Generated(hash = 1272611929) public Note() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getText() { return this.text; } public void setText(String text) { this.text = text; } public long getDate() { return this.date; } public void setDate(long date) { this.date = date; } }
- Sau khi Make project thì sẽ tạo ra bảng với tên Note các trường _id, TEXT, DATE
Bước 4: Tạo database và create section truy cập database
- Thiết lập trong file Application
public class Applications extends Application { private DaoSession mDaoSession; @Override public void onCreate() { super.onCreate(); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db"); Database db = helper.getWritableDb(); mDaoSession = new DaoMaster(db).newSession(); } public DaoSession getDaoSession() { return mDaoSession; } }
- File AndroidManifest
<application android:name=".Applications" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application>
Bước 5: Làm việc với table Note
- Tạo section truy cập table Note
DaoSession daoSession = ((Applications) getApplication()).getDaoSession(); NoteDao noteDao = daoSession.getNoteDao();
- Insert 1 row
long date = System.currentTimeMillis(); Note note = new Note(); note.setDate(date); note.setText(noteText); noteDao.insert(note);
- Querying 1 row
int id = 1; daoSession.getNoteDao().queryBuilder().where(NoteDao.Properties.Id.eq(id)).unique();
- Querying tất cả rows của table Note
daoSession.getNoteDao().queryBuilder().list();
- Xóa row
daoSession.getNoteDao().queryBuilder().where(NoteDao.Properties.Id.eq(id)).buildDelete();
- Xóa tất cả dữ liệu của table Note
daoSession.getNoteDao().deleteAll();
- Cập nhật row
int id = 1; Note note = noteDao.queryBuilder().where(NoteDao.Properties.Id.eq(id)).unique(); note.setText("title"); NoteDao.update(note);Note: Còn rất nhiều các method tiện ích khác bạn có thể tìm thấy tại đây
- Mọi người có thể tham khảo project của mình tại đây
- Cuối cùng cảm ơn mọi người đã đọc bài viết của mình, bài viết còn nhiều thiếu sót mọi hãy comment hộ mình nha.