资讯专栏INFORMATION COLUMN

MyBatis 使用annonation定义类型映射

DrizzleX / 1396人阅读

摘要:摘要介绍如何使用的方式定义数据库字段到成员变量直接的映射关系,以及定义数据库表中的类型到类型的自定义转换。首先定义一个从到的转换类然后在映射关系的定义中指定这个类作为

摘要

介绍如何使用annonation的方式定义数据库字段到Java成员变量直接的映射关系,以及定义数据库表中的类型到Java类型的自定义转换。关于如何配置MyBatis进行Java对象和Mysql表之间的映射可以参照 MyBatis 基本用法

简易用法

下面是一个最基础的映射关系配置:

public interface SimpleMapper {
    @Select("select url from testdb.MY_BATIS_TEST;")
    Set selectRecords();
}

在默认的配置中,mysql表的字段会映射到同名字的java成员变量,下面我们看如何设置映射到其他的变量,以及如何进行类型转换

自定义映射关系

如果我们的DB中的一列名称是support_os_version类型是VARCHAR,但是在Java代码中对应的变量是 String supportOSLevel,可以进行如下定义:

public interface SimpleMapper {
    @Select("select url from testdb.MY_BATIS_TEST;")
    @Results(value = {
            @Result(property = "support_os_version", column = "supportOSLevel"),
    })
    Set selectRecords();
}
定义类型映射

如果我们的support_os_version列是一个使用逗号分割的版本号里表,
在Java中我们想映射到 String[] supportOSLevel, 可以通过定义 typeHandler 的方式进行映射。

首先定义一个从String到String[]的转换类:

public class StringSplitHandler extends BaseTypeHandler {

    private static final Joiner joiner = Joiner.on(",");

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String[] strings, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, joiner.join(strings));
    }

    @Override
    public String[] getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
        String data = resultSet.getString(columnName);
        if(StringUtils.isEmpty(data)) {
            return new String[0];
        } else {
            return data.split(",");
        }
    }

    @Override
    public String[] getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
        String data = resultSet.getString(columnIndex);
        if(StringUtils.isEmpty(data)) {
            return new String[0];
        } else {
            return data.split(",");
        }
    }

    @Override
    public String[] getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
        String data = callableStatement.getString(columnIndex);
        if(StringUtils.isEmpty(data)) {
            return new String[0];
        } else {
            return data.split(",");
        }
    }
}

然后在映射关系的定义中指定这个类作为typeHandler

public interface SimpleMapper {
    @Select("select url from testdb.MY_BATIS_TEST;")
    @Results(value = {
            @Result(property = "support_os_version", column = "supportOSLevel", typeHandler = StringSplitHandler.class),
    })
    Set selectRecords();
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17577.html

相关文章

  • MyBatis 使用annonation定义类型映射

    摘要:摘要介绍如何使用的方式定义数据库字段到成员变量直接的映射关系,以及定义数据库表中的类型到类型的自定义转换。首先定义一个从到的转换类然后在映射关系的定义中指定这个类作为 摘要 介绍如何使用annonation的方式定义数据库字段到Java成员变量直接的映射关系,以及定义数据库表中的类型到Java类型的自定义转换。关于如何配置MyBatis进行Java对象和Mysql表之间的映射可以参照 ...

    Drinkey 评论0 收藏0
  • MyBatis 基本用法

    摘要:定义类有两种定义查询结果到类的映射关系的方式,一种是通过文件定义,一种是通过定义,这里使用第二种方法。 定义mapping类 MyBatis 有两种定义查询结果到 Java 类的映射关系的方式,一种是通过xml文件定义,一种是通过Java annonation 定义,这里使用第二种方法。现在我们有一张mysql的表定义如下: CREATE TABLE `MY_BATIS_TEST` (...

    BearyChat 评论0 收藏0
  • MyBatis 基本用法

    摘要:定义类有两种定义查询结果到类的映射关系的方式,一种是通过文件定义,一种是通过定义,这里使用第二种方法。 定义mapping类 MyBatis 有两种定义查询结果到 Java 类的映射关系的方式,一种是通过xml文件定义,一种是通过Java annonation 定义,这里使用第二种方法。现在我们有一张mysql的表定义如下: CREATE TABLE `MY_BATIS_TEST` (...

    Snailclimb 评论0 收藏0

发表评论

0条评论

DrizzleX

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<