首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql to MyBatis枚举

Sql to MyBatis枚举
EN

Stack Overflow用户
提问于 2012-11-20 21:29:30
回答 1查看 8K关注 0票数 3

我在我的项目中使用了带有MySql的MyBatis。

我有:

myField枚举(‘是’,‘否’)

我想映射到java的布尔值:

我知道我可以修改所有的mybatis模板,例如:

代码语言:javascript
复制
<update id="update">
UPDATE
myTable
   <set>
        ...
       <if test="myField != null">myField = <choose>
           <when test="myField == true">'yes'</when>
           <otherwise>'no'</otherwise>
           </choose>,
        </if>
        ...
    </set>
 WHERE
    ...
 </update>

但是我能不能用更方便的方式来做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 15:00:21

解决这个问题的最好方法似乎是实现我自己的布尔类型处理程序:

代码语言:javascript
复制
public class YesNoBooleanTypeHandler extends BaseTypeHandler<Boolean> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter,      JdbcType jdbcType)
            throws SQLException {
        ps.setString(i, convert(parameter));
    }

    @Override
    public Boolean getNullableResult(ResultSet rs, String columnName)
            throws SQLException {
        return convert(rs.getString(columnName));
    }

    @Override
    public Boolean getNullableResult(ResultSet rs, int columnIndex)
            throws SQLException {
        return convert(rs.getString(columnIndex));
    }

    @Override
    public Boolean getNullableResult(CallableStatement cs, int columnIndex)
            throws SQLException {
        return convert(cs.getString(columnIndex));
    }

    private String convert(Boolean b) {
        return b ? "yes" : "no";
    }

    private Boolean convert(String s) {
        return s.equals("yes");
    }

}

然后在映射器模板中使用它:

代码语言:javascript
复制
<update id="update">
UPDATE
myTable
   <set>
        ...
       <if test="myField != null">myField = #{myField ,typeHandler=YesNoBooleanTypeHandler}</if>
        ...
    </set>
 WHERE
    ...
 </update>
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13474296

复制
相关文章

相似问题

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