关于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:

<?xml version="1.0" encoding="UTF-8"?>
<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回答

翔仔

2020-01-23

同学好,根据同学的描述,感觉就是mybatis在批量处理BIN_TO_UUID的数据的获取的时候做得不够完善,这个具体原因还是需要在mybatis源码设置断点调试一下。建议同学先以byte[]的形式取出,然后在代码里做下转换。

感谢同学,也祝愿同学新春快乐:)

0
2
翔仔
回复
xlljoy
同学好,是的哈,mybatis了解后,可以写一些扩展来丰富它的功能:)感谢同学的支持
2020-01-24
共2条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程