参考
https://github.com/go-xorm/xorm/blob/master/README_CN.md
介绍
ORM,全称 Object Relational Mapping,中文叫作对象关系映射,通过它我们可以直接使用面向对象的方式做数据库开发,而不再直接写原生的SQL语句(甚至不需要SQL的基础)。通过把表映射成类,把行作为实例,把字段作为属性,ORM在执行对象操作的时候会把对应的操作转换为数据库原生语句的方式来完成数据库开发工作。
优点
1、优雅。使用这种ORM数据库抽象封装方式做开发,可以有效减少出现重复SQL语句的概率,写出来的模型也更直观清晰。
2、开发效率。ORM转换成底层数据库操作指令确实会有一些开销。只要不是对性能有严苛的要求,综合考虑开发效率的提升,代码重复利用率等因素,带来的好处要远大于性能损耗,而且项目越大其作越明显。
3、设计灵活。可以很轻松地写复杂的查询。
4、可移植。可以支持多个关系数据库引擎,近乎无痛地更换数据库。
使用数据库
连接
//需要引入_ "github.com/go-sql-driver/mysql"
engine, err := xorm.NewEngine("mysql", "root:123456@tcp(127.0.0.1:3306)/xorm_test?charset=utf8&parseTime=True&loc=Local")
创建表
type User struct {
Id int64
Name string
Salt string
Age int
Passwd string `xorm:"varchar(200)"`
Created time.Time `xorm:"created"`
Updated time.Time `xorm:"updated"`
}
err = engine.Sync2(new(User)) //将此struct同步到数据库
//相当于
//CREATE TABLE `user` (
//`id` bigint(20) NOT NULL AUTO_INCREMENT,
//`name` varchar(255) DEFAULT NULL,
//`salt` varchar(255) DEFAULT NULL,
//`age` int(11) DEFAULT NULL,
//`passwd` varchar(200) DEFAULT NULL,
//`created` datetime DEFAULT NULL,
//`updated` datetime DEFAULT NULL,
//PRIMARY KEY (`id`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入
affected, err := engine.Insert(&user) //返回数据库中改变的条数
// INSERT INTO struct () values ()
affected, err := engine.Insert(&user1, &user2)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values ()
affected, err := engine.Insert(&users)
// INSERT INTO struct () values (),(),()
affected, err := engine.Insert(&user1, &users)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values (),(),()
user := User{1,"jim","",20,"qwer",time.Now(),time.Now()}
affected, err := engine.Insert(&user)
单条查询
user := User{}
has, err := engine.Get(&user) //has表示查询对象是否存在
// SELECT * FROM user LIMIT 1
fmt.Println(has, user) //true {1 jim 20 qwer 2019-07-11 22:27:57 +0800 CST 2019-07-11 22:27:57 +0800 CST}
user = User{}
has, err = engine.Where("name = ?", "jim").Desc("id").Get(&user)
// SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1
fmt.Println(u