核心文件

本章节对核心ConfigConnectionDbManager源码分析,方便开发者快速上手。

Config

Orm自带连接池,因此继承了EasySwoole\Pool\Config,并且父级继承了EasySwoole\Spl\SplBean具有对类属性快速赋值的操作。

实例

  1. $config = new \EasySwoole\ORM\Db\Config();

基本配置

设置host

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setHost('127.0.0.1');
  3. $config->setHost('127.0.0.1:3306');

设置port

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setPort(3306);

设置用户名

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setUser('root');

设置密码

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setPassword('easyswoole');

设置数据库

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setDatabase('easyswoole');

设置charset

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setCharset('utf8');

设置严格模式

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setStrictType(true);

设置fetchMode

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setFetchMode(true);

设置返回结果为结果集

可以快速all()->toArray()

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setReturnCollection(true);

连接池配置

设置获取连接池对象超时时间

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setGetObjectTimeout(3.0);

设置检测连接存活执行回收和创建的周期

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setIntervalCheckTime(30*1000);

连接池对象最大闲置时间(秒)

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setMaxIdleTime(15);

设置最小连接池存在连接对象数量

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setMinObjectNum(5);

设置最大连接池存在连接对象数量

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setMaxObjectNum(15);

设置自动ping客户端链接的间隔

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $config->setAutoPing(5);

快速设置

  1. $config = new \EasySwoole\ORM\Db\Config([
  2. 'host' => '127.0.0.1',
  3. 'autoPing' => 5
  4. ]);

Connection

实例

  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $connection = new \EasySwoole\ORM\Db\Connection($config);

获取池

  1. /** @var \EasySwoole\ORM\Db\Connection $connection **/
  2. $connection->getClientPool();

defer

timeout参数为空 默认获取configtimeout,此方法会自动回收对象,用户无需关心。

  1. /** @var \EasySwoole\ORM\Db\Connection $connection **/
  2. $connection->defer();
  3. $connection->defer(3.0);

获取注入的config

  1. /** @var \EasySwoole\ORM\Db\Connection $connection **/
  2. $connection->getConfig();

DbManager

DbManager采用单例,注意:进程间数据是隔离的。

实例

  1. \EasySwoole\ORM\DbManager::getInstance();

回调事件

具体注入参数请看回调事件

  1. \EasySwoole\ORM\DbManager::getInstance()->onQuery(function (){
  2. });

注入连接池

参数:

  • $connection 连接池对象
  • $connectionName 连接池名称 默认default 可进行读写分离配置
  1. /** @var \EasySwoole\ORM\Db\Config $config **/
  2. $connection = new \EasySwoole\ORM\Db\Connection($config);
  3. \EasySwoole\ORM\DbManager::getInstance()->addConnection($connection);
  4. \EasySwoole\ORM\DbManager::getInstance()->addConnection($connection,'write');

获取连接池

参数:

  • $connectionName 连接池名称
  1. \EasySwoole\ORM\DbManager::getInstance()->getConnection();

query

参数:

  • $builder QueryBuilder
  • $raw 是否raw执行,否则预处理
  • $connection 指定连接池名称 或者 连接
  • $timeout 超时时间
  1. \EasySwoole\ORM\DbManager::getInstance()->query(new \EasySwoole\Mysqli\QueryBuilder());

事务

注意事务协程上下文。

参数:

  • $con 指定连接池名称 或者 连接
  • $timeout 超时时间
  1. \EasySwoole\ORM\DbManager::getInstance()->startTransaction();
  2. \EasySwoole\ORM\DbManager::getInstance()->commit();
  3. \EasySwoole\ORM\DbManager::getInstance()->rollback();

invoke

使用invoke方式,让ORM查询结束后马上归还资源,可以提高资源的利用率。

参数:

  • $call 回调函数
  • $connectionName 指定连接池名称
  • $timeout 超时时间
  1. \EasySwoole\ORM\DbManager::getInstance()->invoke(function (\EasySwoole\ORM\Db\ClientInterface $client){
  2. \EasySwoole\ORM\DbManager::getInstance()->startTransaction($client);
  3. \EasySwoole\ORM\DbManager::getInstance()->commit($client);
  4. \EasySwoole\ORM\DbManager::getInstance()->rollback($client);
  5. });

查询该连接是否处于事务上下文

  1. /** @var \EasySwoole\ORM\Db\ClientInterface $client **/
  2. \EasySwoole\ORM\DbManager::isInTransaction($client);