mysql.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package database
  2. import (
  3. "database/sql"
  4. "gorm.io/gorm"
  5. )
  6. type MysqlDataBase struct {
  7. db *gorm.DB
  8. }
  9. func NewGORMAdapter(db *gorm.DB) *MysqlDataBase {
  10. return &MysqlDataBase{db: db}
  11. }
  12. func (a *MysqlDataBase) Begin() (Tx, error) {
  13. return &GORMTxAdapter{tx: a.db.Begin()}, nil
  14. }
  15. func (a *MysqlDataBase) Commit() error {
  16. return a.db.Commit().Error
  17. }
  18. func (a *MysqlDataBase) Rollback() error {
  19. return a.db.Rollback().Error
  20. }
  21. func (a *MysqlDataBase) Exec(query string, args ...interface{}) (sql.Result, error) {
  22. res := a.db.Exec(query, args...)
  23. return &gormResultAdapter{res}, res.Error
  24. }
  25. func (a *MysqlDataBase) Query(query string, args ...interface{}) (*sql.Rows, error) {
  26. rows, err := a.db.Raw(query, args...).Rows()
  27. if err != nil {
  28. return nil, err
  29. }
  30. return rows, nil
  31. }
  32. type GORMTxAdapter struct {
  33. tx *gorm.DB
  34. }
  35. func (t *GORMTxAdapter) Commit() error {
  36. return t.tx.Commit().Error
  37. }
  38. func (t *GORMTxAdapter) Rollback() error {
  39. return t.tx.Rollback().Error
  40. }
  41. func (t *GORMTxAdapter) Exec(query string, args ...interface{}) (sql.Result, error) {
  42. res := t.tx.Exec(query, args...)
  43. return &gormResultAdapter{res}, res.Error
  44. }
  45. func (t *GORMTxAdapter) Query(query string, args ...interface{}) (*sql.Rows, error) {
  46. rows, err := t.tx.Raw(query, args...).Rows()
  47. if err != nil {
  48. return nil, err
  49. }
  50. return rows, nil
  51. }
  52. type gormResultAdapter struct {
  53. res *gorm.DB
  54. }
  55. func (r *gormResultAdapter) LastInsertId() (int64, error) {
  56. return r.res.RowsAffected, nil
  57. }
  58. func (r *gormResultAdapter) RowsAffected() (int64, error) {
  59. return r.res.RowsAffected, nil
  60. }
  61. func init() {
  62. Register("mysql", MY)
  63. }