Jetpack Room - Room 查询返回列表无需判空、LIKE 关键字

Room 查询返回列表无需判空

1、基本介绍
  1. Room 的 @Query 方法返回 List 类型时,永远不会返回 null

  2. 没有数据时返回空列表,有数据时返回包含元素的列表

2、演示
(1)Application
  • MyApplication.java
java 复制代码
public class MyApplication extends Application {

    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();

        context = this;
    }

    public static Context getContext() {
        return context;
    }
}
(2)Entity
  • Member.java
java 复制代码
@Entity(tableName = "Member")
public class Member {

    @PrimaryKey(autoGenerate = true)
    private Integer id;

    @ColumnInfo(name = "name")
    private String name;

    @ColumnInfo(name = "age")
    private Integer age;

    public Member() {
    }

    @Ignore
    public Member(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Ignore
    public Member(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Member{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
(3)Dao
  • MemberDAO.java
java 复制代码
@Dao
public interface MemberDAO {

    @Insert
    void insert(Member member);

    @Query("DELETE FROM Member")
    void deleteAll();

    @Query("SELECT * FROM Member")
    List<Member> queryAll();

    @Query("SELECT * FROM Member WHERE name = :name")
    Member queryByName(String name);

    @Query("SELECT * FROM Member WHERE name LIKE '%' || :name || '%'")
    List<Member> queryByNameLike(String name);
}
(4)Database
  • MyDatabase.java
java 复制代码
@Database(entities = {Member.class}, version = 1, exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {

    public static final String DATABASE_NAME = "test.db";

    private static MyDatabase myDatabase;

    public static MyDatabase getInstance() {
        if (myDatabase == null) {
            myDatabase = Room.databaseBuilder(MyApplication.getContext(), MyDatabase.class, DATABASE_NAME).build();
        }
        return myDatabase;
    }

    public abstract MemberDAO getMemberDAO();
}
(5)Test
java 复制代码
new Thread(() -> {
    MemberDAO memberDAO = MyDatabase.getInstance().getMemberDAO();

    memberDAO.deleteAll();

    Log.i(TAG, "没有数据时");

    List<Member> members = memberDAO.queryAll();
    Member member = memberDAO.queryByName("jack");
    List<Member> membersLike = memberDAO.queryByNameLike("m");

    Log.d(TAG, "members: " + members);
    Log.d(TAG, "member: " + member);
    Log.d(TAG, "membersLike: " + membersLike);

    memberDAO.insert(new Member("Jack", 18));
    memberDAO.insert(new Member("Tom", 19));
    memberDAO.insert(new Member("Smith", 20));

    Log.i(TAG, "有数据时");

    List<Member> members2 = memberDAO.queryAll();
    Member member2 = memberDAO.queryByName("Jack");
    List<Member> membersLike2 = memberDAO.queryByNameLike("m");

    Log.d(TAG, "members: " + members2);
    Log.d(TAG, "member: " + member2);
    Log.d(TAG, "membersLike: " + membersLike2);
}).start();
复制代码
# 输出结果

没有数据时
members: []
member: null
membersLike: []
有数据时
members: [Member{id=4, name='Jack', age=18}, Member{id=5, name='Tom', age=19}, Member{id=6, name='Smith', age=20}]
member: Member{id=4, name='Jack', age=18}
membersLike: [Member{id=5, name='Tom', age=19}, Member{id=6, name='Smith', age=20}]

LIKE 关键字

1、基本介绍
  • SQLite 中的 LIKE 关键字用于模式匹配,通常与 WHERE 子句结合使用
通配符 描述
% 代表零个或多个字符
_ 代表单个字符
2、基本使用
sql 复制代码
-- 查找名字以 '张' 开头的记录

SELECT * FROM users WHERE name LIKE '张%';
sql 复制代码
-- 查找邮箱包含 'gmail' 的记录

SELECT * FROM users WHERE email LIKE '%gmail%';
sql 复制代码
-- 查找名字第二个字符是 'a' 的记录

SELECT * FROM users WHERE name LIKE '_a%';
java 复制代码
// Room 中的使用

@Query("SELECT * FROM Member WHERE name LIKE '%' || :name || '%'")
List<Member> queryByNameLike(String name);
相关推荐
goodluckyaa1 小时前
Warp shuffle函数
开发语言
j7~1 小时前
【C++】STL--Vector容器--拆析解剖Vector的实现以及Vector的底层详解(1)
开发语言·c++·vector·迭代器失效·迭代器的使用
平安的平安1 小时前
传统Java工程师第一次用飞算JavaAI生成SpringBoot项目
java
csjane10791 小时前
Redisson 限流原理
java·redis
xxwl5851 小时前
Python语言初步认识(1)
开发语言·python·学习
一个做软件开发的牛马1 小时前
MyBatis 从零实战:完整搭建可运行 Demo,注解与 XML 双模式开发详解
java·后端
z落落2 小时前
C# FileStream文件流读取文件
开发语言·c#
朝星2 小时前
Android开发[14]:网络优化之OkHttp
android·okhttp·kotlin
砍材农夫2 小时前
python环境|conda安装和使用(1)
开发语言·后端·python·conda