前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个SQLite数据库ORM的船新版本,确定不了解一下?

一个SQLite数据库ORM的船新版本,确定不了解一下?

作者头像
Xiaolei123
修改2022-06-19 13:46:56
3620
修改2022-06-19 13:46:56
举报
文章被收录于专栏:肖蕾的博客肖蕾的博客

RoomLite

GitHub链接:https://github.com/xiaolei123/RoomLite Gitee链接:https://gitee.com/xcode_xiao/RoomLite

介绍

Android平台下,使用编译期注解生成Java文件,拒绝低性能。一个SQLite数据库ORM的船新版本。增删改查建表,排序正序倒序唯一性,表索引,多线程并发读写都不在话下。确定不了解一下?

获取
代码语言:javascript
复制
allprojects {
    repositories {
        ...
        maven { url 'https://www.jitpack.io' }
    }
}
代码语言:javascript
复制
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.创建数据库
代码语言:javascript
复制
public static class DataBase extends RoomLiteDatabase
{
    public DataBase()
    {
        // 数据库名称
        super("school");
    }
    
    // 所有的表Entity
    @Override
    public Class<?>[] getEntities()
    {
        return new Class[]{User.class};
    }
    
    // 是否允许在主线程中执行
    @Override
    public boolean allowRunOnUIThread()
    {
        return true;
    }
    
    // 数据库升级
    @Override
    public void onUpgrade(@Nullable SQLiteDatabase db, int oldVersion, int newVersion)
    {
        
    }
    
    // 数据库版本
    @Override
    public int version()
    {
        return 1;
    }
}
2.在数据库里创建表
代码语言:javascript
复制
@Entity(name = "User")
public class User
{
    @Column
    @PrimaryKey(autoGenerate = true)
    public int id;

    public String name = "当前时间:" + System.currentTimeMillis();

    @Ignore
    public Bitmap bitmap;
}
2.1声明字段为主键(并且自增长),自增长只有在类型为数字类型的时候才会生效
代码语言:javascript
复制
@PrimaryKey(autoGenerate = true)
2.2字段 NOT NULL
代码语言:javascript
复制
@Column(notNull = true)
2.3字段唯一 UNIQUE
代码语言:javascript
复制
@Column(unique = true)
2.4默认值 DEFAULT
代码语言:javascript
复制
@Column( defaultValue = "0")
2.5忽略某个字段
代码语言:javascript
复制
@Ignore
public Bitmap bitmap;
2.6支持自定义字段

第一步:在表类里声明自定义类型

代码语言:javascript
复制
@Entity(name = "User")
public class User
{
    public Date date;
}

第二步:继承对应的转换器

代码语言:javascript
复制
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();
    }
    /**
     * 从数据库的Cursor获取数据,并转换成对应 javaType 类型的数据
     *
     * @param value
     */
    @Override
    public Date cursorToJavaObject(long value)
    {
        return new Date(value);
    }
}

第三步:向RoomLite注册转换器

代码语言:javascript
复制
RoomLite.addConvert(new DateConvert());
3.创建索引 方式一
代码语言:javascript
复制
@Entity(name = "User", indices = {
        @Index(columnNames = {"id", "name"}),
        @Index(name = "index2", columnNames = {"id", "name"}),
        @Index(name = "index3", columnNames = {"id", "name"}, unique = true),
})
4.创建索引 方式二
代码语言:javascript
复制
@Column(index = true)
5.创建Dao
代码语言:javascript
复制
@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
代码语言:javascript
复制
DataBase dataBase = RoomLite.build(DataBase.class);
UserDao dao = dataBase.getDao(UserDao.class);
7.增删改查使用
7.1增
代码语言:javascript
复制
@Insert
public int addUser(User user);
@Insert
public void addUser(User[] users);
@Insert
public void addUserList(List<User> users);
7.2删除
代码语言:javascript
复制
@Delete
public int deleteUser(User user);
@Delete
public void deleteUser(User[] users);
@Delete
public void deleteUserList(List<User> users);
7.3改
代码语言:javascript
复制
@Update
public int updateUser(User user);
@Update
public void updateUser(User[] users);
@Update
public void updateUserList(List<User> users);
7.4查
代码语言:javascript
复制
// 查询所有
@Query(entity = User.class)
public List<User> queryAll();

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

// 查询总数
@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查询分页
代码语言:javascript
复制
@Query(entity = User.class, whereClause = "name like ?",limit=@Limit(index = "0", maxLength = "30"))
7.6查询占位符
代码语言:javascript
复制
@Query(entity = User.class, whereClause = "name like ?",limit=@Limit(index = "0", maxLength = "?"))
7.7查询排序-正序
代码语言:javascript
复制
@Query(entity = User.class, orderBy = @OrderBy(columnNames = {"id"}, type = OrderBy.Type.ASC))
7.8查询排序-倒序
代码语言:javascript
复制
@Query(entity = User.class, orderBy = @OrderBy(columnNames = {"id"}, type = OrderBy.Type.DESC))

End.

> 老群被封,+新Q群709287944

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RoomLite
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档