go实现mysql curd

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: go实现mysql curd
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)
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 关系型数据库 MySQL
go如何使用SQLX操作MySQL数据库?
sqlx是Go语言中一款流行的第三方数据库操作包,它扩展了Go标准库`database/sql`的功能,极大地简化了数据库操作流程并提供了丰富的数据库交互方法。
185 1
|
10月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
308 4
|
12月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
SQL 关系型数据库 MySQL
Go语言中使用 sqlx 来操作 MySQL
Go语言因其高效的性能和简洁的语法而受到开发者们的欢迎。在开发过程中,数据库操作不可或缺。虽然Go的标准库提供了`database/sql`包支持数据库操作,但使用起来稍显复杂。为此,`sqlx`应运而生,作为`database/sql`的扩展库,它简化了许多常见的数据库任务。本文介绍如何使用`sqlx`包操作MySQL数据库,包括安装所需的包、连接数据库、创建表、插入/查询/更新/删除数据等操作,并展示了如何利用命名参数来进一步简化代码。通过`sqlx`,开发者可以更加高效且简洁地完成数据库交互任务。
121 1
|
SQL 安全 关系型数据库
Go 语言中的 MySQL 事务操作
在现代应用中,确保数据完整与一致至关重要。MySQL的事务机制提供了可靠保障。本文首先解释了事务的概念及其ACID特性,随后介绍了如何在Go语言中使用`database/sql`包进行MySQL事务操作。通过一个银行转账的例子,演示了如何通过Go开启事务、执行操作并在必要时回滚或提交,确保数据一致性。最后,还讨论了不同事务隔离级别的含义及如何在Go中设置这些级别。通过本文的学习,开发者能更好地掌握MySQL事务的应用。
147 0
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
665 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
257 62
|
6月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
2月前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!

推荐镜像

更多