05-Androidデータベースフレームワークの簡単な操作

10142 ワード

現在のプロジェクト開発では、SQL文を手書きで書くことなく、直接SQLiteデータベースにオブジェクトをマッピングできるデータベースフレームワークが避けられません.本稿で紹介するgreenDao、LitePalは軽量で高速なORMソリューションであり、私たちの開発効率、滴滴、運転を大幅に向上させました.
一、greenDao使用マニュアル
GreenDAOのgithubアドレス:https://github.com/greenrobot/greenDAO
1、まずgradle導入を行うには、ASに配置する必要がある
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
}

次にプロジェクトrootのbuild.gradle加入
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

最後にappのbuild.gradleの参加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin


greendao {
       //           
        schemaVersion 1  
       //   DAO,DaoMaster DaoSession   。        
        daoPackage 'com.greendao.gen' 
       //        。         build    (build/generated/source/greendao) 
        targetGenDir 'src/main/java'  
}
 
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
   // This is only needed if you want to use encrypted databases
   //          
    compile 'net.zetetic:android-database-sqlcipher:3.5.6'
}

構成が完了すると、AS->build->Make Projectの後、フレームワークはtargetGenDirのパスの下で使用したファイルを自動的に生成します.
2、ユーザーを配置して、開発作業を行い、新しいエンティティクラスを作成することができる.
@Entity
public class Message {
    @Id
    private Long id;

    private String msg;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

新しいエンティティークラス、フレームワークは自動的にMessageDaoクラスを生成します
では、次はこのMessageDaoクラスをどのように使用すればいいのでしょうか.
グローバルクラスでDaoSessionエンティティを定義し、このDaoSessionオブジェクトを使用して各エンティティDaoのインスタンスを取得し、コードを参照してください.
public class App extends Application {
    /** A flag to show how easily you can switch from standard SQLite to the encrypted SQLCipher. */
    public static final boolean ENCRYPTED = true;
    private DaoSession daoSession;
    @Override
    public void onCreate() {
        super.onCreate();
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "notes-db-encrypted" : "notes-db");
        Database db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb();
        daoSession = new DaoMaster(db).newSession();
    }
    public DaoSession getDaoSession() {
        return daoSession;
    }
}

次に使用する場所でDaoインスタンスを入手します
 MessageDao  mDao = ((App) getApplication()).getDaoSession().getMessageDao();

追加
mDao.insert(Message)

検索
      
List msgList = mDao.loadAll();    
      
Message msg= mDao.queryBuilder().where(UserDao.Properties.id.eq(888)).unique();

削除
         :    id     6   ,       
List msgList = (List) mDao.queryBuilder().where(MessageDao.Properties.Id.le(6)).build().list();  
        for (Message msg: msgList) {  
               mDao.delete(msg);  
        }  

      
mDao.deleteByKey(id);
      
mDao.deleteAll();

変更
mDao.update(Message)

データベースのアップグレード
  schemaVersion 2  
  make project   

3、greenDaoの中のいくつかの注釈を紹介し、実体注釈を開発するのに便利である.
@Entity(
        //                 ,           
        //             
        //           
        schema = "curschema",

        //           ,        ,        
        active = true,

        //           
        //             
        nameInDb = "table_message",

        // Define indexes spanning multiple columns here.
        indexes = {
                @Index(value = "name DESC", unique = true)
        },

        // DAO             (   true)
        //          ,        false
        //       GreenDAO      ,     false
        createInDb = false
)

基本プロパティ注記
@Id :   Long ,    @Id(autoincrement = true)     
@Property:                 ,            :@Property (nameInDb="name")
@NotNull:             
@Transient :                 

索引注記
@Index:  @Index             ,  name      ,     unique       
@Unique:               

リレーショナル注記
@ToOne:        (      )   
@ToMany:            

さて、greenDaoについてはここまでご紹介しますが、このライブラリはandroidシステムに最適化されています.メモリのオーバーヘッドが小さく、APIも使いやすいので、自分で研究してみましょう.
一、LitePal使用マニュアル
LitePalのgithubアドレス:https://github.com/LitePalFramework/LitePal
1、gradle導入、最新バージョン、githubで自分で見る
dependencies {
    compile 'org.litepal.android:core:1.5.1'
}

2、assetsフォルダでlitepalを新規作成して構成する.xmlファイル


    
    

    
    

    
    
    
    
    
    


3.LitePalApplicationを構成し、LitePalApplicationを継承できる
public class MyApplication extends LitePalApplication{

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
    ...
}

構成が完了すると、開発作業が開始されます.
1、エンティティクラスを作成し、データベースのテーブルに対応し、DataSupportを継承しなければならない
public class Album extends DataSupport {
    
    @Column(unique = true, defaultValue = "unknown")
    private String name;
    
    private float price;
    
    private byte[] cover;
    
    private List songs = new ArrayList();

    // generated getters and setters.
    ...
}
public class Song extends DataSupport {
    
    @Column(nullable = false)
    private String name;
    
    private int duration;
    
    @Column(ignore = true)
    private String uselessField;
    
    private Album album;

    // generated getters and setters.
    ...
}

エンティティクラスはlitepalで必要です.xmlでの構成

    
    


2、データベース操作
追加
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();

検索
  id  
Song song = DataSupport.find(Song.class, id);
    
List allSongs = DataSupport.findAll(Song.class);
    
List songs = DataSupport.where("name like ?", "song%").order("duration").find(Song.class);

削除
  id  
DataSupport.delete(Song.class, id);
      
DataSupport.deleteAll(Song.class, "duration > ?" , "350");

変更
     
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();
  id    
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.update(id);
      
Album albumToUpdate = new Album();
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.updateAll("name = ?", "album");

データベース非同期アクション
findAllAsyncはデータベースを非同期で検索し、結果はonFinishで返されます.
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
    @Override
    public  void onFinish(List t) {
        List allSongs = (List) t;
    }
});

非同期ストレージデータ
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.saveAsync().listen(new SaveCallback() {
    @Override
    public void onFinish(boolean success) {

    }
});

litePalは郭霖郭神が書いたオープンソースのフレームワークで、皆さんはソースコードを見て勉強することに興味があります.
まとめ
この2つのフレームワークのほかに、ormLite、Realmなどのフレームワークもありますが、個人的にはこの2つのフレームワークが使いやすいと思います.フレームワークは開発が容易で、効率が向上するだけで、能力を向上させるには、フレームワークをひたすら使用することはできません.自分で実現原理を理解する必要があります.もちろん、データベースの知識も基礎であり、分からないわけではありません.しかし、レンガ家として、急いでレンガを運ぶのが重要で、後で興味がある時間があって、また理解します!