成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > go語言 xorm框架 postgresql 的用法及詳細(xì)注解

go語言 xorm框架 postgresql 的用法及詳細(xì)注解

熱門標(biāo)簽:上海極信防封電銷卡價(jià)格 仙桃400電話辦理 不封卡外呼系統(tǒng) 寧波語音外呼系統(tǒng)公司 鄭州智能語音電銷機(jī)器人價(jià)格 宿遷便宜外呼系統(tǒng)代理商 地圖標(biāo)注免費(fèi)定制店 重慶慶云企業(yè)400電話到哪申請 湛江crm外呼系統(tǒng)排名

xorm用于在golang中鏈接數(shù)據(jù)庫,并完成增刪改差操作,不管是orm還是raw方式都十分的新穎簡單。

sql語句

postgresql pgadmin

/*表結(jié)構(gòu)*/
CREATE TABLE public.user
(
 id serial primary key,
 name varchar(20)
);
ALTER TABLE public.user ADD COLUMN created timestamp default now();
ALTER TABLE public.user ADD COLUMN class_id integer default 1;
insert into public.user(name) values('ft');
insert into public.user(name) values('ft2');
insert into public.user(name,class_id) values('ft8',2)
CREATE TABLE public.class
(
 id serial primary key,
 name varchar(20)
);
insert into public.class(name) values('高中一班');
insert into public.class(name) values('高中二班');
/*常用到的操作*/
select * from public.class;
select * from public.user;
select u.id,u.name,c.name from public.user as u left join public.class as c on u.class_id=c.id;

main.go

每個(gè)功能都使用了if語句來方便開關(guān),測試那塊就打開哪塊~~~

package main
import (
 _ "github.com/lib/pq"
 "github.com/xormplus/xorm"
 "fmt"
 "time"
 "strconv"
)
//用戶表結(jié)構(gòu)
type User struct {
 Id  int  `xorm:"not null pk autoincr INTEGER"`
 Name string `xorm:"VARCHAR(20)"`
 Created time.Time `xorm:"default 'now()' DATETIME"`
 ClassId int  `xorm:"default 1 INTEGER"`
}
//Class表結(jié)構(gòu)
type Class struct {
 Id int `xorm:"not null pk autoincr INTEGER"`
 Name string `xorm:"VARCHAR(20)"`
}
//臨時(shí)表結(jié)構(gòu)
type UserClass struct{
 User `xorm:"extends"`
 Name string
}
//此方法僅用于orm查詢時(shí),查詢表認(rèn)定
func (UserClass) TableName() string {
 return "public.user"
}
func main() {
 //1.創(chuàng)建db引擎
 db, err := xorm.NewPostgreSQL("postgres://postgres:123@localhost:5432/test?sslmode=disable")
 if err != nil {
  fmt.Println(err)
 }
 //2.顯示sql語句
 db.ShowSQL(true)
 //3.設(shè)置連接數(shù)
 db.SetMaxIdleConns(2000)
 db.SetMaxOpenConns(1000)
 cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 500)//緩存的條數(shù)
 db.SetDefaultCacher(cacher)
 //4.執(zhí)行插入語句的幾種方式
  //4.1 orm插入方式:不好控制,如果僅僅插入的對象的屬性是name='ftq',那么其他的零值會一同insert,orm方式對零值的處理有點(diǎn)不太好
  if false {
   user := new(User)
   user.Name = "ftq"
   _, err = db.Insert(user)
   if err != nil {
    fmt.Println(err)
   }
  }
  //4.2 命令插入方式
   //4.2.1 db.Exec():單事務(wù)單次提交
   if false{
   sql:="insert into public.user(name) values(?)"
   db.Exec(sql,"ft4")
   }
   //4.2.2 db.SQL().Execute():單事務(wù)準(zhǔn)備了Statement處理sql語句
   if false{
    sql:="insert into public.user(name) values(?)"
    db.SQL(sql,"ft5").Execute()
   }
   //4.2.3使用sql配置文件管理語句,兩種載入配置的方式LoadSqlMap()和RegisterSqlMap(),以及SqlMapClient()替代SQL()
   if false {
    err = db.LoadSqlMap("./sql.xml")
    //err = db.RegisterSqlMap(xorm.Xml("./","sql.xml"))
    if err != nil {
     fmt.Println(err)
    }
    db.SqlMapClient("insert_1","ft7").Execute()
   }
 //5.執(zhí)行查詢的幾種方式
  //5.1 orm查詢:在user初始化的時(shí)候,該orm查詢直接通過掃描user類型確定表名;組合使用Where(),Get()
  if false {
   user := new(User)
   boolget ,err2 :=db.Where("id=?",5).Get(user)
   fmt.Println(boolget,err2,user)
  }
  //5.2 orm查詢:組合使用Where(),Get(),And()
  if false {
   user := new(User)
   boolget ,err2 :=db.Where("id=?",5).And("name=?","ft7").And("id>?",3).Get(user)
   fmt.Println(boolget,err2,user)
  }
  //5.3 orm查詢: AllCols()查詢所有列,Cols()查詢部分列,F(xiàn)ind()解析多行結(jié)果,Get()解析單行結(jié)果
  if false {
   users := new ([]User)
   err = db.AllCols().Find(users)
   //err = db.Cols("id","name").Find(users)
   if err !=nil {
    fmt.Println(err)
   }
   fmt.Println(users)
  }
  //5.4 orm查詢:連接查詢Join()
  if false {
   users := new([]UserClass)
   db.Join("INNER","class","user.class_id=class.id").Find(users)
   //db.SQL("select u.id,u.name,c.name from public.user as u left join public.class as c on u.class_id=c.id").Find(users)
   fmt.Println(users)
  }
  //5.5 sql查詢略
  if false {
   //和insert類似,Find查找多行結(jié)果,Get獲取 單行結(jié)果
   users := new([]UserClass)
   db.SQL("select u.id,u.name,c.name from public.user as u left join public.class as c on u.class_id=c.id").Find(users)
   fmt.Println(users)
   }
  //5.6 鏈?zhǔn)讲檎?
  if false {
   //值得一提的是,支持查找某行的某個(gè)字段,不過一般在sql語句中就可以完成過濾,如果sql語句過于復(fù)雜,可以鏈?zhǔn)讲檎疫^濾
   id := db.SQL("select * from public.user").Query().Results[0]["id"]
   fmt.Println(id)
  }
 //6.執(zhí)行更新
  //6.1 ORM方式: 只有非0值的屬性會被更新,user的id和created都是默認(rèn)零值,不被處理
  if false {
   user :=new(User)
   user.Name="ftx"
   //[xorm] [info] 2018/02/08 12:04:01.330624 [SQL] UPDATE "user" SET "name" = $1 WHERE "id"=$2 []interface {}{"ftx", 4}
   db.Id(4).Update(user)
  }
  //6.2 SQL方式略,和insert類似
 //7.事務(wù)
  //7.1簡單事務(wù)
  if false {
   session :=db.NewSession()
   defer session.Close()
   session.Begin()
   //業(yè)務(wù):新添加學(xué)生,并且創(chuàng)建新的班級,如果班級因?yàn)橹麈I沖突創(chuàng)建失敗,則整個(gè)事務(wù)回滾
   _,err =session.SQL("insert into public.user(name,class_id) values('ft13',2)").Execute()
   //表中已經(jīng)有id=3的班級了
   _,err =session.SQL("insert into public.class(id,name) values(3,'高中3班')").Execute()
   if err!=nil {
    session.Rollback()
   }
   session.Commit()
  }
  //7.2嵌套事務(wù)
  if false {
   session := db.NewSession()
   defer session.Close()
   session.Begin()
   _,err=session.Exec("insert into public.user(name,class_id) values('ft23',2)")
   if err!=nil {
    session.Rollback()
   }
   _,err=session.Exec("insert into public.user(id,name,class_id) values(1,'ft24',2)")
   if err!=nil {
    session.Rollback()
   }
   tx,_:=session.BeginTrans()
   _,err=tx.Session().Exec("insert into public.user(name,class_id) values('ft25',2)")
   if err!=nil {
    tx.RollbackTrans()
   }
   tx.CommitTrans()
   session.Commit()
  }
 //8.緩存:使用Raw方式修改以后,需要清理緩存
 if true {
   //建立500條數(shù)據(jù)
   session := db.NewSession()
   defer session.Close()
   if false {
    session.Begin()
    for i := 30; i  530; i++ {
     value := "ft" + strconv.Itoa(i)
     _, err = session.Exec("insert into public.user(name) values(?)", value)
     if err != nil {
      session.Rollback()
     }
    }
    session.Commit()
   }
   //查詢前531條數(shù)據(jù),并隨意輸出其中一條
   users := make([]User,10)
   db.SQL("select * from public.user where id531 order by id").Find(users)
   fmt.Println("讀第一遍:","id:",users[50].Id,"name:",users[50].Name)
   db.SQL("select * from public.user where id531 order by id").Find(users)
   fmt.Println("讀第二遍:","id:",users[50].Id,"name:",users[50].Name)
   var step int =1
   stepString := users[50].Name + strconv.Itoa(step)
   session.Exec("update public.user set name=? where id =45",stepString)
   //清理緩存
   db.ClearCache(new(User))
   time.Sleep(5*time.Second)
   session.SQL("select * from public.user where id531 order by id").Find(users)
   fmt.Println("讀第三遍:","id:",users[50].Id,"name:",users[50].Name)
   //雖然很不好意思,但是就算開啟了緩存數(shù)據(jù)也是臟了
 }
 //9.讀寫分離
 if false {
 //假設(shè)有多臺服務(wù)器用來響應(yīng)客戶的讀請求
 var dbGroup *xorm.EngineGroup
 conns :=[]string {
  "postgres://postgres:123@localhost:5432/test?sslmode=disable",
  "postgres://postgres:123@localhost:5432/test?sslmode=disable",
  "postgres://postgres:123@localhost:5432/test?sslmode=disable",
  "postgres://postgres:123@localhost:5432/test?sslmode=disable",
 }
 //負(fù)載均衡策略:(特性自行百度)
  // 1.xorm.RandomPolicy()隨機(jī)訪問負(fù)載均衡,
  // 2.xorm.WeightRandomPolicy([]int{2, 3,4})權(quán)重隨機(jī)負(fù)載均衡
  // 3.xorm.RoundRobinPolicy() 輪詢訪問負(fù)載均衡
  // 4.xorm.WeightRoundRobinPolicy([]int{2, 3,4}) 權(quán)重輪訓(xùn)負(fù)載均衡
  // 5.xorm.LeastConnPolicy()最小連接數(shù)負(fù)載均衡
 dbGroup, err = xorm.NewEngineGroup("postgres", conns, xorm.RoundRobinPolicy())
 //dbGroup使用方法和db一致
   //簡單查詢
   dbGroup.SQL("inser into public.users(name) values('ft2000')").Execute()
   dbGroup.Exec("inser into public.users(name) values('ft2001')")
   //事務(wù)查詢
   session :=dbGroup.NewSession()
   defer session.Close()
   session.Begin()
   _,err = session.Exec("inser into public.users(name) values('ft2001')")
   if err!=nil {
   session.Rollback()
   }
   session.Commit()
 }
}
//注意:
//1.postgresql好像不會默認(rèn)按id增長排序,所以書寫sql語句要提前寫好order by id ,樓主沒怎么寫,咳咳
//2. [5.4] postgresql建表會建在public策略的table里,所以查詢語句表明寫的是public.xxxx,這也造成了連表orm查詢會發(fā)生前綴報(bào)錯(cuò),比如變成了"SELECT * FROM "public"."user" INNER JOIN "class" ON user.class_id=class.id 這和內(nèi)部的split有關(guān),
//3.[8.]帶的緩存好像很容易失效,在創(chuàng)建500個(gè)數(shù)據(jù)后,經(jīng)過查查改查的操作,查詢到的結(jié)果是一樣的始終是一樣的,本來改值之后應(yīng)該最后一遍查會變化,然而并沒有,緩存功能即使清理了緩存,還是會讀到臟的

補(bǔ)充:golang xorm框架對應(yīng)pg數(shù)據(jù)庫字段類型參照表

1.左邊是golang字段類型,右邊是pg數(shù)據(jù)庫字段類型

int  integer
time.Time timestamp
int8 smallint
float64 numeric(8,3) (只要是numeric統(tǒng)統(tǒng)使用float64)
string text
string varchar

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 在golang xorm中使用postgresql的json,array類型的操作
  • golang xorm及time.Time自定義解決json日期格式的問題
  • golang xorm日志寫入文件中的操作
  • golang中xorm的基本使用說明
  • 解決goxorm無法更新值為默認(rèn)值的問題
  • xorm根據(jù)數(shù)據(jù)庫生成go model文件的操作
  • 使用go xorm來操作mysql的方法實(shí)例
  • go xorm框架的使用

標(biāo)簽:青海 西雙版納 電子產(chǎn)品 儋州 遼寧 海南 物業(yè)服務(wù) 安康

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go語言 xorm框架 postgresql 的用法及詳細(xì)注解》,本文關(guān)鍵詞  語言,xorm,框架,postgresql,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go語言 xorm框架 postgresql 的用法及詳細(xì)注解》相關(guān)的同類信息!
  • 本頁收集關(guān)于go語言 xorm框架 postgresql 的用法及詳細(xì)注解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    av电影在线地址| 亚洲国产综合色| jizz性欧美| 国产在线你懂得| 亚洲av无一区二区三区久久| 日韩中文在线观看| 91精品视频观看| 亚洲精品mv在线观看| 日本三级电影在线看| 日韩 国产 一区| 91黄色国产视频| 丁香婷婷激情网| 黄色一级片在线免费观看| 一道本无吗dⅴd在线播放一区| wwwwww99| 亚洲毛片网站| 国产精品超碰| 亚洲精品日韩丝袜精品| 亚洲国产欧美一区二区三区同亚洲| 久久高清视频免费| 精品视频偷偷看在线观看| 亚洲天堂2017| 免费无遮挡无码永久在线观看视频| 国产一国产二国产三| 精品影院一区| 伊人性伊人情综合网| 欧美另类bbbxxxxx另类| 日韩不卡手机在线v区| 久久国产亚洲精品无码| 欧美一级国产精品| av中文字幕免费| 亚洲一区资源| 日韩欧美精品一区二区| 国产精品色呦呦| 欧美成人黑人xx视频免费观看| 国产精品19乱码一区二区三区| 91麻豆精品一区二区三区| 在线中文字幕第一页| 亚洲综合视频一区| 久久爱一区二区| 午夜影院观看视频免费| 亚洲国产精品免费| 亚洲香蕉伊综合在人在线视看| 三级黄色片播放| 久久人妻少妇嫩草av蜜桃| 欧美午夜影院| 91精品久久久久久综合乱菊| 日韩爱爱小视频| 亚洲午夜精品在线观看| 自拍偷拍欧美精品| 6699嫩草久久久精品影院| 国产午夜免费福利| 欧美群妇大交群中文字幕| www精品久久| 国产又粗又猛又爽又黄的视频一| 国产99久久精品一区二区 夜夜躁日日躁| 台湾av在线二三区观看| 国产美女精品免费电影| 亚洲熟女综合色一区二区三区| 亚洲性线免费观看视频成熟| 欧美aⅴ在线观看| 亚洲在线播放| 日韩亚洲欧美中文字幕| 97视频网站入口| 波多野结衣精品在线| 国产亚洲欧美一区在线观看| 一级α片免费看刺激高潮视频| 波多野结衣亚洲一区| 国产乱肥老妇国产一区二| 欧美久久久久久久久久久| 91美女片黄在线观看| 国模一区二区三区| 2017亚洲天堂| 亚洲欧洲av| 国产精品白浆视频免费观看| 综合久久十次| 久草在线网址| 91精品国产综合久久久久久久久| 亚洲mv大片欧洲mv大片精品| 国产精品一区二区三区免费| 亚洲色欧美另类| 久久精品人人做人人爽电影蜜月| 97在线观看视频免费| 热99精品里视频精品| 天堂中文在线官网| 亚洲欧洲日韩综合一区二区| 日本最新一区二区三区视频观看| 欧美日韩国产精品一区二区亚洲| 国内精品偷拍视频| 黄色成人av网站| 中文字幕一区二区三区久久网站| 午夜久久久久久久久久| 日韩欧美网站| 亚洲天天综合| 在线观看亚洲精品| 4hu四虎永久在线观看| 日韩在线观看一区二区| 日韩国产在线一| 日韩精品每日更新| 精品久久久免费视频| 久久综合综合久久综合| 无码人妻av一区二区三区波多野| 国产欧美精品久久久| 这里只有精品在线观看| 国产亚洲精品久久久久久牛牛| 日本免费久久高清视频| 国内av一区二区三区| 亚洲一区二区美女| www.久久草| 亚洲天堂中文网| 偷拍25位美女撒尿视频在线观看| 国产日产精品一区| 久久亚洲私人国产精品va媚药| 麻豆精品蜜桃视频网站| 久草综合在线观看| 99视频热这里只有精品免费| 色嗨嗨av一区二区三区| 亚洲国产精品人久久电影| 亚洲免费人成在线视频观看| 成人污污www网站免费丝瓜| 国产午夜精品一区二区三区四区| 成人网在线观看| 日本成人中文| 欧美日韩一卡| 中文字幕视频在线免费欧美日韩综合在线看| 国产va免费精品观看精品视频| 日韩一级特黄毛片| 一本大道熟女人妻中文字幕在线| 日韩国产欧美精品在线| 国产精品国三级国产av| 男女啪啪a级毛片| 99re热精品视频| 91精品国产一区二区三区动漫| 91av资源网| 在线观看av一区二区| 正在播放欧美一区| 欧美久久香蕉| 久久白虎精品| 亚洲成a人v欧美综合天堂麻豆| 久久一级黄色片| 欧美日韩一区二区三区在线| 成年人视频网站免费| 蜜桃麻豆av在线| 日韩精品中文字幕在线不卡尤物| 一区二区三区在线观看免费视频| 国产一区在线观看麻豆| 日韩亚洲电影在线| 亚洲av无码国产精品久久不卡| 国产精品免费精品自在线观看| 男人日女人视频网站| 欧美另类高清zo欧美| 精品一区在线看| 深夜福利在线观看直播| 人人爱人人干婷婷丁香亚洲| 性感美女久久精品| 欧美日韩一级片网站| 69xxx免费视频| 欧美黄色免费网站| 日本高清无吗v一区| 91爱爱小视频k| 国产成人久久婷婷精品流白浆| 欧美精品一区二区三区高清aⅴ| 欧美色成人综合| 香蕉视频国产在线| 国产91一区二区三区| 免费观看成人在线| 国产麻花豆剧传媒精品mv在线| 好男人香蕉影院| 亚洲美女在线看| 极品在线视频| 国产高清精品二区| 美女隐私在线观看| 亚洲欧美日韩国产一区二区三区| 国模吧精品人体gogo| 国产一区二区三区精品欧美日韩一区二区三区| 欧美一区二区视频17c| 国产精品1区2区3区4区| 51久久夜色精品国产麻豆| 精品人妻一区二区三区含羞草| 青青草国产精品97视觉盛宴| 91小视频在线| 日韩精品在线免费播放| 牛牛国产精品| 精品欠久久久中文字幕加勒比| 一二三四视频免费观看在线看| 中文字幕av在线一区二区三区| 男女猛烈无遮挡午夜视频| 另类一区二区| 粗大的内捧猛烈进出视频| 国产成人精品一区二三区在线观看| 中文字幕国产高清| 亚洲精品久久嫩草网站秘色| 天海翼在线观看视频| 在线不卡一区二区| 久久久久久免费精品| 亚洲激情视频网| 成人综合网站| 成人永久免费| 中文字幕综合网| 久久久综合激的五月天| 久久这里精品| 波多野结衣先锋影音| 四虎影视国产在线视频| 欧美极品少妇xxxxx| 久久综合九色综合久99| 黄色片视频在线免费观看| 麻豆视频在线免费观看| 欧美激情aaa| 国产精品www在线观看| 丝袜视频国产在线播放| 欧美精品色综合| 涩涩涩在线视频| 日韩中文字在线| 黄色成人免费观看| 亚洲图片欧美在线| 每日在线观看av| 女教师淫辱の教室蜜臀av软件| 久久夜精品va视频免费观看| 日韩精品久久久久久久的张开腿让| 成人在线免费看黄| 国产一级黄色| 蜜桃视频在线观看www| 亚洲精品乱码久久久久久日本蜜臀| 91黄色免费视频| 麻豆视频入口| 亚洲人成自拍网站| 亚洲男人天堂2017| 日韩欧美电影在线观看| 999精品视频| 国产成免费视频| 中文字幕在线观看2018| 成人羞羞国产免费图片| 在线国产福利| 久久一区二区视频| 中文字幕欧美人妻精品一区蜜臀| 久久精品视频国产| 久久99久久亚洲国产| 欧美日韩高清| 精品国产伦一区二区三区| www.xxx黄| 精品免费国产一区二区| 午夜久久久久久电影| 天天色综合4| 女厕盗摄一区二区三区| 老熟妇高潮一区二区三区| 日韩亚洲欧美在线观看| 日本网站免费观看| 亚洲精品久久久久久久蜜桃| 欧美日韩国产在线观看| 日韩欧美中文字幕一区二区三区| 美女黄色网址| 亚洲欧洲99久久| www.com操| 亚洲第一会所| 久久久久久久久久久久网站| 蜜桃麻豆91| 美国毛片一区二区三区| 久久综合久久99| 男女日批视频在线观看| 天天看天天色| 国产一区二区日韩精品| 亚洲韩国欧洲国产日产av| 免费看成一片| 日本中文字幕在线播放| 久久丝袜美腿综合| 在线免费观看欧美| 欧美福利在线播放网址导航| 国产精品久久久久久久久妇女| 六月丁香激情综合| 黑人狂躁日本娇小| 欧美性xxxxxbbbbbb精品| av播放在线| 色悠悠在线视频| 999在线观看免费大全电视剧| 尤物yw午夜国产精品视频明星| 国产精品乱子乱xxxx| 99在线国产| 1000部国产精品成人观看| 日韩激情一区二区三区| 一区二区三区在线播放欧美| www.成人三级视频| 久久99精品久久久久久琪琪| 国产精品观看在线亚洲人成网| 欧美日韩国内自拍| 亚洲精品久久在线| 91免费版看片| 伊人久久大香线蕉精品| 成人免费视频网站入口| 亚洲精品水蜜桃| 亚洲视频免费观看| 最近中文字幕mv2018在线高清| 男女性色大片免费观看一区二区| 欧美美乳视频网站在线观看| 国产一区在线观| 国产精品25p| 精品国产乱码久久久久久天美| 日韩精品一区二区三区免费观看| 欧美成人资源| 精品a在线观看| 亚洲一区二区三区蜜桃| 国产精品v片在线观看不卡| 亚洲视频天天射| 亚洲欧美激情视频在线观看一区二区三区| 正在播放亚洲精品| 51国偷自产一区二区三区| 91精品办公室少妇高潮对白| 色94色欧美sute亚洲线路二| 精品蜜桃一区二区三区| 欧美色视频在线观看| 亚洲一区二区三区四区五区xx| 男男视频亚洲欧美| 亚洲免费不卡| 祥仔av免费一区二区三区四区| 成人亚洲欧美一区二区三区| 成人一区二区免费视频| 国产一区二区在线观看免费视频| 一级肉体全黄裸片| 丝袜脚交免费网站xx| 热久久久久久久| 日韩理论在线观看| 成人在线精品| 国产一区二区亚洲| 最新亚洲国产精品| 蜜桃一区二区三区在线| 91精品国产自产91精品| 91麻豆精品国产91久久久资源速度| 欧美国产一区二区在线| 亚洲男人第一网站|