首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >select语句的Mybatis内联类型处理程序

select语句的Mybatis内联类型处理程序
EN

Stack Overflow用户
提问于 2015-05-27 02:00:38
回答 1查看 1.5K关注 0票数 0

有一个简单的select

代码语言:javascript
运行
复制
<select id = "getWidgetConfig" resultType="com.comp.entity.widgets.cnfg.Widget">
    SELECT `json_config`
    FROM   `widget_config`
    WHERE  `widget_id` = #{widgetId} 
</select>

其中json_config是字符串值。

我可以绑定类型/结果处理程序(内联)来使用我的处理程序将json_config值转换为实体小部件吗?

我可以对update/insert语句内联执行此操作

代码语言:javascript
运行
复制
INSERT INTO `widget_config` 
    (
        `json_config`
    ) 
VALUES 
    ( 
        #{widget,typeHandler=com.comp.mybatis.handlers.widget.WidgetTypeHandler} 
    )

如何对select语句执行类似的操作?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-05-30 04:57:40

我不认为在select中使用顶级类型处理程序是可能的。但是您可以通过使用带构造函数的结果映射来实现这一点:

代码语言:javascript
运行
复制
<resultMap id="widgetMap" type="Widget">
  <constructor>
     <arg column="json_config" javaType="string"/>
  </constructor>
</resultMap>

<select id="getWidgetConfig" resultMap="widgetMap">
   SELECT `json_config`
    FROM   `widget_config`
    WHERE  `widget_id` = #{widgetId} 
</select>

潜在的缺点是,您需要在Widget的构造函数中具有解析逻辑。如果这不是一个选择,一种克服它的方法是为Widget创建复制构造函数,并像这样更改映射:

代码语言:javascript
运行
复制
<resultMap id="widgetMap" type="Widget">
  <constructor>
     <arg column="json_config" javaHandler="com.comp.mybatis.handlers.widget.WidgetTypeHandler"/>
  </constructor>
</resultMap>

您需要确保Widget具有适当的复制构造函数,该构造函数接受Widget类型的值并创建一个副本(如果传递的Widget内部是不可变的,它可能会重用这些内部构造函数)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30465681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档