Đã trót là phải trét, chúng ta quẩy nốt bài cuối cùng về SQLite nhé. Bài này chúng ta sẽ làm việc với SugarORM, một thư viện ORM (Object Relational Maping) khá ngon của Android. Có tác dụng ánh xạ đối tượng Java với bảng SQLite qua các API rất dễ hiểu.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
Cách nhập thư viện SugarORM vào ứng dụng Android.
Làm một ứng dụng đơn giản sửa xoá các trường, mà chỉ dùng code Java.
Cài đặt SugarORM
SugarORM không có dependency nào khác, tức là chỉ cần download file jar chứa thư viện là đủ, hoặc cách dễ nhất là thêm dependency vào file app/build.gradle. Kiểu kiểu như sau:
Chúng là những thông tin cần thiết để cấu thành database SQLite. Cụ thể là:
Sử dụng SugarORM
Để tạo các model trong bảng, chúng ta chỉ cần cho nó extend từ lớp SugarRecord <Tên_Model>, quá dễ dàng và đơn giản!
Tuy nhiên cần lưu ý:
Phải luôn có default constructor (constructor mặc định, không có tham số truyền vào, và không phải private).
Ở SugarORM bản 1.2 cũ, bạn phải thêm 1 constructor có tham số đầu vào là một Context.
Và thế là xong, SugarORMsẽ tự tạo bảng cho bạn dựa trên Model đã tạo. SugarORM cũng rất thông minh, nếu như tên trường bạn đặt là fullName thì khi tạo cột, nó sẽ tạo ra cột với tên là full_name (rất quan trọng khi truy vấn).
Tạo liên kết giữa các model cũng khá là dễ dàng. Ví dụ ta cần cho một cột mới có tên là “Tool”:
package com.howkteam.sugarormex;
import com.orm.SugarRecord;
publicclassPersonextendsSugarRecord {// Luôn phải để một constructor trống.publicPerson() {
}
// Constructor mà chúng ta sẽ dùng để tạo đối tượng.publicPerson(String name, int age) {
this.name = name;
this.age = age;
}
// 2 thuộc tính cơ bản.public String name;
publicint age;
public Tool tool;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Để lấy danh sách các trường trong bảng, lấy tất cả, chỉ cần:
package com.howkteam.sugarormex;
import com.orm.SugarRecord;
publicclassPersonextendsSugarRecord {// Luôn phải để một constructor trống.publicPerson() {
}
// Constructor mà chúng ta sẽ dùng để tạo đối tượng.publicPerson(String name, int age) {
this.name = name;
this.age = age;
}
// 2 thuộc tính cơ bản.public String name;
publicint age;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Bước 4:Bước này cực kỳ quan trọng: Chỉnh sửa file AndroidManifest như sau:
package com.howkteam.sugarormex;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import java.util.List;
// Cho activity này extend từ ListActivity.// Lưu ý là các bản ghi trong database bắt đầu từ 1, không phải từ 0.publicclassMainActivityextendsListActivityimplementsView.OnClickListener {int count = 0;
ArrayAdapter<Person> adapter;
List<Person> people;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Lấy hết danh sách people, nhét vào List tương ứng.
people = Person.listAll(Person.class);
adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, people);
setListAdapter(adapter);
}
@OverridepublicvoidonClick(View view) {
if (view.getId() == R.id.delete_all) {
// Xoá tất cả các phần tử trong bảng Person.
Person.deleteAll(Person.class);
// Và xoá luôn trong danh sách.
people.clear();
refresh();
}
if (view.getId() == R.id.add) {
count++;
Person p = new Person("A " + String.valueOf(count), count);
// Lưu record mới vào DB.
p.save();
// Thêm vào danh sách để hiển thị màn hình.
people.add(p);
refresh();
}
}
// Thông báo cho adapter rằng danh sách các phần tử đã thay đổi.privatevoidrefresh() {
adapter.notifyDataSetChanged();
}
}
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
Trước khi chạy, các bạn nên tắt Instant Run của Android Studio. Vào File > Settings(hoặc Preferences). Trên Mac thì là Android Studio > Preferences:
Chạy, ở đây danh sách hiển thị là object và mã hash của object nên nhìn hơi ngố ngố tẹo, các bạn hoàn toàn có thể sửa bằng cách tạo adapter riêng:
Vậy là bạn đã tiết kiệm được:
Thời gian tạo SQLiteDBHelper.
Thời gian tạo class DataSource.
Đồng thời là code ngắn hơn, dễ hiểu hơn rất nhiều. Ngoài SugarORM, còn rất nhiều thư viện khác như:
Requery
ORMLite
DBFlow
Squidb
GreenDAO
ActiveAndroid
Cupboard
Kết luận
Qua bài này chúng ta đã nắm được ORM là gì, tác dụng của nó với SQLite ra sao, và viết một ứng dụng đơn giản sử dụng Sugar ORM.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Thực hành SQLite với Sugar ORM dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.