mysql数据库中有个一个列类型是VARBINARY
实际保存是的字符串,这个类型是以前老系统的,更改字段属性不现实。
用的是hibernate,映射成byte[]和binary。
前台struts如何显示该字段中的字符串呢?求大神帮忙。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在MySQL数据库中,如果某一列的类型为VARBINARY
,而实际存储的是字符串数据,并且由于历史原因无法直接更改字段属性,可以通过以下方式解决前台Struts显示该字段中的字符串的问题。以下是详细的解决方案:
VARBINARY
类型本质上是用于存储二进制数据的,但在您的场景中,它实际上存储的是字符串数据。Hibernate将其映射为byte[]
或binary
类型,这导致在前台Struts中无法直接以字符串形式显示。
为了正确显示该字段的内容,需要在数据从数据库读取后进行适当的转换,将二进制数据还原为字符串。
在Hibernate中,可以通过自定义类型转换器(AttributeConverter
)将VARBINARY
字段的二进制数据自动转换为字符串。具体实现如下:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class VarbinaryToStringConverter implements AttributeConverter<String, byte[]> {
@Override
public byte[] convertToDatabaseColumn(String attribute) {
// 将字符串转换为字节数组存入数据库
return (attribute != null) ? attribute.getBytes() : null;
}
@Override
public String convertToEntityAttribute(byte[] dbData) {
// 将字节数组转换为字符串返回给实体
return (dbData != null) ? new String(dbData) : null;
}
}
VARBINARY
字段的二进制数据转换为字符串,并在保存时将字符串转换为二进制数据。在Struts的Action类中,确保从数据库读取的数据已经通过上述转换器处理为字符串。然后,将该字符串传递到前端JSP页面进行显示。
示例代码如下:
public class YourAction extends ActionSupport {
private String varbinaryField; // 对应数据库中的VARBINARY字段
public String execute() {
// 假设使用Hibernate查询数据
YourEntity entity = yourDao.getEntityById(id);
this.varbinaryField = entity.getVarbinaryField(); // 已经通过转换器处理为字符串
return SUCCESS;
}
public String getVarbinaryField() {
return varbinaryField;
}
public void setVarbinaryField(String varbinaryField) {
this.varbinaryField = varbinaryField;
}
}
getVarbinaryField()
方法返回的是经过转换后的字符串。在JSP页面中,直接使用Struts标签显示该字段内容。例如:
<s:property value="varbinaryField" />
<s:property>
标签会自动将varbinaryField
的值渲染到页面上。UTF-8
字符集,则在转换时应明确指定:
return (dbData != null) ? new String(dbData, StandardCharsets.UTF_8) : null;
AttributeConverter
功能(通常需要Hibernate 4.3及以上版本)。通过上述方法,您可以在不更改数据库字段类型的情况下,利用Hibernate的自定义转换器将VARBINARY
字段的二进制数据转换为字符串,并在Struts前端正确显示。这种方法既避免了对现有数据库结构的修改,又能够满足业务需求。
如果您在实施过程中遇到任何问题,请随时提供更多细节以便进一步协助!