前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go实现mysql curd

go实现mysql curd

作者头像
仙士可
发布2022-01-26 08:37:14
3150
发布2022-01-26 08:37:14
举报
文章被收录于专栏:仙士可博客仙士可博客
代码语言:javascript
复制
package main

import (
   "crypto/md5"
   "encoding/hex"
   "encoding/json"
   "errors"
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
   "github.com/mitchellh/mapstructure"
   "strconv"
   "time"
)

type User struct {
   UserId      int    `db:"userId"`
   UserAccount string `db:"userAccount"`
   UserName    string `db:"userName"`
   Password    string `db:"password"`
   AddTime     int    `db:"addTime"`
}

var Db *sqlx.DB

func init() {
   database, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3300)/test")
   if err != nil {
      fmt.Println("open mysql failed,", err)
      return
   }
   Db = database
}

func (user *User) insertData(Db *sqlx.DB) error {
   password := md5.Sum([]byte(user.Password))

   r, err := Db.Exec("insert into user_list(userName,userAccount,password,addTime)values(?,?,?,?)", user.UserName, user.UserAccount, hex.EncodeToString(password[:]), time.Now().Unix())

   if err != nil {
      return errors.New("exec failed, " + err.Error())
   }
   id, err := r.LastInsertId()
   if err != nil {
      fmt.Println("exec failed ", err)
      return errors.New("exec failed, " + err.Error())
   }
   user.UserId = int(id)

   return nil
}

func selectUserList(Db *sqlx.DB, whereMap map[string]interface{}) ([]User, error) {
   query := "select * from user_list where 1"
   for k, v := range whereMap {
      switch v.(type) {
      case int:
         it := v.(int)
         query += " and " + k + " = " + strconv.Itoa(it)
         break
      default:
         newValue, _ := json.Marshal(v)
         query += " and " + k + " = " + "\"" + string(newValue) + "\""
      }
   }
   var user []User
   err := Db.Select(&user, query)
   if err != nil {
      return user, errors.New("exec failed" + err.Error())
   }
   fmt.Println(user)
   return user, nil
}

func (user *User) update(Db *sqlx.DB, updateMap map[string]interface{}) error {
   if len(updateMap) == 0 {
      return errors.New("updateMap don't empty")
   }
   query := "update user_list set "
   i := false
   for k, v := range updateMap {
      if i {
         query += ", "
      }
      i = true
      switch v.(type) {
      case int:
         it := v.(int)
         query += k + " = " + strconv.Itoa(it)
         break
      default:
         newValue, _ := json.Marshal(v)
         query += k + " = " + string(newValue)
      }
   }
   query += "  where userId=?"
   _, err := Db.Exec(query, user.UserId)
   if err != nil {
      return errors.New("exec failed" + err.Error())
   }
   err = mapstructure.Decode(updateMap, &user)
   if err != nil {
      return errors.New("exec failed" + err.Error())
   }
   return nil
}

func (user User) delete(Db *sqlx.DB) error {
   query := "delete from user_list where userId=?"
   _, err := Db.Exec(query, user.UserId)
   if err != nil {
      return errors.New("exec failed:" + err.Error())
   }
   return nil
}

func main() {
}

func insertDemo() {
   user := User{UserAccount: "tioncico", UserName: "仙士可", Password: "123456"}
   err := user.insertData(Db)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println("insert success:", user.UserId)
}

func updateDemo() {
   user := User{UserId: 1}
   updateMap := make(map[string]interface{}, 10)
   //updateMap["userId"] = 1
   updateMap["userName"] = "tioncico333"
   updateMap["password"] = "123"
   err := user.update(Db, updateMap)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(user)
}

func selectDemo() {
   whereMap := make(map[string]interface{}, 10)
   whereMap["userId"] = 1
   //whereMap["userName"] = "test"
   userList, err := selectUserList(Db, whereMap)
   if err != nil {
      fmt.Println(err)
   }
   //fmt.Println(userList)
   for v := range userList {
      fmt.Println(v)
   }
}

func deleteDemo() {
   user := User{UserId: 1}
   err := user.delete(Db)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(user)
}

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档