There is an ongoing outage on the primary CPAN mirror. It is possible to work around the issue by using MetaCPAN as a mirror.

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::MysqlPDK::DBI::Oracle)复用。

主要提供以下功能:

ATTRIBUTES

dsn

字符串,数据库连接字符串(必填)。

user

字符串,数据库用户名(必填)。

password

字符串,数据库密码(必填)。

dbi

延迟构建的 DBIx::Custom 对象,由子类实现 _buildDbi 方法生成。

REQUIRED METHODS

clone

克隆数据库对象。由具体实现类定义。

batchExecute

批量执行 SQL 的低层接口。由具体实现类定义。

METHODS

getAttrMembers($attrTypes, $dataObj)

根据属性类型展开对象成员。

支持的类型:

@

数组引用

%k

哈希键

%v

哈希值

返回值:

  • 标量上下文:属性成员哈希引用

  • 列表上下文:(属性成员哈希引用, 最大长度, 最小长度)

parseColumnMap($columnMap)

解析列与对象属性的映射关系。

支持的映射格式:

"column => attr | 类型"
"column | 类型"
"column"

返回值:

(单值属性映射, 列表属性映射, 属性类型哈希)

batchInsert($columnMap, $tableName, $dataObjs)

批量插入数据。

参数说明:

$columnMap

数组引用,定义列与属性的映射关系。

$tableName

字符串,目标表名。

$dataObjs

哈希引用或数组引用,存放数据对象。

逻辑流程:

  1. 解析映射关系,生成列与属性列表。

  2. 构造 SQL 插入语句。

  3. 展开单值/数组/哈希属性,生成参数集合。

  4. 调用 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.