補充: XORM框架
===
我們上面的課件講解了原生操作MySQL
現在我們就來玩玩ORM操作MySQL
*****
開啟顯示SQL
```
func init() {
Engine, Err = xorm.NewEngine(config.BasicsConfig.DriverName, config.BasicsConfig.Dsn)
if Err != nil {
panic(Err.Error())
}
Engine.ShowSQL(true) //顯示生成的sql
SynchronousData()
}
```
Go語言中的ORM習慣直接在定義結構的基礎上配和tag來定義模型:
```
type Account struct {
Id int64 `xorm:"pk autoincr"`
Name string `xorm:"unique"`
Balance float64
Version int `xorm:"version"` //樂觀鎖
}
```
自動同步表結構
`err := Engine.Sync(new(tab_name))`
基礎目錄搭建
```
.
├── config 配置相關定義
│?? └── infrastructureConfig.go 獲取基礎配置信息
├── dbops 數據庫相關
│?? ├── conn.go 獲取數據庫連接
│?? └── model.go 數據庫模型定義
├── defs 通用定義
│?? └── dbdef.go
├── go.mod
├── go.sum
├── InfrastructureConfig.json 基礎配置文件
├── LICENSE
├── main.go
└── README.md
```
這個地方和以前的架構差不多,大家先自己動手實踐一下,等會再看我的代碼
*****
### CURL
學習一本語言怎么也離不開curd啊
- 新增記錄
`_,err := Engine.Insert(&Account{Name:name,Balance:balance})`
- 刪除記錄
`_,err := Engine.Delete(&Account{Id:id})`
- 獲取并修改記錄
```
a := &Account{}
has,err := Engine.Id(id).Get(a)
a.Balance += deposit
_,err = Engine.Where("name = ?",a.Name).Update(a)
```
- 批量獲取數據
```
func GetAccountsDESCId() ([]*Account,error) {
var as []*Account
err := Engine.Desc("id").Find(&as) //get獲取一個 find獲取多個
return as,err
}
if account, err := dbops.GetAccountsDESCId();err != nil{
fmt.Println("數據錯誤!")
break
}else{
for _,k := range account {
fmt.Println(k)
}
}
```
本次課程代碼
[https://github.com/dollarkillerx/GolangWebCourseware/tree/2c88994bc288314d00d7cbb9df0531eb6c7754ee](https://github.com/dollarkillerx/GolangWebCourseware/tree/2c88994bc288314d00d7cbb9df0531eb6c7754ee)
- 初認GOlang Web
- 關于環境配置
- 路由
- 路由進階與目錄架構
- 靜態文件服務器
- 自定義Middleware
- 與MySQL起舞
- 主從模式概念
- 部署主從集群
- 分庫分表
- 補充:事務
- 補充:常用SQL示例
- Template使用
- 一些小的,但是要知道的東西
- 調度任務
- 流控算法
- 鑒權
- JWT鑒權前置知識:加密解密
- session
- 文件上傳與下載
- 帶緩存讀寫拷貝io
- 參考
- 寫好的文件上傳
- 文件下載
- 拓展:秒傳功能實現
- 擴展:分塊上傳和斷點續傳
- 擴展:分塊上傳
- 擴展:斷點續傳
- 擴展:分布式存儲
- 部署ceph集群
- cephAuth
- go操作ceph集群
- 擴展:云存儲
- go操作oss
- 補充:xorm框架
- 命令小結
- 補充:xorm框架高級部分
- 補充
- MongoDB
- 基礎概念
- 簡簡單單NoSql
- 操作集合(Collection)
- 操作文檔(Document)
- 帶條件的文檔 db.find
- 復雜條件抽文檔 db.find
- redis
- redis操作
- go操作redis
- (新增)配置鑒權
- 密碼學
- 文件校驗算法
- 未來課程的安排
- RPC實踐
- 爬蟲
- 正則表達式
- 爬取手機號
- 爬取郵箱
- 爬取超鏈接
- 爬取身份證號
- 并發爬圖片
- 擴展:CICD
- GO實現自動化部署系統
- 國際化支持
- 并發帶來問題的解決
- GOWEB小知識
- Sync包講解
- sync.Pool
- 千萬級WebSocket消息推送
- 微服務入門:開篇
- 路由通訊
- RabbitMQ
- RabbitMQ工作原理和轉發模式
- Dcoker 下 RabbitMQ and Ui
- Go操作RabbitMQ
- 初步微服務
- go-micro
- 補充:consul
- 快速入門
- 補充:consul超時
- 微服務架構
- 微服務架構全景圖
- 服務注冊和發現
- raft協議基本概念
- raft協議leader選舉詳解
- raft協議日志復制詳解
- raft協議safefy詳解
- rpc調用個服務監控
- etcd
- 命令行使用
- Golang操作etcd
- GO操作etcd OP方式 (分布式鎖基礎)
- etcd 分布式集群樂觀鎖
- (新增)鑒權
- 服務注冊
- 服務發現原理
- 選項設計模式介紹
- 基于插件的注冊組建
- 課前知識
- etcd注冊開發1
- ffmpeg
- 2.0新的啟航
- 高可用Mysql
- mysql邏輯架構
- 常見的MySQL高可用方案
- 索引
- MYSQL調優
- 什么影響了MYSQL的性能
- Mysql 服務器參數配置
- Go深入并發
- 基本同步原語
- 擴展同步原語
- 原子操作
- M P G 模型
- 簡單的消息總線
- GoMicro入門
- GO任務池編寫
- GO依賴注入
- 一些補充
- golang defer在什么時候執行
- 分布式理論篇(面試吹牛必備)
- CAP理論
- Raft協議
- 保證注冊中心的可靠性
- 鏈路追蹤
- 怎么實現強一致性