xorm操作PostgreSQL数据库(增删改查实例)

末蓝、 2022-06-03 02:50 719阅读 0赞

一、xorm介绍

xorm是一个简单而强大的Go语言ORM库.通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。xorm支持两种风格的混用。

特性

  • 支持Struct和数据库表之间的灵活映射,并支持自动同步表结构
  • 事务支持
  • 支持原始SQL语句和ORM操作的混合执行
  • 使用连写来简化调用
  • 支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函数和结构体等方式作为条件
  • 支持级联加载Struct
  • 支持LRU缓存(支持memory, memcache, leveldb, redis缓存Store)和 Redis缓存
  • 支持反转,即根据数据库自动生成xorm的结构体
  • 支持事件
  • 支持created, updated, deleted和version记录版本(即乐观锁)

驱动支持

xorm当前支持的驱动和数据库如下:

  • Mysql: github.com/go-sql-driver/mysql
  • MyMysql: github.com/ziutek/mymysql/godrv
  • Postgres: github.com/lib/pq
  • Tidb: github.com/pingcap/tidb
  • SQLite: github.com/mattn/go-sqlite3
  • MsSql: github.com/denisenkom/go-mssqldb
  • MsSql: github.com/lunny/godbc
  • Oracle: github.com/mattn/go-oci8 (试验性支持)
  • ql: github.com/cznic/ql (试验性支持)

二、下载

  1. 安装xorm
  2. go get github.com/go-xorm/xorm
  3. 安装Postgres驱动
  4. go get github.com/lib/pq

三、实例

注意:要先导入postgreSQL驱动 _“github.com/lib/pq”

  1. package main
  2. import (
  3. "github.com/go-xorm/xorm"
  4. _ "github.com/lib/pq"
  5. "log"
  6. "fmt"
  7. )
  8. const (
  9. host = "localhost"
  10. port = 5432
  11. user = "postgres"
  12. password = "your_password"
  13. dbName="your_db_name"
  14. )
  15. func main() {
  16. user := &UserTbl{
  17. Id:1,
  18. Username :"Windows",
  19. Sex :1,
  20. Info : "操作系统",
  21. }
  22. SessionUserTest(user)
  23. }
  24. func getDBEngine() *xorm.Engine {
  25. psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",host,port,user,password,dbName)
  26. //格式
  27. engine, err := xorm.NewEngine("postgres", psqlInfo)
  28. if err != nil {
  29. log.Fatal(err)
  30. return nil
  31. }
  32. engine.ShowSQL() //菜鸟必备
  33. err = engine.Ping()
  34. if err != nil {
  35. log.Fatal(err)
  36. return nil
  37. }
  38. fmt.Println("connect postgresql success")
  39. return engine
  40. }
  41. //table name 为user_tbl
  42. type UserTbl struct {
  43. Id int
  44. Username string
  45. Sex int
  46. Info string
  47. }
  48. //查询所有
  49. func selectAll() {
  50. var user []UserTbl
  51. engine := getDBEngine()
  52. engine.SQL("select * from user_tbl").Find(&user)
  53. fmt.Println(user)
  54. }
  55. //条件查询
  56. func selectUser(name string) {
  57. var user []UserTbl
  58. engine := getDBEngine()
  59. engine.Where("user_tbl.username=?",name).Find(&user)
  60. fmt.Println(user)
  61. }
  62. //可以用Get查询单个元素
  63. func selectOne(id int) {
  64. var user UserTbl
  65. engine := getDBEngine()
  66. engine.Id(id).Get(&user)
  67. //engine.Alias("u").Where("u.id=?",id).Get(&user)
  68. fmt.Println(user)
  69. }
  70. //添加
  71. func InsertUser(user *UserTbl) bool {
  72. engine := getDBEngine()
  73. rows,err := engine.Insert(user)
  74. if err != nil {
  75. log.Println(err)
  76. return false
  77. }
  78. if rows == 0 {
  79. return false
  80. }
  81. return true
  82. }
  83. //删除(根据名称删除)
  84. func DeleteUser(name string) bool {
  85. user := UserTbl{
  86. Username:name,
  87. }
  88. engine := getDBEngine()
  89. rows,err := engine.Delete(&user)
  90. if err != nil {
  91. log.Println(err)
  92. return false
  93. }
  94. if rows == 0 {
  95. return false
  96. }
  97. return true
  98. }
  99. //利用sql删除
  100. func DeleteUserBySQL(name string) bool {
  101. engine := getDBEngine()
  102. result,err := engine.Exec("delete from user_tbl where username=?",name)
  103. if err != nil {
  104. log.Println(err)
  105. return false
  106. }
  107. rows,err :=result.RowsAffected()
  108. if err == nil && rows >0 {
  109. return true
  110. }
  111. return false
  112. }
  113. //更新
  114. func UpdateUser(user *UserTbl) bool {
  115. engine := getDBEngine()
  116. //Update(bean interface{}, condiBeans ...interface{}) bean是需要更新的bean,condiBeans是条件
  117. rows,err := engine.Update(user,UserTbl{Id:user.Id})
  118. if err != nil {
  119. log.Println(err)
  120. return false
  121. }
  122. if rows > 0 {
  123. return true
  124. }
  125. return false
  126. }
  127. //利用session进行增删改
  128. //用session的好处就是可以事务处理
  129. func SessionUserTest(user *UserTbl) {
  130. engine := getDBEngine()
  131. session := engine.NewSession()
  132. session.Begin()
  133. _,err := session.Insert(user)
  134. if err != nil {
  135. session.Rollback()
  136. log.Fatal(err)
  137. }
  138. user.Username="windows"
  139. _,err = session.Update(user,UserTbl{Id:user.Id})
  140. if err != nil {
  141. session.Rollback()
  142. log.Fatal(err)
  143. }
  144. _,err = session.Delete(user)
  145. if err != nil {
  146. session.Rollback()
  147. log.Fatal(err)
  148. }
  149. err = session.Commit()
  150. if err != nil {
  151. log.Fatal(err)
  152. }
  153. }

发表评论

表情:
评论列表 (有 0 条评论,719人围观)

还没有评论,来说两句吧...

相关阅读