一個SQLite數(shù)據(jù)庫ORM的船新版本,確定不了解一下?

RoomLite

GitHub鏈接:https://github.com/xiaolei123/RoomLite

Gitee鏈接:https://gitee.com/xcode_xiao/RoomLite

介紹

Android平臺下,使用編譯期注解生成Java文件,拒絕低性能。一個SQLite數(shù)據(jù)庫ORM的船新版本。增刪改查建表,排序正序倒序唯一性,表索引,多線程并發(fā)讀寫都不在話下。確定不了解一下?

獲取

allprojects {
    repositories {
        ...
        maven { url 'https://www.jitpack.io' }
    }
}
java:
dependencies {
    annotationProcessor 'com.github.xiaolei123:compiler:+'
    implementation 'com.github.xiaolei123:runtime:+'
}

kotlin:
dependencies {
    kapt 'com.github.xiaolei123:compiler:+'
    implementation 'com.github.xiaolei123:runtime:+'
}


使用說明

1.創(chuàng)建數(shù)據(jù)庫
public static class DataBase extends RoomLiteDatabase
{
    public DataBase()
    {
        // 數(shù)據(jù)庫名稱
        super("school");
    }
    
    // 所有的表Entity
    @Override
    public Class<?>[] getEntities()
    {
        return new Class[]{User.class};
    }
    
    // 是否允許在主線程中執(zhí)行
    @Override
    public boolean allowRunOnUIThread()
    {
        return true;
    }
    
    // 數(shù)據(jù)庫升級
    @Override
    public void onUpgrade(@Nullable SQLiteDatabase db, int oldVersion, int newVersion)
    {
        
    }
    
    // 數(shù)據(jù)庫版本
    @Override
    public int version()
    {
        return 1;
    }
}
2.在數(shù)據(jù)庫里創(chuàng)建表
@Entity(name = "User")
public class User
{
    @Column
    @PrimaryKey(autoGenerate = true)
    public int id;

    public String name = "當(dāng)前時間:" + System.currentTimeMillis();

    @Ignore
    public Bitmap bitmap;
}
2.1聲明字段為主鍵(并且自增長),自增長只有在類型為數(shù)字類型的時候才會生效
@PrimaryKey(autoGenerate = true)
2.2字段 NOT NULL
@Column(notNull = true)
2.3字段唯一 UNIQUE
@Column(unique = true)
2.4默認(rèn)值 DEFAULT
@Column( defaultValue = "0")
2.5忽略某個字段
@Ignore
public Bitmap bitmap;
2.6支持自定義字段

第一步:在表類里聲明自定義類型

@Entity(name = "User")
public class User
{
    public Date date;
}

第二步:繼承對應(yīng)的轉(zhuǎn)換器

public class DateConvert extends ToLongConvert<Date>
{
    public DateConvert()
    {
        super(Date.class);
    }
    @Override
    public Long convertToLong(Date javaObj)
    {
        Date date = (Date) javaObj;
        if (javaObj == null) 
            return null;
        return date.getTime();
    }
    /**
     * 從數(shù)據(jù)庫的Cursor獲取數(shù)據(jù),并轉(zhuǎn)換成對應(yīng) javaType 類型的數(shù)據(jù)
     *
     * @param value
     */
    @Override
    public Date cursorToJavaObject(long value)
    {
        return new Date(value);
    }
}

第三步:向RoomLite注冊轉(zhuǎn)換器

RoomLite.addConvert(new DateConvert());
3.創(chuàng)建索引 方式一
@Entity(name = "User", indices = {
        @Index(columnNames = {"id", "name"}),
        @Index(name = "index2", columnNames = {"id", "name"}),
        @Index(name = "index3", columnNames = {"id", "name"}, unique = true),
})
4.創(chuàng)建索引 方式二
@Column(index = true)
5.創(chuàng)建Dao
@Dao
public interface UserDao
{
    @Insert
    public int addUser(User user);

    @Delete
    public int deleteUser(User user);

    @Update
    public void update(User user);

    @Query(entity = User.class, limit = "0,1")
    public User query();
}
6.獲取DataBase實例,獲得Dao
DataBase dataBase = RoomLite.build(DataBase.class);
UserDao dao = dataBase.getDao(UserDao.class);
7.增刪改查使用
7.1增
@Insert
public int addUser(User user);
@Insert
public void addUser(User[] users);
@Insert
public void addUserList(List<User> users);
7.2刪除
@Delete
public int deleteUser(User user);
@Delete
public void deleteUser(User[] users);
@Delete
public void deleteUserList(List<User> users);
7.3改
@Update
public int updateUser(User user);
@Update
public void updateUser(User[] users);
@Update
public void updateUserList(List<User> users);
7.4查
// 查詢所有
@Query(entity = User.class)
public List<User> queryAll();

// 查詢第一個
@Query(entity = User.class, limit = "0,1")
public User query();

// 查詢總數(shù)
@Query(what = "count(id)", entity = User.class)
public int queryCount();

// 查詢所有的名字
@Query(what = "name", entity = User.class)
public String[] queryNames();

// 模糊查詢
@Query(entity = User.class, whereClause = "name like ?")
public User[] querySearch(String name);
7.5查詢分頁
@Query(entity = User.class, whereClause = "name like ?",limit=@Limit(index = "0", maxLength = "30"))
7.6查詢占位符
@Query(entity = User.class, whereClause = "name like ?",limit=@Limit(index = "0", maxLength = "?"))
7.7查詢排序-正序
@Query(entity = User.class, orderBy = @OrderBy(columnNames = {"id"}, type = OrderBy.Type.ASC))
7.8查詢排序-倒序
@Query(entity = User.class, orderBy = @OrderBy(columnNames = {"id"}, type = OrderBy.Type.DESC))

End.

感興趣的+> 709287944加Q群交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容