1.基本構成
-
1.依存関係をインストールします
// orm链接库 go get github.com/astaxie/beego/orm // 使用的数据库 go get github.com/go-sql-driver/mysql
-
2.データベースに接続するためのメソッドを
main.go
ファイルinit
に追加しますfunc init() { orm.RegisterDriver("mysql", orm.DRMySQL) // default必须要有,表示连接的数据库别名,可能是多个 orm.RegisterDataBase("default", "mysql", "用户名:密码@tcp(localhost:3306)/数据库名?charset=utf8mb4&parseTime=True&loc=Local") }
-
3.その
main.go
ようなパッケージをファイルに追加する必要があることに注意してください。そうしないと、エラーが報告されます。import ( ... _ "github.com/go-sql-driver/mysql" )
-
4.データモデルを定義します
package models import "github.com/astaxie/beego/orm" type User struct { Id int Name string Age int Address string } //自定义表名,可以不写的会默认以下划线来分割驼峰命名的 func (self *User) TableName () string { return "user" } func init() { orm.RegisterModel(new(User)) }
-
5.データベースと
user
データテーブルを手動で作成します -
6.コントローラーのデータモデルを使用してデータを挿入します
package ormDemo import ( "demo01/models" "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" ) type UserController struct { beego.Controller } func (self *UserController) Get() { o := orm.NewOrm() //默认使用default,这里可以不用写 //o.Using("default") user := models.User{ Name: "张三", Age: 20, Address: "广东"} id, err := o.Insert(&user) fmt.Println(id) fmt.Println(err) self.TplName = "orm.html" }
-
7.データベースデータを表示する
2.モデルに関するいくつかの知識の補足
-
1.デフォルトのテーブル名について
- 最初の大文字に加えて、大文字に遭遇すると_が増加し、元の名前の下線が保持されます
- カスタムテーブル名は書き換え
TableName
方法です
-
2.カスタムフィールド名
type User struct { Id int Name string `orm:"column(user_name)"` // 在go代码中用的是Name,在数据库存的是user_name Age int Address string }
-
3.パラメータを設定します
type User struct { Id int `orm:"pk" "auto"` // 设置主键且自动增长 ... }
-
4.フィールドを無視する
type User struct { ... Address string `orm:"-"` }
-
5.比較的完全なモデル
/** 注意beego中创建的表都是非空的,除非自己先指定null */ type User struct { Id int `json:"id" orm:"pk;auto;description(主键id)"` // 设置主键且自动增长 Name string `json:"name" orm:"index;unique;size(50);description(用户名)"` // 唯一的且加了索引的 Age int `json:"age" orm:"default(0);description(年龄)"` Salary float64 `json:"price" orm:"digits(12);decimals(2);description(薪资)"` Address string `json:"address" orm:"size(100);null;column(address);description(地址)"` // 可以为空 // 创建时间字段 CreateAt *time.Time `json:"create_at" orm:"auto_now_add;type(datetime);description(创建时间)"` UpdateAt *time.Time `json:"update_at" orm:"auto_now;type(datetime);description(更新时间)"` }
3、データを挿入
-
1.
Insert
データの簡単な挿入を使用しますfunc (self *UserController) Get() { o := orm.NewOrm() //默认使用default,这里可以不用写 //o.Using("default") user := models.User{ Name: "张三", Age: 20, Address: "广东"} id, err := o.Insert(&user) fmt.Println(id) fmt.Println(err) self.TplName = "orm.html" }
-
2.
InsertMulti
複数のデータを挿入するために使用しますfunc (self *UserController) Get() { // 插入多条数据 o := orm.NewOrm() users := []models.User{ { Name: "李四", Age: 20, Address: "湖南"}, { Name: "王五", Age: 30, Address: "广西"}} //InsertMulti第一个参数表示一次可以插入100条数据 count, err := o.InsertMulti(100, &users) fmt.Println(count) fmt.Println(err) self.TplName = "orm.html" }
4、データを削除します
-
1.フィールドに従って削除します
func (self *UserController) Get() { //根据字段删除数据 o := orm.NewOrm() user := models.User{ Name: "水痕"} num, err := o.Delete(&user, "Name") fmt.Println(num, err) self.TplName = "orm.html" }
-
2.に従って
ID
削除しますfunc (self *UserController) Get() { //根据字段删除数据 o := orm.NewOrm() user := models.User{ Id: 1} // 根据ID删除可以不用写这个 num, err := o.Delete(&user) fmt.Println(num, err) self.TplName = "orm.html" }
5、データを更新
-
1.データを直接更新します
func (self *UserController) Get() { //更新数据 o := orm.NewOrm() // 先查找到数据 user := models.User{ Name: "张三"} err := o.Read(&user, "Name") if err == nil { // 修改了什么就更新什么 user.Name = "哈哈" user.Address = "南山" num, err := o.Update(&user) print("受影响的行数", num) fmt.Println(err) } self.TplName = "orm.html" }
-
2.更新されたフィールドを指定します
func (self *UserController) Get() { //更新数据 o := orm.NewOrm() user := models.User{ Name: "张三"} err := o.Read(&user, "Name") if err == nil { user.Name = "哈哈11" user.Address = "南山" // 只更新Name字段,不更新Address字段 num, err := o.Update(&user, "Name") print("受影响的行数", num) fmt.Println(err) } self.TplName = "orm.html" }
6、クエリデータ
-
1.フィールドに
Read
基づいてid
データをクエリするために使用しますfunc (self *UserController) Get() { // 根据id查询字段 o := orm.NewOrm() user := models.User{ Id: 1} o.Read(&user) fmt.Println("查询到的数据", user) self.TplName = "orm.html" }
-
2.指定されたフィールドに従ってクエリを実行します
func (self *UserController) Get() { //根据别的字段去查询 o := orm.NewOrm() user := models.User{ Name: "张三"} o.Read(&user, "Name") fmt.Println("一个字段查询", user) user1 := models.User{ Name: "王五", Address: "广西"} o.Read(&user1, "Name", "Address") fmt.Println("多个字段查询", user1) self.TplName = "orm.html" }
-
3.クエリと作成(クエリを実行するときに、データベースがない場合はデータベースを作成し、データベースがある場合はクエリを実行します)
func (self *UserController) Get() { //查询和创建 // 查询一个已经有的数据 o := orm.NewOrm() user := models.User{ Name: "王五", Age: 30, Address: "广西"} is_new, id, err := o.ReadOrCreate(&user, "Name", "Age", "Address") fmt.Println("第一次结果", is_new, id, err) //查询一个没有的数据 user1 := models.User{ Name: "王二", Age: 30, Address: "湖北"} is_new1, id1, err1 := o.ReadOrCreate(&user1, "Name", "Age", "Address") fmt.Println("第二次结果", is_new1, id1, err1) self.TplName = "orm.html" } // 结果 // 第一次结果 false 3 <nil> // 第二次结果 true 4 <nil>
セブン、コマンドを使用する途中
-
1.
main.go
コマンドを開いてテーブルを作成しますfunc main() { //全局开启打印sql模式 orm.Debug = true //开始数据迁移 orm.RunCommand() beego.Run() }
-
2.モデルを作成するときは、最初に登録する必要があります
// 模型中 func init() { orm.RegisterModel(new(User)) }
-
3.コマンドを実行します
go run main.go orm // 查看有什么命令 go run mian.go orm syncdb // 将数据模型同步到数据库
-
、
orm
についてのちょっとした質問- 現在、データテーブルの同期は1回のみです。モデルにフィールドを追加または削除すると、データベースに同期できなくなります。これは設計の欠如であり、将来的に改善される可能性があります。
- 個人的には、この段階ではまだテーブルの手動作成を使用し、データテーブルに従ってモデルを作成することをお勧めします