snail 1.1.1
snail: ^1.1.1 copied to clipboard
A library inspired by Spring Boot's JPA that facilitates SQLite database management in Flutter/Dart applications.
π Snail: A Simple ORM-like Library for Flutter/Dart π¦ #
Snail is a library inspired by Spring Boot's JPA, designed to simplify SQLite database management in Flutter/Dart applications. Easy to use like a snail π (but as functional as a rocket π)!
β¨ Features #
- β Create, Read, Update, Delete (CRUD) operations.
- π Dynamic query methods based on method naming conventions.
- π οΈ Table creation based on field definitions.
- π Automatic mapping of entities to database rows and vice versa.
- π Support for snake_case and camelCase conversions.
π₯ Installation #
Add the following dependency to your pubspec.yaml:
dependencies:
snail: ^1.1.1
Getting Started π #
Creating a Repository π¦ #
To create a repository for your model, extend the SnailRepository class:
import 'package:snail/snail.dart';
class UserRepository extends SnailRepository<User, int> {
UserRepository() : super(
tableName: 'users',
primaryKeyColumn: 'id',
defineFields: {
'id': int,
'name': String,
'email': String,
'isActive': bool,
},
);
@override
Map<String, dynamic> toMap(User entity) => {
'id': entity.id,
'name': entity.name,
'email': entity.email,
'isActive': entity.isActive,
};
@override
User fromMap(Map<String, dynamic> map) => User(
id: map['id'],
name: map['name'],
email: map['email'],
isActive: map['isActive'],
);
}
class User {
final int id;
final String name;
final String email;
final bool isActive;
User({required this.id, required this.name, required this.email, required this.isActive});
}
Using the Repository π§ #
void main() async {
final userRepository = UserRepository();
// Save a user
await userRepository.save(User(id: 1, name: 'John Doe', email: '[email protected]', isActive: true));
// Find a user by ID
final user = await userRepository.findById(1);
// Find all users
final users = await userRepository.findAll();
// Delete a user
await userRepository.deleteById(1);
}
Dynamic Methods π #
The dynamicMethod allows constructing SQL queries based on the method naming. The naming structure should follow standard conventions:
Naming Structure π οΈ #
- Prefixes:
findorfindAll - Connectors:
And,Or - Operators:
Between,LessThan,GreaterThan,Like,StartingWith,EndingWith,Containing,In,NotIn,OrderBy,True,False,IsNull,NotNull
Example Naming Conventions π #
findByTitle(String title);
findById(int id);
findByTitleAndDescription(String title, String description);
findByTitleOrDescription(String title, String description);
findByTitleStartingWith(String title);
findByTitleEndingWith(String title);
findByTitleContaining(String title);
findByIdLessThan(int id);
findByIdGreaterThan(int id);
findByDateBetween(DateTime startDate, DateTime endDate);
findByTitleStartingWithAndIdLessThan(String title, int id);
findByTitleContainingOrDescriptionLike(String title, String description);
findByIdIn(List<int> ids);
findByIdNotIn(List<int> ids);
findByTitleOrderByDate(String title);
findByTitleOrderByDateDesc(String title);
findByTitleAndDescriptionOrderByDate(String title, String description);
findByIsActiveTrue();
findByIsActiveFalse();
findByTitleIsNull();
findByTitleNotNull();
Usage Example π #
Future<List<User>> findByTitleStartingWith(String title) {
return dynamicMethod('findByTitleStartingWith', [title]);
}
CRUD Operations βοΈ #
Save or Update an Entity πΎ #
Future<int> save(T entity);
Save or Update Multiple Entities πΎπΎ #
Future<List<int>> saveAll(List<T> entities);
Find an Entity by ID π #
Future<T?> findById(ID id);
Find All Entities π #
Future<List<T>> findAll();
Delete an Entity by ID ποΈ #
Future<int> deleteById(ID id);
Delete All Entities ποΈποΈ #
Future<int> deleteAll(List<T>? entities);
Count Entities π’ #
Future<int> count();
Full API π #
Below is the complete list of methods provided by Snail Repository:
| Method | Description |
|---|---|
save(T entity) |
Saves or updates an entity in the database. |
saveAll(List<T> entities) |
Saves or updates multiple entities in the database. |
findById(ID id) |
Finds an entity by its primary key. |
findAll() |
Retrieves all entities from the database. |
deleteById(ID id) |
Deletes an entity by its primary key. |
deleteAll(List<T>? entities) |
Deletes all entities or a list of specified entities. |
count() |
Counts the total number of entities in the database. |
dynamicMethod(String name, List<Object?> params) |
Executes a query based on the dynamic method naming conventions. |
Contributing π€ #
Feel free to fork this repository and contribute by submitting a pull request. Your contributions are welcome! π‘
License π #
This project is licensed under the MIT License.
Made with β€οΈ for Flutter developers! π―