go与xorm

参考

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值