接下来我们封装一个操作MySQL的DAO。是一个持续的过程。今天是第一部分。 不知道一共几个部分,大概需要几天吧! 这个可以是在项目中直接用的呢。

操作MySQL的DAO1 概述2 基本结构3 构造方法初始化DSN初始化属性执行非查询类SQL执行查询类SQL插入单行插入多行更新删除查询多行查询一行查询单个值查询单列统计查询原生字符串

DAO,Data Access Object,数据操作对象,在项目中,定位是用于操作数据库的工具。通常是将常用的数据操作封装,在业务逻辑中,快速实现数据库的操作。

Go的该DAO,可以在GitHub上,访问,并在项目中直接使用。

下面介绍封装过程,希望可以和大家一起完成。

使用一个结构体 DAO 来实现,具体代码如下:

// DAO 结构体(类)type DAO struct {  // 连接对象  dsn string  // 操作数据库的抽象层对象  db *sql.DB  // SQL的子句  // 字段列表子句  field string  // from 子句  from string  // form 别名子句  as   string  // join 子句  joinType    []string  joinTable   []string  joinTableAs []string  joinOn      []string  // where子句独立存储  whereCond string  whereArgs []interface{}  // groupBy  groupBy string  // having  havingCond string  havingArgs []interface{}  // order  orderBy string  // limit子句  limit  string  offset string}基本思路就是,在构造时通过数据库服务器参数拼凑得到DSN,并打开数据连接池。底层使用 sql.DB 抽象层完成数据库操作。在执行SQL时,通过不同的子句方法设置不同部分的子句,最终执行时,拼凑到一起执行,完成CRUD。

构造方法用来得到 DAO 对象的引用在业务逻辑代码中调用。具体代码如下:

func New(config map[string]string) (*DAO, error) {  // 拼凑 DSN  DSN, err := initDSN(config)  if nil != err {    return nil, err  }  // 打开连接池  db, err := sql.Open("mysql", DSN)  if err != nil {    return nil, err  }  // 实例化DAO对象  dao := &DAO{    dsn: DSN,    db:  db,  }  // 初始化 属性  dao.Reset()  // 返回 DAO 对象  return dao, nil}构造方法,先通过配置参数(服务器信息)得到DSN,再打开数据库连接池,然后实例化DAO对象,再然后将属性初始化,最后返回该对象。

该方法的目的,就是得到DAO对象的引用!

接下来我们看如何初始化DSN和属性的。