使用xorm操作数据库—-建立用户模型&数据库增删改查基本API

单元目标

  • 用xorm实现增删改查

  • 案例:以注册为例

一、用xorm实现数据库的增删改查

这个文档已经梳理出了数据库增删改查一般套路 13、使用xorm操作数据库---建立用户模型&数据库增删改查基本API - 图1

二、以用户系统为例,定义模型层

新建model层的user文件 13、使用xorm操作数据库---建立用户模型&数据库增删改查基本API - 图2

定义用户结构体 13、使用xorm操作数据库---建立用户模型&数据库增删改查基本API - 图3

  1. package model
  2. import "time"
  3. type User struct {
  4. //用户id
  5. Id int64 `xorm:"pk autoincr bigint(20)" form:"id" json:"id"`
  6. //手机号 唯一的
  7. Mobile string `xorm:"varchar(20)" form:"mobile" json:"mobile"`
  8. //用户密码 f(plainpwd+salt),MD5
  9. Passwd string `xorm:"varchar(40)" form:"passwd" json:"-"`
  10. //头像
  11. Avatar string `xorm:"varchar(150)" form:"avatar" json:"avatar"`
  12. //性别
  13. Sex string `xorm:"varchar(2)" form:"sex" json:"sex"`
  14. //昵称
  15. Nickname string `xorm:"varchar(20)" form:"nickname" json:"nickname"`
  16. // 随机数
  17. Salt string `xorm:"varchar(10)" form:"salt" json:"-"`
  18. //是否在线
  19. Online int `xorm:"int(10)" form:"online" json:"online"`
  20. //前端用户登录鉴权 chat?id=1&token=x
  21. Token string `xorm:"varchar(40)" form:"token" json:"token"`
  22. Memo string `xorm:"varchar(140)" form:"memo" json:"memo"`
  23. //统计每天用户增量时间
  24. Createat time.Time `xorm:"datetime" form:"createat" json:"createat"`
  25. }

在模型层定义性别常量及使用

13、使用xorm操作数据库---建立用户模型&数据库增删改查基本API - 图4

三、定义服务层

服务层service,专门用来存放数据库业务服务的,如:注册、登录,CURD相关API 13、使用xorm操作数据库---建立用户模型&数据库增删改查基本API - 图5

  1. //三、定义和业务相关的服务
  2. 服务层service,专门用来存放数据库业务服务的,如
  3. 注册、登录
  4. //2、查询单个用户Find,参数userId
  5. DbEngin.ID(userId).Get(&User)
  6. //3、查询满足某一类条件的Search
  7. result :=make([]User,0)
  8. //Find得到多条记录
  9. DbEngin.where("mobile=? ",moile).Find(&result)
  10. //Get得到一条记录
  11. DbEngin.where("mobile=? ",moile).Get(&User)
  12. //4、创建一条记录Create
  13. DBengin.InsertOne(&User)
  14. //5、修改某条记录Update
  15. DBengin.ID(userId).Update(&User)
  16. // update ... where id = xx
  17. DBengin.Where("a=? and b=?",a,b).Update(&User)
  18. //Cols只修改某一个字段
  19. DBengin.Where("a=? and b=?",a,b).Cols("nick_name").Update(&User)
  20. //6、删除某条记录Delete
  21. DBengin.ID(userId).Delete(&User)

四、密码相关

  1. import (
  2. "crypto/md5"
  3. "encoding/hex"
  4. "strings"
  5. )
  6. //密码加密
  7. func Md5Encode(data string) string{
  8. h := md5.New()
  9. h.Write([]byte(data)) // 需要加密的字符串为 123456
  10. cipherStr := h.Sum(nil)
  11. return hex.EncodeToString(cipherStr)
  12. }
  13. //密码转大写
  14. func MD5Encode(data string) string{
  15. return strings.ToUpper(Md5Encode(data))
  16. }
  17. //验证密码
  18. func ValidatePasswd(plainpwd,salt,passwd string) bool{
  19. return Md5Encode(plainpwd+salt)==passwd
  20. }
  21. //创建加密密码
  22. func MakePasswd(plainpwd,salt string) string{
  23. return Md5Encode(plainpwd+salt)
  24. }