wcj 6 năm trước cách đây
mục cha
commit
ca39c58a38
2 tập tin đã thay đổi với 280 bổ sung0 xóa
  1. 217 0
      common/src/qfw/util/mysql/mysql.go
  2. 63 0
      common/src/qfw/util/mysql/mysql_test.go

+ 217 - 0
common/src/qfw/util/mysql/mysql.go

@@ -0,0 +1,217 @@
+package mysql
+
+import (
+	"bytes"
+	"database/sql"
+	"fmt"
+	"log"
+	"strings"
+
+	_ "github.com/go-sql-driver/mysql"
+)
+
+type Mysql struct {
+	Address      string  //数据库地址:端口
+	UserName     string  //用户名
+	PassWord     string  //密码
+	DBName       string  //数据库名
+	DB           *sql.DB //数据库连接池对象
+	MaxOpenConns int     //用于设置最大打开的连接数,默认值为0表示不限制。
+	MaxIdleConns int     //用于设置闲置的连接数。
+}
+
+func (m *Mysql) Init() {
+	if m.MaxOpenConns <= 0 {
+		m.MaxOpenConns = 100
+	}
+	if m.MaxIdleConns <= 0 {
+		m.MaxIdleConns = 50
+	}
+	var err error
+	m.DB, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", m.UserName, m.PassWord, m.Address, m.DBName))
+	if err != nil {
+		log.Println(err)
+		return
+	}
+	m.DB.SetMaxOpenConns(m.MaxOpenConns)
+	m.DB.SetMaxIdleConns(m.MaxIdleConns)
+	err = m.DB.Ping()
+	if err != nil {
+		log.Println(err)
+	}
+}
+func (m *Mysql) Insert(tableName string, data map[string]interface{}) int64 {
+	fields := []string{}
+	values := []interface{}{}
+	placeholders := []string{}
+	for k, v := range data {
+		fields = append(fields, k)
+		values = append(values, v)
+		placeholders = append(placeholders, "?")
+	}
+	q := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)", tableName, strings.Join(fields, ","), strings.Join(placeholders, ","))
+	log.Println("mysql", q, values)
+	stmtIns, err := m.DB.Prepare(q)
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	defer stmtIns.Close()
+	result, err := stmtIns.Exec(values...)
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	id, err := result.LastInsertId()
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	return id
+}
+func (m *Mysql) Find(tableName string, query map[string]interface{}, fields, order string, start, pageSize int) *[]map[string]interface{} {
+	fs := []string{}
+	vs := []interface{}{}
+	for k, v := range query {
+		fs = append(fs, fmt.Sprintf("%s=?", k))
+		vs = append(vs, v)
+	}
+	var buffer bytes.Buffer
+	buffer.WriteString("select ")
+	if fields == "" {
+		buffer.WriteString("*")
+	} else {
+		buffer.WriteString(fields)
+	}
+	buffer.WriteString(" from ")
+	buffer.WriteString(tableName)
+	if len(fs) > 0 {
+		buffer.WriteString(" where ")
+		buffer.WriteString(strings.Join(fs, " and "))
+	}
+	if order != "" {
+		buffer.WriteString(" order by ")
+		buffer.WriteString(order)
+	}
+	if start > -1 && pageSize > 0 {
+		buffer.WriteString(" limit ")
+		buffer.WriteString(fmt.Sprint(start))
+		buffer.WriteString(",")
+		buffer.WriteString(fmt.Sprint(pageSize))
+	}
+	q := buffer.String()
+	log.Println(q, vs)
+	stmtOut, err := m.DB.Prepare(q)
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	defer stmtOut.Close()
+
+	rows, err := stmtOut.Query(vs...)
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+
+	columns, err := rows.Columns()
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	list := []map[string]interface{}{}
+	for rows.Next() {
+		scanArgs := make([]interface{}, len(columns))
+		values := make([]interface{}, len(columns))
+		ret := make(map[string]interface{})
+		for k, _ := range values {
+			scanArgs[k] = &values[k]
+		}
+		err = rows.Scan(scanArgs...)
+		if err != nil {
+			log.Println(err)
+			break
+		}
+
+		for i, col := range values {
+			if v, ok := col.([]uint8); ok {
+				ret[columns[i]] = string(v)
+			} else {
+				ret[columns[i]] = col
+			}
+		}
+		list = append(list, ret)
+	}
+	return &list
+}
+func (m *Mysql) FindOne(tableName string, query map[string]interface{}, fields, order string) *map[string]interface{} {
+	list := m.Find(tableName, query, fields, order, 0, 1)
+	if len(*list) == 1 {
+		temp := (*list)[0]
+		return &temp
+	}
+	return nil
+}
+
+//修改
+func (m *Mysql) Update(tableName string, query, update map[string]interface{}) bool {
+	q_fs := []string{}
+	u_fs := []string{}
+	values := []interface{}{}
+	for k, v := range update {
+		q_fs = append(q_fs, fmt.Sprintf("%s=?", k))
+		values = append(values, v)
+	}
+	for k, v := range query {
+		u_fs = append(u_fs, fmt.Sprintf("%s=?", k))
+		values = append(values, v)
+	}
+	q := fmt.Sprintf("update %s set %s where %s", tableName, strings.Join(q_fs, ","), strings.Join(u_fs, " and "))
+	log.Println(q, values)
+	stmtIns, err := m.DB.Prepare(q)
+	if err != nil {
+		log.Println(err)
+		return false
+	}
+	defer stmtIns.Close()
+	result, err := stmtIns.Exec(values...)
+	if err != nil {
+		log.Println(err)
+		return false
+	}
+	count, err := result.RowsAffected()
+	if err != nil {
+		log.Println(err)
+		return false
+	}
+	return count > 0
+}
+
+//删除
+func (m *Mysql) Delete(tableName string, query map[string]interface{}) bool {
+	fields := []string{}
+	values := []interface{}{}
+	for k, v := range query {
+		fields = append(fields, fmt.Sprintf("%s=?", k))
+		values = append(values, v)
+	}
+	q := fmt.Sprintf("delete from %s where %s", tableName, strings.Join(fields, " and "))
+	log.Println(q, values)
+	stmtIns, err := m.DB.Prepare(q)
+	if err != nil {
+		log.Println(err)
+		return false
+	}
+	defer stmtIns.Close()
+	result, err := stmtIns.Exec(values...)
+	if err != nil {
+		log.Println(err)
+		return false
+	}
+	count, err := result.RowsAffected()
+	if err != nil {
+		log.Println(err)
+		return false
+	}
+	return count > 0
+}

+ 63 - 0
common/src/qfw/util/mysql/mysql_test.go

@@ -0,0 +1,63 @@
+package mysql
+
+import (
+	"log"
+	"qfw/util"
+	"testing"
+	"time"
+)
+
+func Test_find(t *testing.T) {
+	mysql := &Mysql{
+		DBName:   "jianyu",
+		Address:  "192.168.3.207:3366",
+		UserName: "root",
+		PassWord: "Topnet123",
+	}
+	mysql.Init()
+
+	log.Println(mysql.Find("person", nil, "", "", 0, 10))
+}
+func Test_one(t *testing.T) {
+	mysql := &Mysql{
+		DBName:   "jianyu",
+		Address:  "192.168.3.207:3366",
+		UserName: "root",
+		PassWord: "Topnet123",
+	}
+	mysql.Init()
+
+	log.Println(mysql.FindOne("person", map[string]interface{}{"id": 6}, "id,name,age", ""))
+}
+func Test_delete(t *testing.T) {
+	mysql := &Mysql{
+		DBName:   "jianyu",
+		Address:  "192.168.3.207:3366",
+		UserName: "root",
+		PassWord: "Topnet123",
+	}
+	mysql.Init()
+
+	log.Println(mysql.Delete("person", map[string]interface{}{"name": "test", "age": 100, "id": 4}))
+
+}
+func Test_insert(t *testing.T) {
+	mysql := &Mysql{
+		DBName:   "jianyu",
+		Address:  "192.168.3.207:3366",
+		UserName: "root",
+		PassWord: "Topnet123",
+	}
+	mysql.Init()
+	now := time.Now()
+	log.Println(mysql.Insert("jianyu_order", map[string]interface{}{
+		"order_money":   1,
+		"user_nickname": "公子王",
+		"user_openid":   "test",
+		"content":       "jljslkdjfkljsd",
+		"prepay_id":     "123456",
+		"code_url":      "http://kjlkjdskf",
+		"out_trade_no":  "fskdjfljsdflkj",
+		"create_time":   util.FormatDate(&now, util.Date_Full_Layout),
+	}))
+}