第一次写博客刚刚学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
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/