Это очередной урок из серии «Инструменты Андроид Разработчика», и сегодня мы поговорим об ORM.
ОRM расшифровывается как object-relational mapping, или объектно-реляционное отображение — подход к работе с базами данных, использующий концепции объектно-ориентированных языков программирования. Объектно-реляционное отображение позволяет оперировать объектами в коде, что гораздо удобнее, чем работать с запросами и таблицами.
В нашем случае ORM упрощает работу с SQLite в android, так как позволяет сохранять и извлекать записи из базы данных без создания SQL-запросов. Если вы проходили наши уроки по работе с базами данных в андроид, то вы наверное уже оценили, насколько увлекательным занятием является построение SQL-запросов в базу данных. Один неверный знак — и ничего не работает, а найти ошибку бывает не так просто.
Мы покажем эту технологию на примере Sugar ORM, который создавался именно для Android. В комплекте поставляется API, который легко изучить и запомнить. Он может сам создавать необходимые таблицы и содержит простые методы формирования связей по типу «один-с-одним» и «один-со-многими». Также Sugar ORM облегчает операции создания, чтения, обновления и удаления (CRUD) с помощью всего лишь трёх функций:
save(),delete() и find() (или findById()).- Чтобы добавить SugarORM в проект android studio, пропишите эту зависимость в файле сборки модуля app проекта:
...
dependencies {
...
compile 'com.github.satyan:sugar:1.4'
}
- Далее укажите SugarApp в качестве класса вашего приложения в AndroidManifest.xml. Пропишите такие строки в секции
application:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example">
<application
...
android:name="com.orm.SugarApp"> <!--Используйте этот атрибут дословно-->
<meta-data android:name="DATABASE" android:value="sugar_example.db"/>
<meta-data android:name="VERSION" android:value="1"/>
<meta-data android:name="QUERY_LOG" android:value="true"/>
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example"/>
<activity ...>
<intent-filter>
...
</intent-filter>
</activity>
</application>
Теги мета данных являются необязательными и служат для следующих целей:
| Metadata | Description |
|---|---|
DATABASE |
Имя файла базы данных
|
VERSION |
Версия схемы базы данных.
|
QUERY_LOG |
Журналы запросов Select.
|
DOMAIN_PACKAGE_NAME |
Имя пакета, где присутствуют классы БД
|
- Унаследуйте от класса SugarRecord все классы, которые надо сохранить в базу данных, а Sugar ORM позаботится о создании базы данных:
import com.orm.SugarRecord;
public class Contact extends SugarRecord{
String name;
String mail;
//обязательно создайте пустой конструктор
public Contact() {
}
public Contact(String mail, String name) {
this.mail = mail;
this.name = name;
}
}
- Сохранить запись Sugar ORM:
Contact сontact = new Contact("mail", "name")сontact.save();
- Извлечь запись Sugar ORM:
Contact сontact = Contact.findById(Contact.class, 1);
- Обновить запись Sugar ORM:
Contact сontact = Contact.findById(Contact.class, 1); сontact.mail = "updated mail here"; // modify the values сontact.save(); // updates the previous entry with new values
- Удалить запись Sugar ORM:
Contact сontact = Contact.findById(Contact.class, 1); сontact.delete();
- Массовые операции Sugar ORM:
List<Contact> allContacts = Contact.listAll(Contact.class); Contact.deleteAll(Contact.class);
Исходный код примера работы с Sugar ORM из видео:
import com.orm.SugarRecord;
public class Contact extends SugarRecord{
String name;
String mail;
public Contact() {
}
public Contact(String mail, String name) {
this.mail = mail;
this.name = name;
}
@Override
public String toString() {
return "Contact{" +
"name='" + name + '\'' +
", mail='" + mail + '\'' +
'}';
}
}
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btnAdd, btnRead, btnClear;
EditText etName, etEmail;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = (Button) findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(this);
btnRead = (Button) findViewById(R.id.btnRead);
btnRead.setOnClickListener(this);
btnClear = (Button) findViewById(R.id.btnClear);
btnClear.setOnClickListener(this);
etName = (EditText) findViewById(R.id.etName);
etEmail = (EditText) findViewById(R.id.etEmail);
textView = (TextView) findViewById(R.id.textView);
}
@Override
public void onClick(View v) {
String name = etName.getText().toString();
String mail = etEmail.getText().toString();
switch (v.getId()) {
case R.id.btnAdd:
Contact contact = new Contact(mail, name);
contact.save();
break;
case R.id.btnRead:
List<Contact> allContacts = Contact.listAll(Contact.class);
textView.setText(allContacts.toString());
break;
case R.id.btnClear:
Contact.deleteAll(Contact.class);
break;
}
}
}
Больше примеров работы с SugarORM ищите в руководстве на сайте разработчика
<< Как создавать android приложения без среды разработки