mysqlgo

package module
v0.0.0-...-0d63ce5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 6, 2019 License: MIT Imports: 7 Imported by: 0

README

MysqlGo

简介

MysqlGO基于 https://github.com/jmoiron/sqlx 进行二次封装,封装了golang对MySQL数据库的增删改查操作。

项目文件简介

  • Config.go

    MysqlGO数据库配置文件,主要管理数据库配置参数和数据库连接操作。

  • Model.go

    MysqlGo数据库操作处理文件,封装了MySQL数据库的增删改查操作处理。

安装说明

MysqlGo是golang下对MySQL数据库操作处理进行二次封装,在项目使用过程中,需要使用mysql driver,因为调用时需要引入

import (
    _  "https://github.com/go-sql-driver/mysql"
    "http://gitee.com/ironCoffers/MysqlGo"
) 

使用说明

1.数据库配置

var config := &Config{
    Alias : "配置别名",
    DSN : DSNConfig{
        HostName        :"127.0.0.1",
        HostPort        :"3306",	
        DBName		:"dbname",
        UserName	:"用户名",
        Password	:"密码",
        Charset		:"数据库字符集",	
        Prefix		:"",
    },
        MaxOpenConns 	:"设置最大打开的连接数"
	MaxIdleConns 	:"设置闲置的连接数"
	MaxLifetime	:"闲置连接的最大生命周期"	
}

2.验证配置

MysqlGo封装Connect(),利用golang SQL自带的ping()函数测试当前配置是否可用。若配置可用,则会将配置保存下来;否则,则报错提示。

Connect(config)
建议Connect()函数在服务启动时调用,以保存数据库配置数据,后期直接调用Model即可对数据库进行增删改查操作

3.数据库操作

数据库操作利用封装的Model进行数据库的增删改查操作

//配置Model
var userModel = &Model{
    TableName : "user", //预设关联的表名
}
TableName为预设Model关联的数据库表名,为后面使用userModel时直接关联表名生成对应的SQL语句
//添加记录
///INSERT INTO user(username, password) VALUE('admin', '123456')
var data = User{
	Account : "admin",
	Password : "123456",
}
id, err := userModel.Add(data)
Add()是Model中处理记录Insert操作的函数,函数传入的参数进行分析拆解,然后拼装成Insert SQL语句,并执行。

id为插入记录成功后返回在数据表中记录id

err为执行过程中出现错误的信息

//添加多条记录
///INSERT INTO user(username, password) VALUE('admin', '123456')
///NSERT INTO user(username, password) VALUE('test', '123456')
///INSERT INTO user(username, password) VALUE('abc', '123456')
var datas = []User{ 
    User {
        Account : "admin",
        Password : "123456",
    },
    User {
        Account : "test",
        Password : "123456",
    },
    User {
        Account : "abc",
        Password : "123456",
    },
}
err := userModel.AddAll(datas...)
AddAll()是Model中处理同一张数据表中多条记录Insert操作的函数,函数传入的参数进行分析拆解,然后拼装成Insert SQL语句,逐条执行。函数内部使用了事务处理机制,如果在操作过程中出现某条记录操作失败,则事务进行回滚;否则完成事务操作。
//更新记录
///UPDATE user SET password = "admin" WHERE username = 'admin'
var datas = map[string]interface{}{
		"password" : "admin123",
}
rows, err := userModel.Where("username = ?", "admin").Update(datas)
Update()是Model中处理数据表记录Update处理的函数。函数处理过程主要有两部分:

1.设置Where条件。若未设置Where,在执行Update()时会报错;

2.Update()函数入参。若未填写参数,在执行Update()时报错。

如Update()执行成功后,会返回Update()影响的行数

//查询数据
///SELECT username, password FROM user WHERE state = 1
user := struct{
    Username string
    Password string
} {}
err := userModel.Field("username", "password").Where("state = ?", 1).Find(&user)
Find()是Model处理查询数据的函数,此函数只返回一条记录。利用反射机制,将查询结果传递给Find()函数的参数。函数参数中的字段名称必须与Field的字段值名称,若不相同则会报错
//查询多条数据
user := []struct {
    Username 	string
    Password	string
}{}

err := userModel.Field("username", "password").Where("state = ?", 1).Limit(1, 10).Select(&user)
			
Select()是Model处理查询多条数据的函数,此函数返回多条记录。利用反射机制,将查询结果传递给Select()函数的参数。函数参数中的字段名称必须与Field的字段值名称,若不相同则会报错

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Connect

func Connect(configs ...*Config) (err error)

Connect 连接数据库并验证是否可以Ping

func DB

func DB(alias ...string) *sqlx.DB

DB 获取指定别名的数据库 如果不传入别名则默认获取别名为"default"的数据库

func Delete

func Delete(query string, args ...interface{}) (int64, error)

Delete 删除操作 /mysqlgo.Delete("delete from user where username = ?", "admin")

func Exec

func Exec(query string, args ...interface{}) (sql.Result, error)

Exec 执行SQL语句

func GetError

func GetError(code ErrorCode) error

GetError 获取错误信息

func Insert

func Insert(query string, args ...interface{}) (int64, error)

Insert 插入数据操作 /mysqlgo.Insert("insert into user(username, password) values(?,?)", "admin", "123456")

func InsertAll

func InsertAll(query string, datas ...[]interface{}) error

InsertAll 插入多条数据

func Query

func Query(query string, args ...interface{}) (*sql.Rows, error)

Query 原生查询多条数据操作 /mysqlgo.Query("select * from user where username = ? and status = ?", "admin", 1)

func QueryRow

func QueryRow(query string, args ...interface{}) (*sql.Row, error)

QueryRow 原生查询单条数据操作 /mysqlgo.QueryRow("select * from user where username = ? and status = ?", "admin", 1)

func Update

func Update(query string, args ...interface{}) (int64, error)

Update 更新数据操作 /mysqlgo.Update("update user set status = ?, password = ? where username = ?",1 , "test", "admin")

Types

type Builder

type Builder struct {
	SQLBuilder
	// contains filtered or unexported fields
}

Builder Model Builder

func Model

func Model(model interface{}) *Builder

Model 数据模型

func (*Builder) Add

func (builder *Builder) Add(data interface{}) (int64, error)

Add 新增数据

func (*Builder) AddAll

func (builder *Builder) AddAll(datas ...interface{}) error

AddAll 新增多条数据

func (*Builder) Delete

func (builder *Builder) Delete() (int64, error)

Delete 删除数据

func (*Builder) Distinct

func (builder *Builder) Distinct(distinct bool) *Builder

Distinct 用于返回唯一不同的值

func (*Builder) Field

func (builder *Builder) Field(field ...string) *Builder

Field 指定字段名称

func (*Builder) Find

func (builder *Builder) Find(dest interface{}) error

Find 查找单向数据

func (*Builder) Group

func (builder *Builder) Group(cols ...string) *Builder

Group 一个或多个列对结果集进行分组

func (*Builder) Having

func (builder *Builder) Having(having string) *Builder

Having 配合group方法完成从分组的结果中筛选

func (*Builder) Join

func (builder *Builder) Join(join Join) *Builder

Join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据

func (*Builder) LastSQL

func (builder *Builder) LastSQL() string

LastSQL 最后执行生成的SQL语句

func (*Builder) Limit

func (builder *Builder) Limit(rowCount, offset uint) *Builder

Limit 指定查询偏移量和记录数

func (*Builder) Order

func (builder *Builder) Order(order map[string]bool) *Builder

Order 对查询的结果排序 /For Example (id desc, name asc) => map { 'id' : true, 'name' : false}

func (*Builder) Select

func (builder *Builder) Select(dest interface{}) error

Select 查询多条数据

func (*Builder) Table

func (builder *Builder) Table(tablename, alias string) *Builder

Table 指定当前的数据表

func (*Builder) Union

func (builder *Builder) Union(selectSQL []string, all bool) *Builder

Union 用于合并两个或多个SELECT语句的结果集

func (*Builder) Update

func (builder *Builder) Update(data map[string]interface{}) (int64, error)

Update 更新数据

func (*Builder) Where

func (builder *Builder) Where(condition string, args ...interface{}) *Builder

Where 指定查询条件 /For Example Where("id = ? and name = ?", 1, "admin")

type Config

type Config struct {
	Alias        string
	HostName     string
	HostPort     string
	DBName       string
	UserName     string
	Password     string
	Charset      string
	Prefix       string
	MaxOpenConns int
	MaxIdleConns int
	MaxLifetime  int
	Enable       bool
}

Config is database connection configuration

type Data

type Data struct {
	Field string
	Value interface{}
}

Data 数据元素

type Error

type Error struct {
	// contains filtered or unexported fields
}

Error 错误信息

func (*Error) Error

func (e *Error) Error() string

type ErrorCode

type ErrorCode int

ErrorCode 错误信息编码

const (
	//TypeError 类型错误
	TypeError ErrorCode = 30001

	//TableNull 表为空
	TableNull ErrorCode = 40001
	//FieldNull 字段为空
	FieldNull ErrorCode = 40002
	//WhereNull 条件为空
	WhereNull ErrorCode = 40003
	//SQLNull SQL为空
	SQLNull ErrorCode = 40004
	//ModelNull Model为空
	ModelNull ErrorCode = 40005
	//UsernameNull 用户名为空
	UsernameNull ErrorCode = 40006
	//HostNameNull hostname为空
	HostNameNull ErrorCode = 40007
	//DBNameNull 数据库名为空
	DBNameNull ErrorCode = 40008
	//ConfigNull 数据库配置为空
	ConfigNull ErrorCode = 40009
	//DBAliasNull 数据库别名为空
	DBAliasNull ErrorCode = 40010
	//HostPortNull hostport为空
	HostPortNull ErrorCode = 40011
	//KeyNull key为空
	KeyNull ErrorCode = 40012
	//DBNull DB为空
	DBNull ErrorCode = 40013
	//DataNull Data为空
	DataNull ErrorCode = 40014
)

type IDB

type IDB interface {
	DBName() string
}

IDB DB数据库

type IModel

type IModel interface {
	ITable
	IDB
}

IModel Model方法

type ITable

type ITable interface {
	Table() Table
}

ITable Table表

type JOINTYPE

type JOINTYPE uint

JOINTYPE JOIN类型取值

const (
	//JOININNER 0为INNER JOIN: 如果表中有至少一个匹配,则返回行,等同于 JOIN
	JOININNER JOINTYPE = 0
	//JOINLEFT 1为LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
	JOINLEFT JOINTYPE = 1
	//JOINRIGHT 2为RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
	JOINRIGHT JOINTYPE = 2
	//JOINFULL 3为FULL JOIN: 只要其中一个表中存在匹配,就返回行
	JOINFULL JOINTYPE = 3
)

type Join

type Join struct {
	Statement string
	Type      JOINTYPE
}

Join 表之间关系 /Join语句,不用加join前缀 /Join类型,默认0 /0为INNER JOIN: 如果表中有至少一个匹配,则返回行,等同于 JOIN /1为LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 /2为RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 /3为FULL JOIN: 只要其中一个表中存在匹配,就返回行

type Limit

type Limit struct {
	Offset   uint //起始位置,默认为0
	RowCount uint //查询数量,默认为10
}

Limit 查询和操作的记录数量

type Order

type Order struct {
	Field string //排序字段
	Desc  bool   //排序方式: 默认false为asc排序,true为desc排序
}

Order 结果排序

type SQLBuilder

type SQLBuilder struct {
	// contains filtered or unexported fields
}

SQLBuilder SQL生成工具类

func (*SQLBuilder) BuildSQL

func (sql *SQLBuilder) BuildSQL(t SQLTYPE, data map[string]interface{}) string

BuildSQL 构造SQL

func (*SQLBuilder) Field

func (sql *SQLBuilder) Field(fields ...string)

Field 指定字段名称

func (*SQLBuilder) Where

func (sql *SQLBuilder) Where(condition string, args ...interface{})

Where add where

type SQLTYPE

type SQLTYPE int

SQLTYPE SQL类型

type Table

type Table struct {
	Name  string //表名
	Alias string //别名
}

Table 数据表

type Union

type Union struct {
	SelectSQL []string
	All       bool
}

Union 合并Select

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL