NAME
PDK::DBI::Role - 通用数据库操作角色
SYNOPSIS
package My::DB;
use Moose;
with 'PDK::DBI::Role';
sub clone { ... }
sub batchExecute { ... }
# 使用
my $db = My::DB->new(
dsn => 'dbi:mysql:database=test;host=127.0.0.1;port=3306',
user => 'root',
password => '123456',
);
# 批量插入
$db->batchInsert(
[ 'id', 'name', 'tags | @' ],
'users',
{
u1 => User->new(id => 1, name => 'Tom', tags => [qw/a b/]),
u2 => User->new(id => 2, name => 'Jerry', tags => [qw/x y z/])
}
);
DESCRIPTION
PDK::DBI::Role
定义了一组通用数据库操作的属性与方法, 可被具体数据库适配模块(如 PDK::DBI::Mysql 或 PDK::DBI::Oracle)复用。
主要提供以下功能:
数据库连接基本属性(dsn、user、password)
批量插入方法("batchInsert")
列与对象属性映射关系解析("parseColumnMap")
属性展开辅助方法("getAttrMembers")
ATTRIBUTES
- dsn
-
字符串,数据库连接字符串(必填)。
- user
-
字符串,数据库用户名(必填)。
- password
-
字符串,数据库密码(必填)。
- dbi
-
延迟构建的 DBIx::Custom 对象,由子类实现
_buildDbi
方法生成。
REQUIRED METHODS
- clone
-
克隆数据库对象。由具体实现类定义。
- batchExecute
-
批量执行 SQL 的低层接口。由具体实现类定义。
METHODS
getAttrMembers($attrTypes, $dataObj)
根据属性类型展开对象成员。
支持的类型:
返回值:
标量上下文:属性成员哈希引用
列表上下文:(属性成员哈希引用, 最大长度, 最小长度)
parseColumnMap($columnMap)
解析列与对象属性的映射关系。
支持的映射格式:
"column => attr | 类型"
"column | 类型"
"column"
返回值:
(单值属性映射, 列表属性映射, 属性类型哈希)
batchInsert($columnMap, $tableName, $dataObjs)
批量插入数据。
参数说明:
逻辑流程:
解析映射关系,生成列与属性列表。
构造 SQL 插入语句。
展开单值/数组/哈希属性,生成参数集合。
调用
batchExecute
执行批量插入。
ERROR HANDLING
若
$columnMap
不是数组引用,抛出异常。若
$dataObjs
不是 HashRef 或 ArrayRef,抛出异常。SQL 或属性展开失败时,将通过
Carp::confess
抛出错误。
AUTHOR
WENWU YAN <968828@gmail.com>
LICENSE AND COPYRIGHT
This software is licensed under the same terms as Perl itself.