如何使用ibatis将类型为java.util.Set的数据插入到我的sql数据库中,类型为set?

时间:2017-10-18 07:57:29

标签: java mysql mybatis ibatis

如何将类型为java.util.Set的数据插入到类型为set(mysql set type)的mysql db列中?

我的POJO:

public class UserTEO 
{
    private Integer id;
    private Set changedfieldset;
    //getters and setters
}

xml文件:

<sqlMap namespace="user"> 

    <typeAlias alias="USER" type="com.howtodoinjava.ibatis.demo.dto.UserTEO" />
    <insert id="addUser" parameterClass="USER">
        INSERT INTO USERINFO (ID,CHANGEDFIELDSET)
         VALUES(#id#,#changedfieldset#);
    </insert>
</sqlMap>

数据库:

CREATE TABLE USERINFO
(
    ID INT,
    CHANGEDFIELDSET SET('')
);

例外:

com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred in user.xml.  
--- The error occurred while applying a parameter map.  
--- Check the user.addUser-InlineParameterMap.  
--- Check the parameter mapping for the 'changedfieldset' property. 

请帮忙。谢谢!

1 个答案:

答案 0 :(得分:1)

我猜你明确想与(旧的)ibatis合作,而不是Mybatis。 所以这是我引用的documentation

Mysql SET需要一个由逗号分隔的设置值字符串,不带空格:StringUtils.join(set, ",")。因此,您必须使用类型处理程序将java Set转换为此字符串:Extend BaseTypeHandler,特别重写setParameter方法。

然后打电话如下:

INSERT INTO USERINFO (ID,CHANGEDFIELDSET)
         VALUES(#id#,#changedfieldset,handler=YourCustomTypeHandlerTypeAlias#)