使用xorm操作数据库—-建立用户模型&数据库增删改查基本API
单元目标
用xorm实现增删改查
案例:以注册为例
一、用xorm实现数据库的增删改查
这个文档已经梳理出了数据库增删改查一般套路
二、以用户系统为例,定义模型层
新建model层的user文件
定义用户结构体
package model
import "time"
type User struct {
//用户id
Id int64 `xorm:"pk autoincr bigint(20)" form:"id" json:"id"`
//手机号 唯一的
Mobile string `xorm:"varchar(20)" form:"mobile" json:"mobile"`
//用户密码 f(plainpwd+salt),MD5
Passwd string `xorm:"varchar(40)" form:"passwd" json:"-"`
//头像
Avatar string `xorm:"varchar(150)" form:"avatar" json:"avatar"`
//性别
Sex string `xorm:"varchar(2)" form:"sex" json:"sex"`
//昵称
Nickname string `xorm:"varchar(20)" form:"nickname" json:"nickname"`
// 随机数
Salt string `xorm:"varchar(10)" form:"salt" json:"-"`
//是否在线
Online int `xorm:"int(10)" form:"online" json:"online"`
//前端用户登录鉴权 chat?id=1&token=x
Token string `xorm:"varchar(40)" form:"token" json:"token"`
Memo string `xorm:"varchar(140)" form:"memo" json:"memo"`
//统计每天用户增量时间
Createat time.Time `xorm:"datetime" form:"createat" json:"createat"`
}
在模型层定义性别常量及使用
三、定义服务层
服务层service,专门用来存放数据库业务服务的,如:注册、登录,CURD相关API
//三、定义和业务相关的服务
服务层service,专门用来存放数据库业务服务的,如
注册、登录
//2、查询单个用户Find,参数userId
DbEngin.ID(userId).Get(&User)
//3、查询满足某一类条件的Search
result :=make([]User,0)
//Find得到多条记录
DbEngin.where("mobile=? ",moile).Find(&result)
//Get得到一条记录
DbEngin.where("mobile=? ",moile).Get(&User)
//4、创建一条记录Create
DBengin.InsertOne(&User)
//5、修改某条记录Update
DBengin.ID(userId).Update(&User)
// update ... where id = xx
DBengin.Where("a=? and b=?",a,b).Update(&User)
//Cols只修改某一个字段
DBengin.Where("a=? and b=?",a,b).Cols("nick_name").Update(&User)
//6、删除某条记录Delete
DBengin.ID(userId).Delete(&User)
四、密码相关
import (
"crypto/md5"
"encoding/hex"
"strings"
)
//密码加密
func Md5Encode(data string) string{
h := md5.New()
h.Write([]byte(data)) // 需要加密的字符串为 123456
cipherStr := h.Sum(nil)
return hex.EncodeToString(cipherStr)
}
//密码转大写
func MD5Encode(data string) string{
return strings.ToUpper(Md5Encode(data))
}
//验证密码
func ValidatePasswd(plainpwd,salt,passwd string) bool{
return Md5Encode(plainpwd+salt)==passwd
}
//创建加密密码
func MakePasswd(plainpwd,salt string) string{
return Md5Encode(plainpwd+salt)
}