xorm操作PostgreSQL数据库(增删改查实例)
来源:互联网 发布:查看淘宝店铺销售额 编辑:程序博客网 时间:2024/06/08 08:57
一、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 (试验性支持)
二、下载
安装xorm
go get github.com/go-xorm/xorm
安装Postgres驱动
go get github.com/lib/pq
三、实例
注意:要先导入postgreSQL驱动 _"github.com/lib/pq"
package mainimport ("github.com/go-xorm/xorm"_ "github.com/lib/pq""log""fmt")const (host = "localhost"port = 5432user = "postgres"password = "your_password" dbName="your_db_name")func main() {user := &UserTbl{Id:1,Username:"Windows",Sex :1,Info : "操作系统",}SessionUserTest(user)}func getDBEngine() *xorm.Engine {psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",host,port,user,password,dbName)//格式engine, err := xorm.NewEngine("postgres", psqlInfo)if err != nil {log.Fatal(err)return nil}engine.ShowSQL() //菜鸟必备err = engine.Ping()if err != nil {log.Fatal(err)return nil}fmt.Println("connect postgresql success")return engine}//table name 为user_tbltype UserTbl struct {Id intUsernamestringSex intInfo string}//查询所有func selectAll() {var user []UserTblengine := getDBEngine()engine.SQL("select * from user_tbl").Find(&user)fmt.Println(user)}//条件查询func selectUser(name string) {var user []UserTblengine := getDBEngine()engine.Where("user_tbl.username=?",name).Find(&user)fmt.Println(user)}//可以用Get查询单个元素func selectOne(id int) {var user UserTblengine := getDBEngine()engine.Id(id).Get(&user)//engine.Alias("u").Where("u.id=?",id).Get(&user)fmt.Println(user)}//添加func InsertUser(user *UserTbl) bool {engine := getDBEngine()rows,err := engine.Insert(user)if err != nil {log.Println(err)return false}if rows == 0 {return false}return true}//删除(根据名称删除)func DeleteUser(name string) bool {user := UserTbl{Username:name,}engine := getDBEngine()rows,err := engine.Delete(&user)if err != nil {log.Println(err)return false}if rows == 0 {return false}return true}//利用sql删除func DeleteUserBySQL(name string) bool {engine := getDBEngine()result,err := engine.Exec("delete from user_tbl where username=?",name)if err != nil {log.Println(err)return false}rows,err :=result.RowsAffected()if err == nil && rows >0 {return true}return false}//更新func UpdateUser(user *UserTbl) bool {engine := getDBEngine()//Update(bean interface{}, condiBeans ...interface{}) bean是需要更新的bean,condiBeans是条件rows,err := engine.Update(user,UserTbl{Id:user.Id})if err != nil {log.Println(err)return false}if rows > 0 {return true}return false}//利用session进行增删改//用session的好处就是可以事务处理func SessionUserTest(user *UserTbl) {engine := getDBEngine()session := engine.NewSession()session.Begin()_,err := session.Insert(user)if err != nil {session.Rollback()log.Fatal(err)}user.Username="windows"_,err = session.Update(user,UserTbl{Id:user.Id})if err != nil {session.Rollback()log.Fatal(err)}_,err = session.Delete(user)if err != nil {session.Rollback()log.Fatal(err)}err = session.Commit()if err != nil {log.Fatal(err)}}
阅读全文
0 0
- xorm操作PostgreSQL数据库(增删改查实例)
- golang操作postgreSQL(增删改查实例)
- 数据库操作增删改查
- 数据库操作--增删改查
- C#Winfrom数据库增删改查实例--SQL操作版
- JDBC实现数据库的增删改查操作实例
- PostgreSql 增删改查
- php增删改查操作实例详解
- PHP增删改查操作实例详解
- Sqlite3 增删改查操作实例
- servlet+jsp数据库增删改查实例
- SpringBoot 数据库增删改查实例
- iOS基础教程-SQLite数据库操作(二简单实例学生信息增删改查数据库操作)
- c# 数据库增删改查操作
- c#操作access数据库--增删改查
- JAVA数据库基本操作,增删改查
- CodeIgniter 数据库操作 -- 增删改查
- django数据库基本操作增删改查
- 17. 排序二叉树
- C++ 中 opencv Mat 变量的常见运算
- 刷新数据
- Marthon docker 配置fluent示例 以及tag使用
- 学习7
- xorm操作PostgreSQL数据库(增删改查实例)
- jquery 获取上传图片的大小
- 学习Ajax——入门篇02
- leetcode 472. Concatenated Words 连接字符串的判定 + 动态规划DP实现
- HDU
- 在不熟悉sip协议细节的情况下进行相关软件开发操作指南
- LintCode 练习-728. 3个不同的因子
- DOS基本命令
- 脚本文件中使用变量(得到当前时间,用来生成一个文件夹)