Flutter MySQL服务交互插件pip_services4_mysql的使用
Flutter MySQL服务交互插件pip_services4_mysql的使用
此模块是Pip.Services多语言微服务工具包的一部分。
该模块包含以下包:
- Build - 构造组件的标准工厂。
- Connect - 配置数据库连接的工具。
- Persistence - 可用于连接集合并执行基本CRUD操作的抽象类。
快速链接
使用
在你的包的pubspec.yaml
文件中添加以下依赖:
dependencies:
pip_services4_mysql: version
现在你可以从命令行安装包:
pub get
开发
开发时需要安装以下前置条件:
- Dart SDK 3
- Visual Studio Code 或你选择的其他IDE
- Docker
安装依赖:
pub get
运行自动化测试:
pub run test
生成API文档:
./docgen.ps1
在提交更改之前,运行docker化的构建和测试:
./build.ps1
./test.ps1
./clear.ps1
联系方式
该模块由以下人员创建和维护:
- Sergey Seroukhov
- Danil Prisiazhnyi
完整示例
MySqlConnectionResolver 示例
class Test {
var connectionResolver = MySqlConnectionResolver();
[@override](/user/override)
void configure(ConfigParams config) {
connectionResolver.configure(config);
// 其他配置逻辑
}
[@override](/user/override)
void setReferences(IReferences references) {
connectionResolver.setReferences(references);
// 设置引用逻辑
}
[@override](/user/override)
Future open(IContext? context) async {
String uri;
try {
uri = await connectionResolver.resolve(context);
} catch (err) {
logger.error(context, ApplicationException().wrap(err),
'Failed to resolve MySql connection');
}
// 其他逻辑
}
}
MySqlConnection 示例
MySqlConnection connection;
var mysqlUri = Platform.environment['MYSQL_URI'];
var mysqlHost = Platform.environment['MYSQL_HOST'] ?? 'localhost';
var mysqlPort = Platform.environment['MYSQL_PORT'] ?? '27017';
var mysqlDatabase = Platform.environment['MYSQL_DB'] ?? 'test';
var mysqlUser = Platform.environment['MYSQL_USER'] ?? 'mysql';
var mysqlPassword = Platform.environment['MYSQL_PASSWORD'] ?? 'mysql';
var dbConfig = ConfigParams.fromTuples([
'connection.uri', mysqlUri,
'connection.host', mysqlHost,
'connection.port', mysqlPort,
'connection.database', mysqlDatabase,
'credential.username', mysqlUser,
'credential.password', mysqlPassword
]);
connection = MySqlConnection();
connection.configure(dbConfig);
await connection.open(null);
MySqlPersistence 示例
class MyMySqlPersistence extends MySqlPersistence<MyData> {
MyMySqlPersistence() : base('mydata', null);
Future<String?> getByName(IContext? context, String name) async {
var query = "SELECT * FROM " + this.quotedTableName_() + " WHERE id=?";
var params = [name];
var res = await client_!.query(query, params);
if (res.toList().isEmpty)
this.logger_.trace(context, "Nothing found from %s with name = %s",
[this.tableName_, name]);
else
this.logger_.trace(context, "Retrieved from %s with name = %s",
[this.tableName_, name]);
var resValues = res.toList().isNotEmpty ? res.toList()[0].fields : null;
var item = this.convertToPublic_(resValues);
return item;
}
Future<MyData?> set(IContext? context, MyData item) async {
if (item == null) {
return null;
}
// 分配唯一ID
dynamic newItem = item;
if (newItem.id == null && this.autoGenerateId_) {
newItem = (newItem as ICloneable).clone();
newItem.id = IdGenerator.nextLong();
}
var row = this.convertFromPublic_(item);
var columns = this.generateColumns_(row);
var params = this.generateParameters_(row);
var setParams = this.generateSetParameters_(row);
var values = this.generateValues_(row);
values.addAll(List.from(values));
var query = "INSERT INTO " +
this.quotedTableName_() +
" (" +
columns +
") VALUES (" +
params +
")";
query += " ON DUPLICATE KEY UPDATE " + setParams;
var res = await client_!.query(query, values);
query = "SELECT * FROM " + this.quotedTableName_() + " WHERE id=?";
res = await client_!.query(query, [item.id]);
var resValues = res.toList().isNotEmpty ? res.toList()[0].fields : null;
newItem = this.convertToPublic_(resValues);
logger_.trace(context, "Set in %s with id = %s",
[this.quotedTableName_(), newItem.id]);
return newItem;
}
}
var persistence = MyMySqlPersistence();
persistence.configure(ConfigParams.fromTuples(["host", "localhost", "port", 27017]));
await persistence.open(null);
var item = await persistence.set(null, MyData());
print(item);
IdentifiableMySqlPersistence 示例
class MyMySqlPersistence extends IdentifiableMySqlPersistence<MyData, String> {
MyMySqlPersistence() : super('mydata', null);
[@override](/user/override)
void defineSchema_() {
this.clearSchema();
this.ensureSchema_('CREATE TABLE `' +
this.tableName_! +
'` (id VARCHAR(32) PRIMARY KEY, `key` VARCHAR(50), `content` TEXT)');
this.ensureIndex_(this.tableName_! + '_key', {'key': 1}, {'unique': true});
}
[@override](/user/override)
Future<DataPage<MyData>> getPageByFilter(
IContext? context, FilterParams? filter, PagingParams? paging) async {
filter = filter ?? new FilterParams();
var key = filter.getAsNullableString('key');
var filterCondition = null;
if (key != null) {
filterCondition += "`key`='" + key + "'";
}
return super
.getPageByFilter_(context, filterCondition, paging, null, null);
}
}
var persistence = MyMySqlPersistence();
persistence
.configure(ConfigParams.fromTuples(["host", "localhost", "port", 27017]));
await persistence.open(null);
var item = await persistence.create(null, MyData());
var page = await persistence.getPageByFilter(
null, FilterParams.fromTuples(["key", "ABC"]), null);
print(page.data);
var deleted = await persistence.deleteById(null, '1');
更多关于Flutter MySQL服务交互插件pip_services4_mysql的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter MySQL服务交互插件pip_services4_mysql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pip_services4_mysql
是一个用于在 Flutter 应用中与 MySQL 数据库进行交互的插件。它是 Pip.Services 库的一部分,Pip.Services 是一个用于构建微服务架构的跨平台库。pip_services4_mysql
提供了与 MySQL 数据库连接、查询和操作的功能。
安装
首先,你需要在 pubspec.yaml
文件中添加 pip_services4_mysql
依赖:
dependencies:
pip_services4_mysql: ^1.0.0
然后运行 flutter pub get
来安装依赖。
基本用法
-
创建 MySQL 连接
首先,你需要创建一个 MySQL 连接配置,并初始化
MySqlConnection
对象。import 'package:pip_services4_mysql/pip_services4_mysql.dart'; void main() async { var config = ConfigParams.fromTuples([ 'connection.host', 'localhost', 'connection.port', 3306, 'connection.database', 'testdb', 'credential.username', 'root', 'credential.password', 'password' ]); var connection = MySqlConnection(); connection.configure(config); await connection.open(null); print('Connected to MySQL database'); }
-
执行查询
你可以使用
MySqlPersistence
类来执行 SQL 查询。import 'package:pip_services4_mysql/pip_services4_mysql.dart'; void main() async { var config = ConfigParams.fromTuples([ 'connection.host', 'localhost', 'connection.port', 3306, 'connection.database', 'testdb', 'credential.username', 'root', 'credential.password', 'password' ]); var persistence = MySqlPersistence(); persistence.configure(config); await persistence.open(null); var result = await persistence.query('SELECT * FROM users'); print(result); await persistence.close(null); }
-
执行命令
你可以使用
MySqlPersistence
类来执行 SQL 命令,如INSERT
、UPDATE
、DELETE
等。import 'package:pip_services4_mysql/pip_services4_mysql.dart'; void main() async { var config = ConfigParams.fromTuples([ 'connection.host', 'localhost', 'connection.port', 3306, 'connection.database', 'testdb', 'credential.username', 'root', 'credential.password', 'password' ]); var persistence = MySqlPersistence(); persistence.configure(config); await persistence.open(null); await persistence.execute('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'john@example.com']); await persistence.close(null); }
-
关闭连接
当你完成数据库操作后,记得关闭连接以释放资源。
await persistence.close(null);
高级用法
pip_services4_mysql
还支持更高级的功能,如事务管理、连接池、重试策略等。你可以通过配置参数来启用这些功能。
var config = ConfigParams.fromTuples([
'connection.host', 'localhost',
'connection.port', 3306,
'connection.database', 'testdb',
'credential.username', 'root',
'credential.password', 'password',
'options.connect_timeout', 5000,
'options.idle_timeout', 30000,
'options.max_pool_size', 10
]);
错误处理
在处理数据库操作时,建议使用 try-catch
块来捕获和处理可能出现的异常。
try {
await persistence.open(null);
var result = await persistence.query('SELECT * FROM users');
print(result);
} catch (e) {
print('Error: $e');
} finally {
await persistence.close(null);
}