GreenDao3.2.0簡單使用

GreenDao操作數據庫性能非常好。
我們簡單介紹GreenDao3.2.0使用(估計GreenDao以後版本更新,使用規則不會改變),跟之前相比,簡單很多。

第一步

對Android Studio 中的工程目錄下的build.gradle文件和模塊目錄下的build.gradle文件進行設置
先設置工程下的build.gradle文件
這裏寫圖片描述

再設置模塊下的build.gradle文件
這裏寫圖片描述

這裏寫圖片描述

第二步

創建實體類

@Entity
public class User {
    @Id(autoincrement = true)
    private long id;
    private String name;
    private String sex;
    private int age;
    private int salary;
    }

同步一下工程,之前在build.gradle文件中配置的內容會自動生成一些類供我們使用
見圖片所示:
這裏寫圖片描述

第三步

創建GreenDaoManager,提供單例用於操作數據庫

public class GreenDaoManager {
    private DaoMaster mDaoMaster;

    private DaoSession mDaoSession;
    private static GreenDaoManager mInstance;//單例
    private GreenDaoManager() {
        if (mInstance == null) {
            //此處openhelper爲自動生成開發所使用,發佈版本需自定義,重寫SQLiteOpenHelper即可
            DaoMaster.DevOpenHelper devOpenHelper = new
                    DaoMaster.DevOpenHelper(MyApp.getContext(), "app_database", null);
            mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
            mDaoSession = mDaoMaster.newSession();
        }
    }

    public static GreenDaoManager getInstance() {
        if (mInstance == null) {
            synchronized (GreenDaoManager.class) {//保證異步處理安全操作
                if (mInstance == null) {
                    mInstance = new GreenDaoManager();
                }
            }
        }
        return mInstance;
    }
    public DaoMaster getMaster() {
        return mDaoMaster;
    }
    public DaoSession getSession() {
        return mDaoSession;
    }
    public DaoSession getNewSession() {
        mDaoSession = mDaoMaster.newSession();
        return mDaoSession;
    }
}

第四步

使用GreenDao進行增刪改查

public class MainActivity extends AppCompatActivity {
    //操作數據庫對象
    private UserDao mUserDao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //使用GreenDaoManager進行賦值
        mUserDao = getUserDao();
    }

    private UserDao getUserDao(){
        return GreenDaoManager.getInstance().getSession().getUserDao();
    }

    public void greenDao(View view) {
        User user = null;
        switch (view.getId()){
            case R.id.insert:
                for (int i = 1; i < 10; i++) {
                    user = new User();
                    user.setId(i);
                    user.setAge(12+i*i*5);
                    user.setName("狗蛋");
                    user.setSalary(10000);
                    user.setSex("男");
                    long insert = mUserDao.insert(user);
                    Log.d("flag", "----------------->greenDao: insert: " + insert);
                }
                break;
            case R.id.delete:
                //刪除特定位置數據
                mUserDao.deleteByKey(1l);
                break;
            case R.id.update:
                //查詢id是1位置的數據
                user = mUserDao.load(1l);
                //對其進行修改
                user.setName("蘇小小");
                mUserDao.update(user);
                String name = mUserDao.load(1l).getName();
                Log.d("flag", "----------------->greenDao: update name " +name);
                break;
            case R.id.query:
                QueryBuilder<User> builder = mUserDao.queryBuilder();
                Query<User> query = builder
                        .where(UserDao.Properties.Name.eq("狗蛋"),UserDao.Properties.Age.between(10,100))
                        .build();
                List<User> list = query.list();
                Log.d("flag", "----------------->greenDao: size " +list.size());
                break;
            default:
                Toast.makeText(this, "請問你想對我做什麼?", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

GreenDao註解

@Entity
public class User {
    @Id(autoincrement = true)
    private Long id;

    @Property(nameInDb = "USERNAME")
    private String name;

    @NotNull
    private int age;

    @Transient
    private int tempUsageCount;

    ...
}

@Entity 用於標識這是一個需要Greendao幫我們生成代碼的bean

@Id 標明主鍵,括號裏可以指定是否自增

@Property 用於設置屬性在數據庫中的列名(默認不寫就是保持一致)

@NotNull 非空

@Transient 標識這個字段是自定義的不會創建到數據庫表裏

@Unique 添加唯一約束

關係註解:(慢慢理解)

@Entity
public class Order {
    @Id private Long id;

    private long customerId;

    @ToOne(joinProperty = "customerId")
    private Customer customer;
}

@ToOne 是將自己的一個屬性與另一個表建立關聯

@Entity
public class User {
    @Id private Long id;

    @ToMany(referencedJoinProperty = "ownerId")
    private List<Site> ownedSites;
}

@Entity
public class Site {
    @Id private Long id;
    private long ownerId;
}
// ----------------------------
@Entity
public class User {
    @Id private Long id;
    @Unique private String authorTag;

    @ToMany(joinProperties = {
            @JoinProperty(name = "authorTag", referencedName = "ownerTag")
    })
    private List<Site> ownedSites;
}

@Entity
public class Site {
    @Id private Long id;
    @NotNull private String ownerTag;
}

// ----------------------------

@ToMany的屬性referencedJoinProperty,類似於外鍵約束。

@JoinProperty 對於更復雜的關係,可以使用這個註解標明目標屬性的源屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章