优秀是一种习惯!!!
Solo  当前访客:0 开始使用

AmethystFOB

记录精彩人生

Mybatis使用问题汇总

2023-11-29 10:14:01 amethystfob
0  评论    0  浏览

Mybatis使用问题

一、mybatis获取表数据返回map,用ArrayList<HashMap<String, Object>>接收,数据既有Double类型又有Integer类型,该如何返回相同的类型

在使用 MyBatis 获取表数据返回 Map 时,我们可以通过设置 typeHandler 来指定对应列的数据类型。默认情况下,MyBatis 会将数值型的数据统一解析成 Double 类型,所以需要指定相应的 typeHandler 才能让 MyBatis 返回正确的数据类型。

例如,假设我们的表中有一个字段 age,其中既有 Integer 类型的数据,又有 Double 类型的数据,我们希望在查询时能够返回与数据库中存储的数据类型一致的结果,可以按照以下步骤进行操作:

1.创建自定义的 typeHandler 类,继承 BaseTypeHandler,并指定泛型为 Object。

public class MyNumberTypeHandler extends BaseTypeHandler<Object> {

@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
  // 省略
}

@Override
public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
  return rs.getObject(columnName);
}

@Override
public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
  return rs.getObject(columnIndex);
}

@Override
public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
  return cs.getObject(columnIndex);
}
}

2.在 mybatis-config.xml 中配置 typeHandlers,将创建的 MyNumberTypeHandler 类注册为全局类型处理器。

xml
<configuration>
<!-- 省略其他配置 -->
<typeHandlers>
  <typeHandler handler="com.example.MyNumberTypeHandler"/>
</typeHandlers>
</configuration>

3.在 mapper.xml 文件中指定相应列使用的 typeHandler。

xml
<select id="getUserList" resultMap="userMap">
select id, name, age from user
</select>

<resultMap id="userMap" type="java.util.HashMap">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age" typeHandler="com.example.MyNumberTypeHandler"/>
</resultMap>

这样,在获取表数据并使用 ArrayList<HashMap<String, Object>> 接收时,MyBatis 就会根据指定的 typeHandler 返回相应的数据类型了。


标题:Mybatis使用问题汇总
作者:amethystfob
地址:https://newmoon.top/articles/2023/11/28/1701163167448.html

欢迎各路大侠指点留痕:
, , ,
TOP