개념
ORM은 'Object Relational Mapping'을 의미하며 개발자가 데이터베이스를 사용하기 편리하게 해주는 툴이다.
ORM을 사용하는 이유는 이전 포스팅(http://heepie.tistory.com/90)을 참조하자.
종류에는 OrmLite, Hibernate 등이 있다. 실습은 Android에서 OrmLite로 진행할 예정이다.
실습
Step1. Android Gradle에 등록 (build.gradle (Module: app))
Android 자동 빌드 시스템인 Gradle에 OrmLite를 등록하므로 OrmLite를 사용할 수 있는 설정을 해준다.
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 | apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion "26.0.0" defaultConfig { applicationId 'Application ID' minSdkVersion 16 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:recyclerview-v7:26.+' compile 'com.j256.ormlite:ormlite-android:5.0' testCompile 'junit:junit:4.12' } | cs |
Step2. 테이블로 선언 될 객체 선언
어노테이션을 통해 테이블 명과 DB 필드를 선언한다. 어노테이션으로 Auto Increment 설정 등을 할 수 있다.
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 | @DatabaseTable (tableName = "studentinfo") public class StudentInfo { // generatedId로 식별자 선언 @DatabaseField(generatedId = true) private int studentNum; @DatabaseField private String name; @DatabaseField private String major; public int getStudentNum() { return studentNum; } public void setStudentNum(int studentNum) { this.studentNum = studentNum; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } } | cs |
Step3. OrmLite를 사용할 객체를 상속을 통해 구현
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 | public class DBHelper extends OrmLiteSqliteOpenHelper { // DB Name, DB Version 설정 public static final String DBNAME = "ormlite.db"; public static final int DB_VERSION = 1; // DB Name, DB Version으로 생성자 구현 public DBHelper(Context context) { super(context, DBNAME, null, DB_VERSION); } // DB 안에 테이블 생성 @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { try { // domain.class를 참조해서 테이블을 생성 TableUtils.createTable(connectionSource, domain.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { } } | cs |
Step4. 내부 DAO 선언
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 | public class StudentInfoDAO { // <테이블 명, 식별자 변수형> Dao<StudentInfo, Long> dao = null; // ... public StudentInfoDAO(Context context) { helper = new DBHelper(context); // get Dao dao = helper.getDao(StudentInfo.class); } public void create(StudentInfo info) { // insert the Data dao.create(info); } public List<StudentInfo> readALL () { // ... result = dao.queryForAll(); return result; } public PicNote readOneById (long id) { PicNote result = null; try { result = dao.queryForId(id); } catch (SQLException e) { e.printStackTrace(); } return result; } public void update (StudentInfo info) { // update the data dao.update(info); } public void delete (StudentInfo info) { // delete the data dao.delete(info); } // ... } | cs |
ORM의 데이터 흐름
# Orm 개념 #orm 사용법 #orm 실습
댓글