GreenDao 자습서(2): 기본 응용

9440 단어 Android 승급 실천
  • 앞말
  • 응용층 원리 소개
  • 1 컴파일한 후 자동으로 주입된 파일은 무엇입니까
  • 2 Dao 객체를 가져오는 프로세스
  • 21 코드 예제
  • 22분단 해석 창설 과정

  • 주해에 관하여
  • 기본 응용
  • 1 Bean 만들기
  • 2 Dao 인스턴스 가져오기
  • 21 DaoSession 인스턴스 확보
  • 22 Dao 인스턴스 확보
  • 23 Dao Operations Enhanced Request 예제

  • 결어
  • 1. 앞말
  • 주로 그린다오의 기본 응용을 소개한다.
  • 본고의 자료는 인터넷에서 자원을 공개하고 개인의 실천 견해에 따라 손수 정리하며 잘못이 있으면 언제든지 지적하십시오.
  • 본고는 주로 개인의 축적과 공유에 사용되며 문장에서 다른 기술인 소의 문장을 인용할 수 있다(링크만 인용하고 전재하지 않는다). 만약에 권리 침해가 있으면 반드시 적절하게 처리하라고 알려주십시오.

  • 2. 응용층 원리 소개
  • 만약에 이 부분이 추상적이고 이해하기 어려워 보인다면 먼저 뒤의 실조 부분을 보고 한 번 조작한 후에 다시 돌아보면 이 부분을 이해하기 쉽다.

  • 2.1. 컴파일한 후 자동으로 주입된 파일은 어떤 것들이 있습니까
    GreenDao가 무엇인지 더 이상 설명할 필요가 없습니다. 관건은 하나의 업무를 시작할 때 일련의 코드를 어떻게 실행하는지 이해하는 것입니다.먼저 컴파일 후 그린다이오가 주입한 자바 파일은 주로 어떤 것들이 있고 기능은 무엇인지 알아야 한다.
  • 에서 schema는'daoPackage'xx를 설정했다.xxx.xxxxx.greendao.dao'', Rebuild 이후 DaoPackage가 지정한 패키지 경로에서 자동으로 생성된 파일을 찾을 수 있습니다.
  • DaoMaster.java
  • 입구 클래스, 어떠한 상황에서도 데이터베이스의 입구를 조작한다.
  • XxxxBeanDao 클래스 등록,DaoSession 실례 만들기,DatabaseOpenHelper와 관련된 창설표, 삭제표, 데이터베이스 업데이트 등 작업
  • 포함
  • 매핑 관계 만들기
  • DaoSession.java
  • 모든 Bean 클래스에 대응하는 Dao 클래스의 실례를 만들고 매핑 관계를 완성
  • 각 Bean 클래스에 해당하는 Dao 클래스
  • 데이터베이스 운영 클래스, 추상 클래스 AbstractDao
  • 에서 상속


    2.2. Dao 객체를 가져오는 과정
    2.2.1. 코드 예:
    DaoSession daoSession = new DaoMaster(new DaoMaster.DevOpenHelper(context, DATA_BASE_NAME).getWritableDb()).newSession();
    daoSession.getXxxxBeanDao();

    2.2.2. 세그먼트 해석 작성 프로세스
  • new DaoMaster(…);
  • DaoMaster 클래스의 구조 방법에서 전송된 Database 실례는 DaoMaster에서 DevOpenHelper로 만들고 사용자 정의DATABASE_NAME
  • DaoMaster류의 구조방법에서registerDaoClass(...)방법에 들어가면 이 조작은 실제적으로 XxxxBeanDao를class는 추상적인 부류인 AbstractDaoMaster의 맵:daoConfigMap에 추가되어 DaoConfig와 XxxxBeanDao를 추가합니다.class 바인딩:
  • DaoConfig 클래스에 들어가면 구성 방법에서 코드는 실제적으로 반사 메커니즘을 만드는 과정이고 이것은 모든 Dao에게 TableName,Property,Pk 등 일련의 매개 변수를 준비하는 것을 볼 수 있다.모든 Dao는 대응하는 DaoConfig를 만들어서 연결할 것이다. 구체적인 코드는 캡처하지 않는다. 이런 것들은 비교적 간단하지만 매우 중요하다. 뒤에도 언급할 것이다.

  • newSession();
  • 위의 내용을 이어서 DaoMaster 클래스로 돌아가면 DaoConfigMap이 실제적으로DaoSession 실례를 만드는 데 사용되는 매개 변수임을 볼 수 있다. 다음과 같다.
  • DaoSession 실례를 만들 때DaoSession 클래스에 들어가는 방법을 보면 DaoConfigMap의clone () 방법을 호출하여 Dao 파일에 대응하는 DaoConfig를 모두 얻고 캐시 입구를 만들 수 있다. 이 캐시 생성 방법은 DaoConfig 클래스의 initIdentityScope(IdentityScopeType)
  • DaoSession에서 모든 Bean 클래스에 대응하는 Dao 클래스의 실례를 만들고 XxxxBean.class와 대응하는 Dao 클래스가 연결되어 있습니다. 지금까지 GreenDao 프레임워크 내부에서 대상 관계 매핑 처리가 기본적으로 완료되었습니다.
  • 이때 2.2.1.의 예제 코드로, Bean 클래스의 운영 클래스인 XxxxBeanDao의 인스턴스를 쉽게 얻을 수 있습니다.

  • 3. 메모 정보
    주해의 설명은 공식 문서를 참고하면 됩니다. 매우 상세하고 비교 이론의 내용은 여기서 다시 설명할 필요가 없는 것 같습니다. 아래 링크를 참조하십시오.http://greenrobot.org/greendao/documentation/modelling-entities/
    4. 기본 응용 프로그램
    주로 예시를 통해 공식api를 참고하는 것을 배울 것이다.http://greenrobot.org/greendao/documentation/javadoc/
    4.1. 빈 만들기
    아래의 PeopleBean을 참조하세요.java 코드 및 주석
    //  :         Bean,    @Entity  
    @Entity
    public class PeopleBean {
        @Id
        //    ,    
        //  :        Long,      long
        private Long id;
        @NotNull
        private String name;
        private int age;
        private String province;
        private boolean isMale;
        @Unique
        private String idCard;
    
        //  :get、set  ,      ,        ,rebuild  ,     
    
        //  :toString          
        @Override
        public String toString() {
            return "PeopleBean{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", province='" + province + '\'' +
                    ", isMale=" + isMale +
                    ", idCard='" + idCard + '\'' +
                    '}';
        }
    }

    4.2. Dao 인스턴스 가져오기
    전제:rebuild 프로젝트
    4.2.1. DaoSession 인스턴스 가져오기
  • 주의해야 할 것은DaoSession 실례는 이 프로젝트에 @Entity 주석이 있는 빈이 만든Dao 클래스 실례를 포함하기 때문에DaoSession 실례는 단일 모드로 잠그는 것이 가장 좋다
  • 또는DaoSession을 이 프로젝트의 Application 클래스에 창설하면 사실상 단례
  • 를 형성할 수 있다.
    다음 예제 코드에서는 DaoSession 인스턴스를 가져오는 단일 예제 도구 클래스를 보여 줍니다.
    public class GreenDaoUtil {
        private static DaoSession daoSession;
        private final static String DATA_BASE_NAME = "test_01.db";
    
        public synchronized static DaoSession getDaoSession(Context context) {
            if (daoSession == null) {
                daoSession = new DaoMaster(new DaoMaster.DevOpenHelper(context, DATA_BASE_NAME).getWritableDb()).newSession();
            }
            return daoSession;
        }
    
    }

    4.2.2. Dao 인스턴스 가져오기
    GreenDaoUtil.getDaoSession(activity).getPeopleBeanDao();

    4.2.3. Dao 작업 첨삭 및 수정 사례
    복잡한 응용은 일일이 예시하지 않고, 뒤의 시리즈는 점차 구현될 것이다.
    
    GreenDaoUtil.getDaoSession(activity).getPeopleBeanDao().insert(peopleBean);
    
    GreenDaoUtil.getDaoSession(activity).getPeopleBeanDao().deleteByKey(peopleBean.getId());
    
    GreenDaoUtil.getDaoSession(activity).getPeopleBeanDao().update(peopleBean);
    
    //  
    List peopleBeanList = GreenDaoUtil.getDaoSession(activity).getPeopleBeanDao()
                            .queryBuilder()
                            .list();
    
    //   
    List peopleBeanList = GreenDaoUtil.getDaoSession(activity).getPeopleBeanDao()
                            .queryBuilder()
                            .where(PeopleBeanDao.Properties.Age.gt(30), PeopleBeanDao.Properties.IsMale.eq(true))
                            .list();

    주의: 검색 방법이 되돌아오는 List는 원본에서 볼 때, 영원히 null이 아닙니다. null에 대한 판단을 생략하고,foreach에서 직접 사용할 수 있습니다
    5. 결어
    이 부분은 기본적으로 아무런 구덩이도 없다. 비교적 간단하다. 아니면 관건을 요약하면 다음과 같다.
  • 응용층의 일부 얕은 층 원본에 대해 익히면 이후의 응용에 편리하다
  • 주해에 대한 숙지
  • 메인 키 Id, 반드시 포장류 롱형으로 각종 구덩이를 피해야 한다
  • DaoSession 인스턴스에는 단일 예
  • 가 필요합니다.
  • Bean 변수가 변경(또는 데이터베이스와 관련된 변경)되면rebuild 이후 데이터베이스에 대응하는 테이블 구조도 변경됩니다. 이때 schema 설정은 schemaVersion +1
  • 을 설정해야 합니다.

    좋은 웹페이지 즐겨찾기