可以添加一个repository来访问数据可以通过以下方法来做:
1,先在/Users/code/gopath/src/study/gorm/db.go添加以下代码:

  1. package mysqltools
  2. import (
  3. "fmt"
  4. "github.com/jinzhu/gorm"
  5. _ "github.com/jinzhu/gorm/dialects/mysql"
  6. "log"
  7. "sync"
  8. )
  9. /*
  10. * MysqlConnectionPool
  11. * 数据库连接操作库
  12. * 基于gorm封装开发
  13. */
  14. type MysqlConnectionPool struct {
  15. }
  16. var instance *MysqlConnectionPool
  17. var once sync.Once
  18. var db *gorm.DB
  19. var errDB error
  20. func GetInstance() *MysqlConnectionPool {
  21. once.Do(func() {
  22. instance = &MysqlConnectionPool{}
  23. })
  24. return instance
  25. }
  26. /*
  27. * @fuc 初始化数据库连接(可在mail()适当位置调用)
  28. */
  29. func (m *MysqlConnectionPool) InitDataPool() (isSuccess bool) {
  30. db, errDB = gorm.Open(
  31. "mysql",
  32. "root:root@tcp(localhost:3306)/default?charset=utf8&parseTime=True&loc=Local")
  33. fmt.Println(errDB)
  34. if errDB != nil {
  35. log.Fatal(errDB)
  36. return false
  37. }
  38. //关闭数据库,db会被多个goroutine共享,可以不调用
  39. // defer db.Close()
  40. return true
  41. }
  42. /*
  43. * @fuc 对外获取数据库连接对象db
  44. */
  45. func (m *MysqlConnectionPool) GetMysqlDB() (dbCon *gorm.DB) {
  46. return db
  47. }

2,在/Users/code/gopath/src/study/model/student.go添加repository(现在和model一起)

  1. package studentModel
  2. import (
  3. "errors"
  4. "study/gorm"
  5. )
  6. type Student struct {
  7. //gorm.Model
  8. Id int `gorm:"primary_key;auto_increment"`
  9. Telephone string
  10. FirstName string
  11. LastName string
  12. }
  13. type Interface interface {
  14. SelectById(id int64) (stu Student, err error)
  15. }
  16. type StudentRepository struct {
  17. Interface
  18. }
  19. func (r *StudentRepository) SelectById(id int64) (stu []Student, err error) {
  20. // select
  21. var userRet []Student
  22. db := mysqltools.GetInstance().GetMysqlDB()
  23. // 使用id获取记录
  24. e := db.Where("id = ?", id).First(&userRet).Error
  25. if e != nil {
  26. return userRet, errors.New("查询失败")
  27. }
  28. return userRet, nil
  29. }

3,然后在/Users/code/gopath/src/study/test/abc.go里添加如下代码:

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "study/gorm"
  7. "study/model"
  8. )
  9. func init() {
  10. // init database pool
  11. isSuccess := mysqltools.GetInstance().InitDataPool()
  12. if !isSuccess {
  13. log.Println("init database pool failure...")
  14. os.Exit(1)
  15. }
  16. }
  17. func main() {
  18. stu := studentModel.StudentRepository{}
  19. data, err := stu.SelectById(1)
  20. if err != nil {
  21. fmt.Println(err);
  22. }
  23. fmt.Println(data)
  24. }

4,这样子就可以了,在/Users/code/gopath/src/study/test跑下go run abc.go,会看到以下结果:

  1. <nil>
  2. [{1 11 LejuRobot test}]

一些说明:
gopath目录: GOPATH="/Users/code/gopath",这个大家对应着看.

分类: web

标签:   golang