驱动开发

    适用场景:新增第三方数据库驱动、对已有驱动进行定制化、实现自定义回调处理等。

    接口文档:https://godoc.org/github.com/gogf/gf/database/gdb#Driver

    开发者自定义的驱动需要实现以下接口:

    其中的New方法用于根据Core数据库基础对象以及ConfigNode配置对象创建驱动对应的数据库操作对象,需要注意的是,返回的数据库对象需要实现DB接口。而数据库基础对象Core已经实现了DB接口,因此开发者只需要”继承”Core对象,然后根据需要覆盖对应的接口实现方法即可。

    DB接口

    DB接口是数据库操作的核心接口,这里主要对接口的几个重要方法做说明:

    1. Open方法用于创建特定的数据库连接对象,返回的是标准库的*sql.DB通用数据库对象。
    2. Do*系列方法的第一个参数为Link接口对象,该对象在master-slave模式下可能是一个主节点对象,也可能是从节点对象,因此如果在继承的驱动对象实现中使用该link参数时,注意当前的运行模式。slave节点在大部分的数据库主从模式中往往是不可写的。
    3. HandleSqlBeforeCommit方法将会在每一条SQL提交给数据库服务端执行时被调用做一些提交前的回调处理。

    通过以下方法注册自定义驱动到gdb模块:

    其中的驱动名称name可以是已有的驱动名称,例如mysql, mssql, pgsql等等,当出现同名的驱动注册时,新的驱动将会覆盖老的驱动。

    新增一个第三方的驱动到gdb模块中非常简单,可以参考gdb模块源码中已对接的数据库类型代码示例:

    1. https://github.com/gogf/gf/blob/master/database/gdb/gdb_driver_mysql.go
    2. https://github.com/gogf/gf/blob/master/database/gdb/gdb_driver_pgsql.go
    3. 更多: https://github.com/gogf/gf/blob/master/database/gdb

    为简化示例编写,我们这里实现了一个自定义的MySQL驱动,该驱动继承于gdb模块中已经实现的DriverMysql,并按照需要修改覆盖相应的接口方法。由于所有的SQL语句执行必定会通过DoQuery或者DoExec接口,因此我们在自定义的驱动中实现并覆盖这两个接口方法即可。

    我们看到,这里在包初始化方法init中使用了gdb.Register("MyDriver", &MyDriver{})来注册了了一个自定义名称的驱动。我们也可以通过gdb.Register("mysql", &MyDriver{})来覆盖已有的框架mysql驱动为自己的驱动。

    由于这里我们使用了一个新的驱动名称MyDriver,因此在gdb配置中的type数据库类型时,需要填写该驱动名称。以下是一个使用配置的示例: