requery入门指南:5分钟快速掌握Java/Kotlin跨平台数据库查询
requery是一个轻量级但功能强大的对象映射和SQL生成库,专为Java/Kotlin/Android设计,支持RxJava和Java 8特性。它让开发者能够轻松地映射或创建数据库,在任何使用Java的平台上执行查询和更新操作,是跨平台数据库查询的理想选择。
🚀 为什么选择requery?
requery具有以下核心优势,使其在众多数据库工具中脱颖而出:
🌟 零反射机制
requery采用编译时注解处理生成实体模型类和映射属性,避免了运行时反射带来的性能损耗。在Android平台上,其查询性能几乎与使用标准Cursor和ContentValues API相当。
💻 跨平台支持
无论是传统Java应用、Kotlin项目还是Android开发,requery都能无缝适配。它支持多种数据库,包括PostgresSQL、MySQL、Oracle、SQL Server、SQLite等主流数据库。
📱 Android友好
专为Android平台优化,提供了与RecyclerView、Databinding和SQLCipher的集成支持。示例项目可参考requery-android/example。
🚀 非阻塞API
支持Java 8 Streams和RxJava Observables,轻松实现响应式编程,满足现代应用对异步操作的需求。
📦 快速开始
1️⃣ 环境准备
首先,克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/re/requery
2️⃣ 添加依赖
在Gradle项目中添加以下依赖:
repositories {
jcenter()
}
dependencies {
compile 'io.requery:requery:1.6.1'
compile 'io.requery:requery-android:1.6.1' // Android平台
annotationProcessor 'io.requery:requery-processor:1.6.1'
}
3️⃣ 定义实体
requery支持多种实体定义方式,包括抽象类、接口和不可变类型。
使用抽象类定义实体:
@Entity
abstract class AbstractPerson {
@Key @Generated
int id;
@Index("name_index")
String name;
@OneToMany
Set<Phone> phoneNumbers;
@Converter(EmailToStringConverter.class)
Email email;
@PostLoad
void afterLoad() {
updatePeopleList();
}
}
使用接口定义实体:
@Entity
public interface Person {
@Key @Generated
int getId();
String getName();
@OneToMany
Set<Phone> getPhoneNumbers();
String getEmail();
}
4️⃣ 执行查询
requery提供了类型安全的查询DSL,让查询操作变得简单直观。
Java查询示例:
Result<Person> query = data
.select(Person.class)
.where(Person.NAME.lower().like("b%")).and(Person.AGE.gt(20))
.orderBy(Person.AGE.desc())
.limit(5)
.get();
Kotlin查询示例:
data {
val result = select(Person::class) where (Person::age gt 21) and (Person::name eq "Bob") limit 10
}
5️⃣ 响应式查询
requery无缝集成RxJava,支持响应式查询:
Observable<Person> observable = data
.select(Person.class)
.orderBy(Person.AGE.desc())
.get()
.observable();
📚 核心功能
🔄 关系映射
requery支持一对一、一对多、多对一和多对多关系,通过注解轻松定义:
@Entity
abstract class AbstractPerson {
@Key @Generated
int id;
@ManyToMany
Result<Group> groups;
}
⚡ Java 8特性支持
充分利用Java 8的Stream和Optional特性:
data.select(Person.class)
.orderBy(Person.AGE.desc())
.get()
.stream().forEach(System.out::println);
public interface Person {
@Key @Generated
int getId();
String getName();
Optional<String> getEmail();
ZonedDateTime getBirthday();
}
🔄 Upsert支持
requery会根据不同数据库生成相应的upsert语句,简化数据插入更新操作:
- Oracle/SQL Server/HSQL:
merge into when matched/not matched - PostgresSQL:
on conflict do update(9.5+) - MySQL:
on duplicate key update
🎯 适用场景
requery适用于各种需要跨平台数据库操作的场景:
- 移动应用开发(Android)
- 企业级Java应用
- Kotlin后端服务
- 响应式应用开发
📖 学习资源
- 官方文档:项目README
- 示例代码:requery/example-springboot
- Kotlin支持:requery-kotlin
通过以上步骤,你已经掌握了requery的基本使用方法。这个强大的库将帮助你更高效地处理跨平台数据库查询任务,提升开发效率。现在就开始尝试使用requery,体验它带来的便捷与强大吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



