+1

Android ORM cho SQLite database

1. Tổng quan

  • 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:
  1. Maximum performance
  2. 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
  3. Tiêu thụ bộ nhớ tối thiểu
  4. Dung lượng thư viện rất nhỏ(<100kb)
  5. Database encryption: đảm bảo tính bảo mật của dữ liệu
  6. 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ì Android ORM Performance 2016

2. Thiết lập và demo

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.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí