那些年XORM踩过的坑
目录
警告
本文最后更新于 2024-03-26,文中内容可能已过时。
那些年XORM
踩过的坑
1、主键ID
XORM
会将字段名称为ID
的,类型为int64
的字段默认为该表的主键
,如果将ID字段类型设置为int
类型,则不会被自动识别为该表的主键。
|
|
1.1 插入数据返回主键
- 如果在插入一条数据时,插入成功后直接返回该记录的自增ID,则必须将该
model
的结构体ID设置为int64
类型 - 结构体的
ID
字段上面的tag
,不能设置xorm:"id"
这个标签,如果设置了这个标签,则会默认ID为0,不会返回插入成功后的主键ID。XORM
文档也有相关的描述:在插入单条数据成功后,如果该结构体有自增字段(设置为AUTO_INCREMENT
),则自增字段会被自动赋值为数据库中的ID。这里需要注意的是,如果插入的结构体中,自增字段已经赋值,则该字段会被作为非自增字段插入。
2、修改字段
修改数据答题可以分为两种方式,一种是通过model
进行修改,一种是通过map[string]**interface{}
来进行修改的,作者平常主要使用的是第二种方式,所以也主要介绍该种方法。
|
|
该方式可以通过在map
中添加和数据库表中相同的字段的键值对,来达到更新相应字段的效果,但是需要注意,使用这种方式更新数据时,需要指定表名
!
3、FindAndCount()的坑
XORM
的FindAndCount()
函数确实好用省事,但是却不能通用,全部使用这个方法,一些情况会导致函数的count()
部分失效(使用分组函数、进行连表查询等),所以需要具体情况具体分析,选用合适的方法进行查询。
|
|
4、In
原先一直用的ORM
框架是GORM
,所以第一次使用XORM
的时候,习惯性的使用了Where("id in ?", ids)
来进行查询,一用直接就报错,后面排查了一下,发现XORM不支持这种写法,之后又研究了下其他的写法,第一种就是最简单的使用原生支持的In()
函数来进行搜索,还有就是通过原生的SQL拼接的方法进行的In
操作,但是这种方法也有一个坑。哎…
|
|
- 使用XORM,进行原生SQL拼接查询
|
|
- 解决方案
|
|