안드로이드 SqlLite Database ORM 프레임웤 greenDAO

프로그래밍/Android 2013. 9. 10. 21:51

안드로이드 Sqlite Database ORM 프레임웤 greenDAO


역시나 안드로이드에서 DB 접근에 귀차니즘을 느끼고 iBatis 같은 프레임웍을 찾아보니

당연히 있더군요... 역시 세상은 제 생각보다 빠름을 절실히 느꼈습니다.


안드로이드에서는 해당 장치내에 있는 Sqlite DB 를 접근하기 위해 SQLiteOpenHelper 와 같은 유능한 클래스를 제공하고 있지만

예전부터 iBatis 와 스프링에 젖어 있던 저에게는 예전 ASP 를 처음 배울때의 향수를 불러 일으키더군요...

( 엄청난 스트링 조합 쿼리의 향연... 눈빠지죠 , 하나만 빠져도)


그래서 조금 더 편하게 개발을 하고자 greenDAO 를 현재 개발중인 프로젝트에 적용해 봤습니다.

※ 관련 및 자세한 정보는 다음 URL 에서... http://greendao-orm.com/ 


우선 크게 greenDAO 두가지 기능을 제공합니다. 

- 첫째, DB 에 쉽게 접근할 수 있도록 하는 Helper 클래스

- 둘째, generator 를 통해서 Model, DAO 객체 및 관련 객체를 생성하는 기능


iBatis 만 사용하던 저에게는 프레임웍에서 Model, DAO 객체를 자동으로 생성해 준다는것에 놀람을 금치 못했습니다.

우선 Model 과 DAO 를 자동생성하기 위해서는 자바코딩이 필요합니다.


우선, greenDAO 를 적용하기 위해서는 아래 3개의 library 가 필요합니다. 위 사이트에서 다운로드 받으시면 됩니다.



[객체를 생성하기 위한 자바 코드]

public static void main() throws Exception{

Schema schema = new Schema(3, "kr.co.zadu.h3lotto.model"); // MODEL 객체가 생성될 패키지를 지정합니다.

schema.setDefaultJavaPackageTest("kr.co.zadu.h3lotto.test");

schema.setDefaultJavaPackageDao("kr.co.zadu.h3lotto.dao"); // DAO 객체가 생성될 패키지를 지정합니다.

addLottery(schema);

addFavoriteLottery(schema);

new DaoGenerator().generateAll(schema, "../[프로젝트명]/src-gen");  // 객체를 생성하며 생성될 위치(src 폴더 위치)를 지정합니다.

}


private void addLottery( Schema schema){

Entity lottery = schema.addEntity("Lottery"); // Lottery 테이블을 추가합니다.

lottery.addIdProperty(); // ID 라는 primary key 를 갖고 

lottery.addIntProperty("set"); // set 이라는 int 형 필드를 갖습니다.

Property number = lottery.addIntProperty("number").getProperty(); // number 라는 int 형 필드를 갖습니다.

// number 에 인덱스를 추가해 줍니다.

Index numberIndex = new Index();

numberIndex.addProperty( number);

lottery.addIndex(numberIndex);

}


private void addFavoriteLottery( Schema schema){

Entity lottery = schema.addEntity("FavoriteLottery");

lottery.addIdProperty();

lottery.addIntProperty("number1");

lottery.addIntProperty("number2");

lottery.addIntProperty("number3");

lottery.addIntProperty("number4");

lottery.addIntProperty("number5");

lottery.addIntProperty("number6");

lottery.addDateProperty("addDate"); // 추가된 날짜

}


위 코드를 돌려주면 놀랍게도 아래와 같이 객체가 자동으로 생성됩니다.




그럼 생성까지는 자동으로 됬는데 사용하는 방법은 어떻게...

놀랍게도 greenDAO는 DB 생성시 사용하는 테이블을 몽땅 다 자동으로 생성해 줍니다. 사용자는 CREATE TABLE... 구문은 신경쓰지 않아도 됩니다.

[Dao 객체 얻어오기]

// DB에 최초로 접근을 할때 해당 DB, lottery.db 가 존재하지 않으면 lottery.db 를 생성함과 동시에 관련 테이블을 생성합니다.

DevOpenHelper helper = new DaoMaster.DevOpenHelper( Method1Activity.this, "lottery.db", null);

db = helper.getWritableDatabase();

daoMaster = new DaoMaster(db);

daoSession = daoMaster.newSession();

lotteryDao = daoSession.getLotteryDao();

favoriteLotteryDao = daoSession.getFavoriteLotteryDao();


위의 자바 코드를 통해서 DAO 객체를 얻어올 수 있습니다.

DAO 객체에는 CRUD 관련 메소드가 존재합니다. 사용방법은 기존에 DAO 를 사용해 보셨던 분이라면 쉽게 사용할 수 있습니다.

간단하게 DB insert 하는 구문만 살펴보면


[DB insert 구문]

Lottery lottery = new Lottery();

...

//lottery 객체 설정 완료후 

lotteryDao.insert( lottery); // DB insert 


[SQL 로그 찍는법]

QueryBuilder.LOG_SQL = true;

QueryBuilder.LOG_VALUES = true;


간단합니다.


그외 고급 사용법은 홈페이지를 방문하여 습득하시길 바랍니다.



: