usermodel.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package model
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "strings"
  6. "time"
  7. "github.com/tal-tech/go-zero/core/stores/sqlc"
  8. "github.com/tal-tech/go-zero/core/stores/sqlx"
  9. "github.com/tal-tech/go-zero/core/stringx"
  10. "github.com/tal-tech/go-zero/tools/goctl/model/sql/builderx"
  11. )
  12. var (
  13. userFieldNames = builderx.FieldNames(&User{})
  14. userRows = strings.Join(userFieldNames, ",")
  15. userRowsExpectAutoSet = strings.Join(stringx.Remove(userFieldNames, "id", "create_time", "update_time"), ",")
  16. userRowsWithPlaceHolder = strings.Join(stringx.Remove(userFieldNames, "id", "create_time", "update_time"), "=?,") + "=?"
  17. )
  18. type (
  19. UserModel interface {
  20. Insert(data User) (sql.Result, error)
  21. FindOne(id int64) (*User, error)
  22. FindOneByUser(user string) (*User, error)
  23. FindOneByName(name string) (*User, error)
  24. FindOneByMobile(mobile string) (*User, error)
  25. Update(data User) error
  26. Delete(id int64) error
  27. }
  28. defaultUserModel struct {
  29. conn sqlx.SqlConn
  30. table string
  31. }
  32. User struct {
  33. Id int64 `db:"id"`
  34. User string `db:"user"` // 用户
  35. Name string `db:"name"` // 用户名称
  36. Password string `db:"password"` // 用户密码
  37. Mobile string `db:"mobile"` // 手机号
  38. Gender string `db:"gender"` // 男|女|未公开
  39. Nickname string `db:"nickname"` // 用户昵称
  40. CreateTime time.Time `db:"create_time"`
  41. UpdateTime time.Time `db:"update_time"`
  42. }
  43. )
  44. func NewUserModel(conn sqlx.SqlConn) UserModel {
  45. return &defaultUserModel{
  46. conn: conn,
  47. table: "`user`",
  48. }
  49. }
  50. func (m *defaultUserModel) Insert(data User) (sql.Result, error) {
  51. query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, userRowsExpectAutoSet)
  52. ret, err := m.conn.Exec(query, data.User, data.Name, data.Password, data.Mobile, data.Gender, data.Nickname)
  53. return ret, err
  54. }
  55. func (m *defaultUserModel) FindOne(id int64) (*User, error) {
  56. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", userRows, m.table)
  57. var resp User
  58. err := m.conn.QueryRow(&resp, query, id)
  59. switch err {
  60. case nil:
  61. return &resp, nil
  62. case sqlc.ErrNotFound:
  63. return nil, ErrNotFound
  64. default:
  65. return nil, err
  66. }
  67. }
  68. func (m *defaultUserModel) FindOneByUser(user string) (*User, error) {
  69. var resp User
  70. query := fmt.Sprintf("select %s from %s where `user` = ? limit 1", userRows, m.table)
  71. err := m.conn.QueryRow(&resp, query, user)
  72. switch err {
  73. case nil:
  74. return &resp, nil
  75. case sqlc.ErrNotFound:
  76. return nil, ErrNotFound
  77. default:
  78. return nil, err
  79. }
  80. }
  81. func (m *defaultUserModel) FindOneByName(name string) (*User, error) {
  82. var resp User
  83. query := fmt.Sprintf("select %s from %s where `name` = ? limit 1", userRows, m.table)
  84. err := m.conn.QueryRow(&resp, query, name)
  85. switch err {
  86. case nil:
  87. return &resp, nil
  88. case sqlc.ErrNotFound:
  89. return nil, ErrNotFound
  90. default:
  91. return nil, err
  92. }
  93. }
  94. func (m *defaultUserModel) FindOneByMobile(mobile string) (*User, error) {
  95. var resp User
  96. query := fmt.Sprintf("select %s from %s where `mobile` = ? limit 1", userRows, m.table)
  97. err := m.conn.QueryRow(&resp, query, mobile)
  98. switch err {
  99. case nil:
  100. return &resp, nil
  101. case sqlc.ErrNotFound:
  102. return nil, ErrNotFound
  103. default:
  104. return nil, err
  105. }
  106. }
  107. func (m *defaultUserModel) Update(data User) error {
  108. query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, userRowsWithPlaceHolder)
  109. _, err := m.conn.Exec(query, data.User, data.Name, data.Password, data.Mobile, data.Gender, data.Nickname, data.Id)
  110. return err
  111. }
  112. func (m *defaultUserModel) Delete(id int64) error {
  113. query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
  114. _, err := m.conn.Exec(query, id)
  115. return err
  116. }