golang之xorm使用

golang之xorm使用

第一次写博客刚刚学golang语言,下面说一下xorm遇到的坑!!
有什么错误请大牛指点!!!

导入数据库驱动

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/go-xorm/xorm"
	"log"
)

声明数据库表的结构体

这里要说明一下结构体名字就是表名字以大写字母开头

type User struct {
	Account string `json:"account" xorm:"not null pk default '' VARCHAR(32)"`
	Password  string `json:"passwd" xorm:"not null default '' VARCHAR(32)"`
	Email   string `json:"email" xorm:"not null default '' VARCHAR(32)"`
	
}

上面的是声明名字为User的结构体,User就是表名字user
这里要说一下声明结构体一定要设置一个主键钮!!!不然后面的查询修改都不会起效!

Account string ` xorm:"pk"`

声明全局变量

var engine *xorm.Engine

创建orm引擎

func init() {
	var err error
	engine, err = xorm.NewEngine("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}
//然后同步表
	if  err := engine.Sync2(new(Account)); err != nil {
		log.Fatal("数据表同步失败:", err)
	}
}

这里解释一下 xorm.NewEngine是创建数据库连接(这个不是真正的连接,只是一个抽象而已)
"mysql"这个是数据库驱动
“root:root@tcp(127.0.0.1:3306)/test?charset=utf8” 格式是数据库账号:数据库密码@tcp(数据库ip地址:数据库端口)/数据库名字?charset=字符集
engine.Sync2这个是同步表,如果没有这个表会自动创建!!!!

插入数据

func Install (account,password,email string){
	str1 := new(User)
	str1.Account = account
	str1.Password = password
	str1.Email = email
	install, err := engine.Insert(str1)
	if err != nil {
		log.Fatal("注册失败:", err)
	}
	fmt.Println(install)

}

查询数据

func Find (account string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	fmt.Println(str)
	fmt.Println(a.Account,a.Password,a.Email)

}

Get所返回的类型是bool 和err

修改数据

func update (account,oldpwd,newpwd string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	if str == false {
		fmt.Println("用户名不存在!")
		return
	}
	if a.Password != oldpwd {
		fmt.Println("旧密码不一样!")
		return
	}
	a.Password = newpwd
	addr , err := engine.ID(account).Update(a)
	if err != nil{
		fmt.Println("修改失败!")
	}

	fmt.Println("修改成功!",addr)
}

engine.Update()返回两个参数一个是修改影响的行数,一个是err

贴上完整代码

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/go-xorm/xorm"
	"log"
)

//定义结构体(xorm支持双向映射)

type User struct {
	Account string `json:"account" xorm:"not null pk default '' VARCHAR(32)"`
	Password  string `json:"passwd" xorm:"not null default '' VARCHAR(32)"`
	Email   string `json:"email" xorm:"not null default '' VARCHAR(32)"`
}
//定义orm引擎
var engine  *xorm.Engine



//创建orm引擎
func init() {
	var err error
	engine, err = xorm.NewEngine("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}

	if  err := engine.Sync2(new(User)); err != nil {
		log.Fatal("数据表同步失败:", err)
	}

}


func main(){

	Install("123456","123456","[email protected]")
	Find("123456")
	update("123456","123456","1234567")
}

func Install (account,password,email string){
	str1 := new(User)
	str1.Account = account
	str1.Password = password
	str1.Email = email
	install, err := engine.Insert(str1)
	if err != nil {
		log.Fatal("注册失败:", err)
	}
	fmt.Println(install)

}

func Find (account string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	fmt.Println(str)
	fmt.Println(a.Account,a.Password,a.Email)

}

func update (account,oldpwd,newpwd string) {
	a := new(User)
	str, err := engine.ID(account).Get(a)
	if err != nil {
		log.Fatal("查询失败:", err)
	}
	if str == false {
		fmt.Println("用户名不存在!")
		return
	}

	if a.Password != oldpwd {
		fmt.Println("旧密码不一样!")
		return
	}
	a.Password = newpwd
	addr , err := engine.ID(account).Update(a)
	if err != nil{
		fmt.Println("修改失败!")
	}

	fmt.Println("修改成功!",addr)
}

更多xorm相关操作请看官网手册:http://www.xorm.io/docs/

你可能感兴趣的:(Go语言)