Gorm入门使用
2021-05-31 10:48
330 查看
Gorm
GORM CRUD 数据库的增删改查
go get -u github.com/jinzhu/gorm go get -u github.com/jinzhu/gorm/dialects/mysql
go常规查询操作
package main import ( "encoding/json" "fmt" "time" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) var db *gorm.DB // Test 表结构 type Test struct { ID int `json:"id" db:"id" gorm:"id"` Username string `json:"username" db:"username" gorm:"username"` Password string `json:"password" db:"password" gorm:"password"` Datetime time.Time `json:"datetime" db:"datetime" gorm:"datetime"` City string `json:"city" db:"city" gorm:"city"` Country string `json:"country" db:"country" gorm:"country"` Sex string `json:"sex" db:"sex" gorm:"sex"` Age string `json:"age" db:"age" gorm:"age"` } // TableName 数据库名称规范 func (t Test) TableName() string { return "test" } // Init xx func Init() (err error) { db, err = gorm.Open("mysql", "root:1qa2ws3ed@/gouse?charset=utf8&parseTime=True&loc=Local") if err != nil { fmt.Println("连接诶数据库失败") return } return err } // SelectData 查询单条语句 func SelectData() (err error) { var info Test // First根据主键查询单条语句+++++++++++++ //_ = db.First(&info) ////fmt.Println(info.Username, info.Password, info.Age, info.Datetime) //marshal, err := json.Marshal(info) //if err != nil { // fmt.Println("反序列化失败") // return // //} //fmt.Println(string(marshal)) // 随机获取条数据++++++++++++++++ //db.Take(&info) //TakeData, err := json.Marshal(info) //fmt.Println(string(TakeData)) //// 根据主键查询最后一条记录+++++++++++++ //db.Last(&info) //LastData, err := json.Marshal(info) //fmt.Println(string(LastData)) //// 获取所有记录+++++++++++++++ //var infoList []Test // //db.Find(&info) //FindData, err := json.Marshal(infoList) //fmt.Println(string(FindData)) // First 查询主键为10000的数据(仅当主键为int时) db.First(&info, 10000) marshal, err := json.Marshal(info) fmt.Println(string(marshal)) return err } // WhereData where语句查询 func WhereData() (err error) { // where 条件查询sex 为女的主键第一个 //var info Test //db.Where("sex = ?", "女").First(&info) //marshal, err := json.Marshal(info) //fmt.Println(string(marshal)) // 查询所有sex为男的用户 并统计计数 var infoList []Test //db.Where("sex = ?", "男").Find(&infoList) //fmt.Println(len(infoList)) db.Where("id in (?)", []int{1000, 2000}).Find(&infoList) marshal, err := json.Marshal(infoList) fmt.Println(string(marshal)) return err } // main 主函数 func main() { _ = Init() //err := SelectData() err := WhereData() if err != nil { fmt.Println("") return } }
// like 查询 db.Where("username like ?", "%abc%").Find(&infoList) LikeData, err := json.Marshal(infoList) fmt.Println(string(LikeData)) return err
注: ?其实就是占位符
- go结构体转换成map
go map 查询
db.Where(map[string]interface{}{"id": 1000}).Find(&info) MapData, err := json.Marshal(info) fmt.Println(string(MapData)) return err
go not查询
// NotSelect Not查询用法 func NotSelect() (err error) { var infoList []Test db.Not("id = ?", "1").First(&infoList) NotLikeData, err := json.Marshal(infoList) fmt.Println(string(NotLikeData)) db.Not("id in (?)", []int{1, 2, 3, 4, 5}).First(&infoList) notinData, err := json.Marshal(infoList) fmt.Println(string(notinData)) return err }
go or 查询
// OrSelect or查询 func OrSelect() (err error) { var infoList []Test db.Where("id = ?", "1").Or("id = ?", "2").Find(&infoList) OrData, err := json.Marshal(infoList) fmt.Println(string(OrData)) return err }
go 内联查询 等同于where条件
// 内联条件 func NeiLian() (err error) { var info Test db.Find(&info, "id = ?", "1") marshal, err := json.Marshal(info) fmt.Println(string(marshal)) return err }
Go firstorcreate
获取匹配的第一条记录,否则根据给定的条件创建一个新的记录(仅支持struct or map)
// FirstOrCreate 查询条件后的第一条语句 如果为空 就创建一条记录 func FirstOrCreate() (err error) { var info Test db.Where("id = ?", "1000").FirstOrCreate(&info) marshal, err := json.Marshal(info) fmt.Println(string(marshal)) return err }
相关文章推荐
- JSP开发入门(一)----安装好你的机器来使用JSP
- 使用DriverStudio开发WDM设备驱动程序入门
- JSP入门初级教程之Actions的使用
- Apache和Tomcat结合使用入门
- JSTL使用入门
- Toad 使用快速入门
- Toad 使用快速入门之二
- Cygwin工具使用入门教程
- PHP-Web应用程序开发:使用模板(入门)
- [转].Net中的反射使用入门
- Toad 使用快速入门
- [Eclipse]GEF入门系列(八、使用EMF构造GEF的模型)
- 使用JWSDP完成Web Service在java的入门(二)
- Lucene入门与使用[转]
- Photoshop入门与进阶实例:1.9 滤镜效果的使用
- 入门计划->使用(C++库)istringstream输入(格式化)
- .Net中的反射使用入门
- Ibatis2.0使用说明(一)——入门实例篇[原]
- Eclipse使用入门(一)
- 使用XMLBeans处理XML数据和文档入门 作者:肖菁 (dev2dev ID: powerise) 湖南省长沙铁道学院科创计算机系统集成有限公司软件中心软件工程师