被xorm坑死 #2189

Closed
opened 2022-10-21 10:34:56 +00:00 by maybgitea · 3 comments

这是表

CREATE TABLE `promotion_week` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `PromotionId` int(11) NOT NULL,
  `WeekDay` int(11) NOT NULL COMMENT '星期周期 \n0 周天\n1 周一\n2 周二\n3 周三',
  `BeginTime` time NOT NULL,
  `EndTime` time NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `idx_PromotionId` (`PromotionId`)
) ENGINE=InnoDB AUTO_INCREMENT=2153283 DEFAULT CHARSET=utf8 COMMENT='指定指定星期周期可以使用';

这是结构体

type mydata struct {
	WeekDay   int 
	BeginTime string
	EndTime   string
}
var datas []mydata
count,err := session.Table("promotion_week").Select("WeekDay,BeginTime,EndTime").Where("PromotionId = ?", item.Id).FindAndCount(&datas)

查出数据,居然不能绑定到结构体上,老版本的xorm可以,项目升级后,坑死,查了半天原因。
有两种方式解决这个问题

  1. 字段后加 xorm:"'WeekDay'"
  2. 字段除了首字母大写,其它全部小写,这样查出的数据才能绑定到结构体上

以前老的框架,什么都没做,同样的表结构,同样的结构体,都能查出数据并且正确赋值,这次升级,被坑的远不止这一个,大概列了有如下:

  1. .Clone()方法取消,以前很多地方不是用的.Clone()来拷贝对象,用的是sessionCount := *session这种方式,结果全部出问题
  2. .Limit()问题,以前不默认不会 LIMIT 0,现在居然默认值是这个,有何意义
  3. .Join("dbname.tbname xx") 以前这种用数据库名.表名加别名的方式程序正常,框架升级后就芭比Q了
这是表 ``` CREATE TABLE `promotion_week` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `PromotionId` int(11) NOT NULL, `WeekDay` int(11) NOT NULL COMMENT '星期周期 \n0 周天\n1 周一\n2 周二\n3 周三', `BeginTime` time NOT NULL, `EndTime` time NOT NULL, PRIMARY KEY (`Id`), KEY `idx_PromotionId` (`PromotionId`) ) ENGINE=InnoDB AUTO_INCREMENT=2153283 DEFAULT CHARSET=utf8 COMMENT='指定指定星期周期可以使用'; ``` 这是结构体 ``` type mydata struct { WeekDay int BeginTime string EndTime string } ``` ``` var datas []mydata count,err := session.Table("promotion_week").Select("WeekDay,BeginTime,EndTime").Where("PromotionId = ?", item.Id).FindAndCount(&datas) ``` 查出数据,居然不能绑定到结构体上,老版本的xorm可以,项目升级后,坑死,查了半天原因。 有两种方式解决这个问题 1. 字段后加 `xorm:"'WeekDay'"` 2. 字段除了首字母大写,其它全部小写,这样查出的数据才能绑定到结构体上 以前老的框架,什么都没做,同样的表结构,同样的结构体,都能查出数据并且正确赋值,这次升级,被坑的远不止这一个,大概列了有如下: 1. .Clone()方法取消,以前很多地方不是用的.Clone()来拷贝对象,用的是`sessionCount := *session`这种方式,结果全部出问题 2. .Limit()问题,以前不默认不会` LIMIT 0`,现在居然默认值是这个,有何意义 3. `.Join("dbname.tbname xx")` 以前这种用数据库名.表名加别名的方式程序正常,框架升级后就芭比Q了
Owner

字段映射默认是snake mapper,你如果用了samemapper,要一直用。这个逻辑一直都没有变。

字段映射默认是snake mapper,你如果用了samemapper,要一直用。这个逻辑一直都没有变。
Author

字段映射默认是snake mapper,你如果用了samemapper,要一直用。这个逻辑一直都没有变。

什么都没变,就框架版本升级了下而已

> 字段映射默认是snake mapper,你如果用了samemapper,要一直用。这个逻辑一直都没有变。 什么都没变,就框架版本升级了下而已
Owner

Search SetMapper/SetColumnMapper/SetTableMapper in your codebase.

Search SetMapper/SetColumnMapper/SetTableMapper in your codebase.
lunny closed this issue 2022-12-12 10:28:47 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#2189
No description provided.