ORM
Type-safe ORM for Dart using code generation.
Why aim_orm?
- Type-Safe - Compile-time type checking for queries
- Code Generation - Query builders generated from schema definitions
- Dart 3 Records - Modern syntax for table definitions
- SQL-like API - Familiar patterns for database operations
Not Yet Supported
The following features are planned but not yet implemented:
- Relations - 1:1, 1:N, N:N relations and eager loading
- SQLite - Flutter support with SQLite driver
Packages
| Package | Description |
|---|---|
aim_orm | ORM abstraction layer (Column types, conditions) |
aim_orm_postgres | PostgreSQL implementation |
aim_orm_codegen | Code generator (build_runner) |
Quick Start
1. Install
yaml
# pubspec.yaml
dependencies:
aim_orm: ^0.0.1
aim_orm_postgres: ^0.0.1
aim_postgres: ^0.0.1
dev_dependencies:
build_runner: ^2.4.0
aim_orm_codegen: ^0.0.12. Define Schema
dart
import 'package:aim_orm/aim_orm.dart';
import 'package:aim_orm_postgres/aim_orm_postgres.dart';
import 'package:aim_postgres/aim_postgres.dart';
part 'tables.g.dart';
@PgTable('users')
final users = (
id: uuid('id').primaryKey(),
name: varchar('name', length: 255),
email: varchar('email', length: 255).unique(),
createdAt: timestamp('created_at').withDefault(DateTime.now()),
);3. Generate Code
bash
dart run build_runner build4. Query
dart
void main() async {
final db = await PostgresDatabase.connect(
'postgres://user:pass@localhost:5432/mydb',
);
// Type-safe queries
final allUsers = await db.users.select();
for (var user in allUsers) {
print(user.name); // Type-safe access
}
await db.close();
}Documentation
- Schema Definition - Tables, columns, and modifiers
- SELECT - Query data
- INSERT - Insert data
- UPDATE - Update data
- DELETE - Delete data
- Transactions - Atomic operations
- Migrations - Database migrations with CLI
- Code Generation - Setup and generated code
