关于mybatis返回类型问题
来源:4-13 前后端联调验证整体模块功能
xlljoy
2020-01-23
老师您好,新年快乐,
你的课程很好很全面,对我帮助很大,谢谢。我遇到一个问题:对应于你的project,我自己加了一些类来进行练习,我加了一个类似于shopCategory的类叫做zone.
在entity里面:
public class Zone {
private String zoneId;
private String zoneName;
public String getZoneId() {
return zoneId;
}
public void setZoneId(String zoneId) {
this.zoneId = zoneId;
}
public String getZoneName() {
return zoneName;
}
public void setZoneName(String zoneName) {
this.zoneName = zoneName;
}
}
在DAO里面:
package com.imooc.o2o.dao;
import java.util.List;
import com.imooc.o2o.entity.Zone;
public interface ZoneDao {
List<Zone> queryZone();
int insertZone(Zone zone);
}
在ZoneDao.xml:
<mapper namespace="com.imooc.o2o.dao.ZoneDao">
<select id="queryZone" resultType="com.imooc.o2o.entity.Zone">
SELECT BIN_TO_UUID(zone_id), zone_name
FROM tb_zone
ORDER BY zone_name
</select>
<insert id="insertZone" keyProperty="zoneId" keyColumn="zone_id">
INSERT INTO
tb_zone(zone_id, zone_name)
VALUES
(UUID_TO_BIN(#{zoneId}),#{zoneName})
</insert>
< /mapper>
Zone.zoneId是UUID,Zone.zoneName 是string的格式。 我用insertZone都可以把string形式的UUID存入到zoneId里面。并且在mysqll里面看到存好的转换为byte形式的数据。但是当我用select的时候,我得到List< Zone>, zone.get(0).zoneId 的结果是null, zoneName是可以正常得到的。 我如果手写代码将zoneId变为byte[]输出在List里面再转化为UUID格式是行得通的。但是我又尝试做了这个在ZoneDao.xml里面加上:
< select id=“queryZoneIdByName” resultType=“String”>
SELECT BIN_TO_UUID(zone_id)
FROM tb_zone
WHERE #{name}=zone_name
< /select>
这样的select是可以直接返回String格式的UUID的。
所以我现在搞不懂,为什么我返回List< Zone>时候不能把String格式的zoneId顺利返回呢。 我查找了mybatis的一些返回UUID的例子,多数也是给了一个zone_name然后返回单一的UUID,但是我希望的是UUID顺利返回在List 的Zone里面。 谢谢老师。
1回答
-
同学好,根据同学的描述,感觉就是mybatis在批量处理BIN_TO_UUID的数据的获取的时候做得不够完善,这个具体原因还是需要在mybatis源码设置断点调试一下。建议同学先以byte[]的形式取出,然后在代码里做下转换。
感谢同学,也祝愿同学新春快乐:)
022020-01-24
相似问题