zoukankan      html  css  js  c++  java
  • Android SugarORM(1)

    Android Sugar ORM (1)

    Android Sugar ORM比我之前用过的ORM都要简单许多, 其目的是简化与Android中SQLite数据库的交互, 优点如下:

    • 消除了编写SQL查询以及与SQLite数据库进行交互
    • Sugar ORM负责创建数据库
    • Sugar ORM负责管理对象关系
    • Sugar ORM提供了用户数据库操作的简单清晰的api

    Android Sugar ORM 的使用

    1. 下载

    官方文档上写的是需要在build.gradle中添加, 如果使用的Android Studio, 需要在build.gradle:(Module: app)下的dependencies中添加即可, 官网示例:

    compile 'com.github.satyan:sugar:1.3'
    

    但是貌似compile已经被弃用了, 现在使用的是implementation, 而且有目前我了解到的, 有1.4和1.5两个版本可以使用

    implementation 'com.github.satyan:sugar:1.4'
    
    implementation 'com.github.satyan:sugar:1.5'
    

    本篇采用的Sugar ORM: 1.5

    2. 配置

    开始使用Sugar ORM前需要在AndroidManifest.xml中进行简单的配置, 有一个比较需要注意的点, 就是需要设置<application>标签下的android:name属性, 以及几项元数据, 你可以配置为你想要的包, 这时有两种方式, 比如:

    • android:name="com.orm.SugarApp"使用这种方式时, 只需进行配置元数据即可
    • android:name=".App"使用这种方式时需要另外做下面几项修改, 其中.App是任意你自定义的包
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name=".App">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="DATABASE" android:value="data.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" />
    </application>
    

    元数据标记都是可选的, 用途如下:

    元数据 描述
    DATABASE 生成的SQLite数据库名称
    VERSION 数据库架构的版本
    QUERT_LOG 记录日志, true:保存;false:不保存
    DOMAIN_PACKAGE_NAME 指定存在域/实体类的包名称

    配置完以后会发现android:name=".App"可能会报红, Android Studio下按下Alt+Enter创建App类, 这时候Android Studio会自动生成一个App类继承于Application改为继承于SugarApp, 并重写onCreate()onTerminate():

    public class App extends SugarApp {
        @Override
        public void onCreate() {
            super.onCreate();
            SugarContext.init(this);
        }
    
        @Override
        public void onTerminate() {
            SugarContext.terminate();
            super.onTerminate();
        }
    }
    
    

    3. 创建一个实体

    这里有两种写法

    public class Book extends SugarRecord<Book> {
        String title;
        String edition;
    
        public Book(){
        }
    
        public Book(String title, String edition){
            this.title = title;
            this.edition = edition;
        }
    }
    

    在网上搜一些资料, 有的第二种写法是继承的是Model类, 但是我试了后不行, 我改成了继承于SugarRecord类, 试验后发现也可以, 后来查资料发现这个Model可能是SugarRecord.Model, 可能是版本问题, 我用的Sugar ORM: 1.5版本, 发现SugarRecord下并没有Model, 这个还有待研究一下.

    @Table(name = "Book")
    public class Book extends SugarRecord {
        @Column(name = "title")
        String title;
        @Column(name = "edition")
        String edition;
    
        public Book(){
        }
    
        public Book(String title, String edition){
            this.title = title;
            this.edition = edition;
        }
    }
    

    4. 基本用法

    Sugar ORM执行CRUD操作非常简单, 只需要简单的效用类似于sava(), delete(), findById()这类的方法, 当你存入数据的时候, 会自动生成一个索引, 我们截取SugarRecord的一部分源代码就可以看到会有一个id:

    public class SugarRecord {
    
        public static final String SUGAR = "Sugar";
        private Long id = null;
    
        private static SQLiteDatabase getSugarDataBase() {
            return getSugarContext().getSugarDb().getDB();
        }
    
        public static <T> int deleteAll(Class<T> type) {
            return deleteAll(type, null);
        }
    
        public static <T> int deleteAll(Class<T> type, String whereClause, String... whereArgs) {
            return getSugarDataBase().delete(NamingHelper.toSQLName(type), whereClause, whereArgs);
        }
    }
    

    值得注意的是这个idlong类型的, 在用的时候应该没有什么太大的问题, 此外官网特别提醒了一下, Sugar ORM的记录索引值是从1开始的

    保存实体:

    Book book = new Book(ctx, "Title here", "2nd edition")
    book.save();
    

    加载实体:

    Book book = Book.findById(Book.class, 1);
    

    更新实体:

    Book book = Book.findById(Book.class, 1);
    book.title = "updated title here";
    book.edition = "3rd edition";
    book.save();
    

    删除实体:

    Book book = Book.findById(Book.class, 1);
    book.delete();
    

    批量操作:

    // 批量删除
    List<Book> books = Book.listAll(Book.class);
    Book.deleteAll(Book.class);
    
    // 批量查询
    Iterator<User> all = User.findAll(User.class);
    while (all.hasNext()){
        User next = all.next();
        Log.i("Sugar ORM", "onCreate: " + next.toString() + ":"+next.getId()+":"+next.username+":"+next.password);
    }
    
  • 相关阅读:
    uv纹理坐标设定与贴图规则
    数字人轻松学习Blender系列之八:建模-7
    数字人轻松学习Blender系列之八:建模-6
    数字人轻松学习Blender系列之八:建模-5
    数字人轻松学习Blender系列之八:建模-4
    数字人轻松学习Blender系列之八:建模-3
    数字人轻松学习Blender系列之八:建模-2
    数字人轻松学习Blender系列之八:建模-1
    【Blender】我的第一个3D模型--马克杯(附教程)
    Blender八仙桌建模教程
  • 原文地址:https://www.cnblogs.com/donpangpang/p/12746120.html
Copyright © 2011-2022 走看看